Я пытаюсь переключиться на массивы VBA с помощью одной из моих книг Excel, так как в ней есть несколько листов, которые ссылаются на лист с 50K + строками и столбцами от A до AK. Есть куча IF, SUMIF и VLookUps. Excel занимает около 10 минут, чтобы полностью рассчитать все формулы и заполнить нужные мне данные, затем еще несколько минут, чтобы сохранить то, что мне нужно, только с использованием значений и без формул.
Я новичок в VBA и только удалось преобразовать vlookups, и это сократило время обработки указанных формул до почти мгновенного. Сейчас я пытаюсь преобразовать формулы IF / SUMifs ... но по какой-то причине я просто не могу понять, как подойти к этому / найти решение онлайн.
Используя приведенный ниже код, я ' Добавляя два столбца, которые мне нужны для формулы IF, я уверен примерно на 90%, поскольку использую один и тот же (для чтения разных столбцов) для кода vlookup, который работает отлично. Так что это должно работать и для отображения словаря и массива.
'Array variable
Dim arr() As Variant
'Dictionary object
Dim dic As Object: Set dic = CreateObject("Scripting.Dictionary")
'Read data into array
With Sheets("test")
x = .Cells(.Rows.Count, 2).End(xlUp).Row
'Range(C2:Cx where x is last row in column C)
arr = .Cells(2, 3).Resize(x - 1).Value
End With
'Map arr into dictionary
For x = LBound(arr, 1) To UBound(arr, 1)
'dic(match column) = return column
dic(arr(x, 1)) = arr(x, 3)
Next x
'Clear array contents
Erase arr
With Sheets("test")
x = .Cells(.Rows.Count, 4).End(xlUp).Row
'Read values from column D into array
'Range(D2:Dx, where x is last row in column D)
arr = .Cells(2, 4).Resize(x - 1).Value
Теперь я пытаюсь преобразовать следующую формулу =IF(ROW(A2)=1,"Vendor",IF(D2="",C2," **"&C2))
в VBA. Я предполагаю, что идеальным способом было бы использовать al oop и сохранить значения в arr, а затем вывести их в желаемый столбец, но я не могу придумать подход для этого. Я пробовал For в сочетании с IF, но безуспешно. Это то, что я попробовал безуспешно:
For x = LBound(arr, 1) To UBound(arr, 1)
If dic(arr(x, 1)) <> "" Then
arr(x, 1) = "**" & arr(x,1)
Также у меня есть набор SUMIF, которые в основном представляют собой одну и ту же формулу с различными критериями
: =SUMIFS(L:L,AE:AE,AE2,E:E,E2,AF:AF,AF2)
. Но для этого, за исключением отображения всего листа в массив / словарь, я понятия не имею, что делать.
Я новичок во всех VBA и на данный момент я полностью застрял. Любая помощь будет полезна :).