Вложенные циклы для записи в 2d массив - PullRequest
0 голосов
/ 16 января 2020

Я довольно новичок в 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), и я хотел бы минимизировать количество строк, где это возможно.

Может кто-нибудь мне помочь, или я ошибся в этом?

Редактировать: Некоторые скриншоты для иллюстрации проблемы

An example of the source sheet, ignore the actual values.

On the left is the desired outcome, but the current outcome is on the right. The array is the bordered area, a smaller version of my desired array in the code.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...