2016-02-25 3 views
0

Я не уверен, что мне нужно опубликовать этот вопрос в определенном месте, но здесь.Microsoft Excel 2007 - Как написать динамический Table_Array для Vlookup

ВНИМАНИЕ: Стена с текстом. Мне нужно полностью объяснить мою ситуацию, поскольку она представляет собой уникальную проблему с небольшим количеством решений.

TL; DR - Крупная таблица электронных таблиц захватывает данные из электронной таблицы «еженедельно» через vlookups. Каждую неделю выпускается новая электронная таблица. Как я могу автоматизировать vlookup для захвата данных из новой электронной таблицы каждую неделю?

Теперь вот длинная версия ...

У меня есть мастер-таблица, которая использует vlookups, указывающее на другую таблицу. Пример кода ниже:

=VLOOKUP(A2,'...OTC\2016\Reports Sent\[SALES BY SKU STORE wk 3 (retail) (2).xls]SKU'!$D$1:$G$65536,4,FALSE)

Великий. Очень просто.

В настоящее время основная электронная таблица указывает на данные для «Недели 3». Следовательно, [ПРОДАЖА МАГАЗИНЫ SKU wk3 (розничная торговля) (2) .xls]. В настоящее время в каталоге файлов, где находится таблица, таблица 3-го дня является самой современной. Каждую неделю новая электронная таблица будет сохранена в одной папке, но называется [SALES BY SKU STORE wk4 (розничная торговля) (2) .xls]. Получать идею сейчас ..?

Я хочу, чтобы главная таблица могла указывать на новые еженедельные данные, каждый раз, когда существует новая электронная таблица. Поэтому можно было бы как-то сделать vlookup Table_Array динамический. Как это сделать?

Дополнительная информация: - Я написал сценарий PowerShell для вывода всех файлов & расширений файлов в CSV-файл. Затем я создал макрос для импорта данных .csv в отдельный лист в главном файле. Я сделал это как потенциальную таблицу поиска. Пример данных ниже, мы будем называть его "Имя файла Список":

[SALES BY SKU STORE wk1 (retail)(2).xls]

[SALES BY SKU STORE wk2 (retail)(2).xls]

[SALES BY SKU STORE wk3 (retail)(2).xls]

Solutions пытался, но не смог, потому что мой первенствует/макро/знание VBA очень ограничено: -

  • Адрес для печати не изменяется. Единственная часть измененного имени файла - это номер недели. Я рассмотрел идею + 1 на номер недели каждый раз, когда новый файл был добавлен в список имен файлов. Я не знаю, как это сделать.

  • Я пробовал идею CONTCATENATE с Таблица_Array и список названий файлов. Опять же, я не знаю, как это сделать. Просмотр в Интернете заставил меня поверить, что INDIRECT - это путь вперед.

  • Пришло на ум мысль написать IF заявления через код VBA. Потенциально hardcoding имена файлов в vlookup, так или иначе. Опять же, я не знаю, как это сделать.

Пожалуйста, может кто-нибудь пролить свет на то, как я это делаю? Если вы можете ответить с идеей, я постараюсь изо всех сил подражать ей. В этот момент я по достоинству оценю все.

спасибо.

+0

Вы можете не только создать дополнительную книгу, которая является последним файл, а затем просто скопировать файл новой недели поверх каждый раз, когда вы получаете данные новой неделе? Таким образом, формула не нуждается в изменении. – Rory

+0

можете ли вы опубликовать код, который вы создали вместе? есть несколько способов сделать это, но, не видя, как вы пытаетесь работать с ним, трудно обеспечить что-то, что будет максимально плавным с вашим текущим кодом. –

+0

@Rory, что на самом деле хорошая идея. Однако автоматизация - это ключ. Чем меньше ручная работа для пользователей, тем лучше. - сказал мой босс. – agentfl

ответ

1

Что-то вроде этого - я предположил, что вы никогда не будете иметь более 53 финансовых недели:

Sub updateWorkbook() 
    Dim n As Long 
    Const csFOLDER_PATH As String = "C:\your path\" 

    For n = 53 To 1 Step -1 
     If Dir(csFOLDER_PATH & "SALES BY SKU STORE wk" & n & " (retail)(2).xls") <> vbNullString Then 
      FileCopy csFOLDER_PATH & "SALES BY SKU STORE wk" & n & " (retail)(2).xls", csFOLDER_PATH & "SALES BY SKU STORE CURRENT (retail)(2).xls" 
      Exit For 
     End If 
    Next n 
End Sub 

Вы можете позвонить это из открытого мероприятия мастер-книги. В ThisWorkbook модуле, добавьте:

Private Sub workbook_open 
updateWorkbook 
End Sub 
+0

Я скорректировал код, чтобы он соответствовал моему пути к папке. Где я могу разместить код? В новый модуль VB, модуль Sheet1 или модуль ThisWorkbook? Да. Я - нуб. – agentfl

+0

В новом модуле, поэтому он отображается в вашем списке макросов. – Rory

+0

Я бы так подумал. Что такое триггер? Как выполнить код? Когда я нахожу макрос в списке Макро в 'updateWorkbook', он ничего не делает, когда я его запускаю. – agentfl

0

Вы можете использовать

=VLOOKUP(A2,INDIRECT("'...OTC\2016\Reports Sent\[SALES BY SKU STORE wk " & A1 & " (retail) (2).xls]SKU'!$D$1:$G$65536"),4,FALSE) 

где A1 это номер недели вы хотите импортировать данные из?

+0

INDIRECT требует, чтобы исходная книга была открыта. – Rory

+0

Я обязательно отдам это. Спасибо. Я отчитаю. – agentfl

+0

@Rory да. Я читал об этом. Вот почему я чувствовал себя бесполезным в использовании. Но я попробую посмотреть, как он себя ведет. – agentfl

Смежные вопросы