Я довольно новичок в VBA, но я пытаюсь автоматизировать задачу на работе, извлекая значения из одной книги, чтобы затем заполнить другую, но я столкнулся с проблемой на раннем этапе. Я подумал, что было бы неплохо использовать вложенные циклы для заполнения 2d-массива, но хотя код «запускается», он не дает мне нужного результата.
Вот раздел, который меня беспокоит до сих пор :
Dim AccArray(63, 2) As Variant
Dim MonArray(1 To 12) As String
MonArray(1) = "apr"
MonArray(2) = "may"
MonArray(3) = "jun"
MonArray(4) = "jul"
MonArray(5) = "aug"
MonArray(6) = "sep"
MonArray(7) = "oct"
MonArray(8) = "nov"
MonArray(9) = "dec"
MonArray(10) = "jan"
MonArray(11) = "feb"
MonArray(12) = "mar"
Dim TxYrArray(1 To 5) As String
TxYrArray(1) = "4"
TxYrArray(2) = "3"
TxYrArray(3) = "2"
TxYrArray(4) = "1"
TxYrArray(5) = ""
For i = 1 To 64
For t = 1 To 5
For m = 1 To 12
For j = 1 To 3
Dim search As String
search = "cy" & TxYrArray(t) & "_" & MonArray(m) & "_transaction_value"
Set x = Cells.Find(what:=search, After:=Cells(1, 1) _
, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
AccArray(i - 1, j - 1) = x.Offset(, j).Value
Next: Next: Next: Next
'Permutations tried so far
't i j m
'm t i j
'j i m t
'j i t m
'j t i m
'j t m i
'j m i t
'j m t i
'i m t j
'i m j t
'i j m t
'i j t m
'i t j m
'i t m j
Сначала я подумал, что я могу быть порядком циклов, поэтому я попробовал несколько перестановок, но безрезультатно. Я около 20 минут пытался найти способ включения таблиц, чтобы я мог показать вам, как я хочу, чтобы массив выглядел, и впоследствии показать вам, что он делает вместо этого, но кажется, что таблицы и стекопоток не меня sh хорошо, поэтому я попытаюсь объяснить.
Я хочу, чтобы он нашел «cy_apr_transaction_value», затем записал в AccArray (0,0), затем нашел «cy_may_transaction_value» и записал в AccArray ((1, 0) и т. Д. До "mar", затем выполните "cy1_apr_transaction_value". После cy4_mar я хочу, чтобы он переключился на следующий столбец и снова начал с cy_apr.
Вместо этого кажется, что он делает каждое значение в каждом столбце - это значение последней записи столбца, так что это значение «cy4_mar» для всего в этом столбце.
Одна вещь, которую я только что понял, может заключаться в том, что в В массиве есть 4 строки, которые разделяют 4 года, я просто решил очистить их содержимое после вставки массива, так как не знаю, как обходить эти надоедливые строки без создания я собираю массив для каждого года (всего 5), и я хотел бы минимизировать количество строк, где это возможно.
Может кто-нибудь мне помочь, или я ошибся в этом?
Редактировать: Некоторые скриншоты для иллюстрации проблемы