excel vba UDF в цикле массива
У меня есть UDF, который просто делает sumif. Он работает, когда я использую его в ячейке или в цикле «Для каждой ячейки в диапазоне XYZ», но не тогда, когда я петлю через массив.
У меня есть лист со списком учетных записей и идентификационными номерами элементов в столбцах A и B, а затем я добавляю около 20 столбцов данных из нескольких источников и формул. Я делаю что-то вроде этого:
Dim array() as variant, ACCT as string, ID as string, lr as long lr = Range("A1048576").end(xlup) array=Range("A1:Z" & lr) For i=1 to ubound(array) ACCT=array(i,1):ID=array(i,2) array(i,3)=DataSource1(ACCT,ID) array(i,4)=DataSource2(ACCT,ID)
и т.д…
- Ошибка при настройке описания UDF в VBA
- Функция VBA UDF заставляет excel «не отвечать»,
- Использование округления раунда Excel в раундах UDF 1 к 0
- Получение адреса ячейки, в которую была введена функция
- Уникальная консолидация данных в нескольких рабочих листах
Функция DataSource1 не дает мне никаких проблем, но функция DataSource2 возвращает 0. Обе функции почти идентичны, за исключением того, что DataSource2 использует find для создания динамических диапазонов, поскольку столбцы не всегда находятся в одном порядке. И, как я уже сказал, он работает, если я прохожу через каждую ячейку диапазона вместо использования массива.
Function DataSource2_Qty(ACCT As String, ID As String) Dim rng As Range, lr As Long, ACCTS As Range, DATA As Range, _ IDs As Range, Qty As Range, DATASht as Worksheet Set DATASht = Sheets("DataSource2_SECURITY_DATA") Set DATA = DATASht.UsedRange lr = DATA.Rows.Count Set rng = DATA.Cells.Find("Account", searchorder:=xlByColumns, Lookat:=xlWhole) Set ACCTS = DATASht.Range(DATA.Cells(1, rng.Column), DATA.Cells(lr, rng.Column)) Set rng = DATA.Cells.Find("Security Id", searchorder:=xlByColumns, Lookat:=xlWhole) Set IDs = DATASht.Range(DATA.Cells(1, rng.Column), DATA.Cells(lr, rng.Column)) Set rng = DATA.Cells.Find("Quantity", searchorder:=xlByColumns, Lookat:=xlWhole) Set Qty = DATASht.Range(DATA.Cells(1, rng.Column), DATA.Cells(lr, rng.Column)) DataSource2_Qty = Application.SumIfs(Qty, IDs, ID, ACCTS, ACCT) End Function
- EXCEL VBA UDF = Извлечение уникального списка в нескольких выходных ячейках
- UDF не обновляется при вставке строк
- VBA UDF Excel 2010 #VALUE
- Использование функции excel LINEST с несколькими критериями
- Функция поиска соответствия индексов в VBA
- Delphi Excel UDF с возвратом типа Variant
- VBA - оптимизация UDF (счетчик цветов ячеек)
- Excel Custom Function запускает бесконечный цикл сам по себе, «End Function» работает как «Next» или «Loop»