Я довольно новичок в VBA и надеюсь, что один из вас может помочь.
У меня довольно сложная функция xls, и мне нужно иметь возможность обновлять части этой функции, то есть размер таблицы, к которой она относится.
Справочная информация - у меня постояннорастущая таблица в скажем sheet2, в которой я использую формулы массива для компиляции некоторой информации, которая мне нужна. Поскольку эти массивы потребляют много вычислительной мощности, я создал макрос, в котором таблица преобразуется обратно в диапазон, затем выполняется куча вычислений, и она переформатируется в виде таблицы. Что я не учел, так это то, что эта перестановка таблицы перестает снабжать мой обзорный лист1 информацией из этой таблицы. Итак, что мне в основном нужно, так это изменить формулу массива в моем обзорном листе, чтобы она снова подстраивалась под размер таблицы.
Формула массива, которую мне нужно изменить, следующая:
INDEX (Операции $ O $ 20: $ O $ 77, MAX (IF (Операции $ D $ 20: $ D $ 77 = Обзор B8, IF (Операции $ C $ 20:! $ C $ 77 <= Обзор $В $ 5, IF (Операции $ K $ 20: $ K $ 77 = Обзор F8, ROW (Операции $ O $ 20:!!! $ O $ 77) -MIN (ROW (Операции $ O $ 20: $ O $ 77)) + 1))), 1)) </em>
, где строка 20 фиксирована, но таблица расширяется вниз (например, 77 будет даже расти до 5000 или около того)
Я довольнозастрял на этом и еще не генерировал много (полезного) кода.
Sub UpdateOverview()
Sheet2.ListObjects("Transactions").Unlist
Dim last_row_T As Long
last_row_T = Cells(Rows.Count, "C").End(xlUp).Row
Sheet1.Range("H7").FormulaArray="=INDEX(Transactions!$O$20:$O$77,MAX(IF(Transactions!$D$20:$D$77=Overview!B8,IF(Transactions!$C$20:$C$77<=Overview!$B$5,IF(Transactions!$K$20:$K$77=Overview!F8,ROW(Transactions!$O$20:$O$77)-MIN(ROW(Transactions!$O$20:$O$77))+1))),1))"
Sheet2.ListObjects.Add(xlSrcRange, Range("C19").CurrentRegion, , xlYes).Name = "Transactions"
End Sub
Я пробовал разные версии реализации last_row_T в формуле, но это не сработало.
В конечном итогеМне нужно изменить каждую из 77 в формуле индекса в соответствии с растущим размером таблицы - так что это должно быть динамическое решение. Есть ли способ сделать это, или я где-то в nomansland?