В Excel VBA у меня есть функция для y с вводом 3 переменных (a, b, c). Что я хотел бы сделать, так это использовать VBA для автоматического применения этой функции к диапазону ячеек (комбинациям a, b и c, как указано на листе).
Как я настроил свои данные:
b 1 1 1 1 1 2 2 2 2 3 3 3 4 4 etc.
c 2 3 4 5 6 3 4 5 6 4 5 6 5 6 etc.
a
1 . . . . . . . . . . . . . .
2 . . . . . . . . . . . . . .
3 . . . . . . . . . . . . . .
4 . . . . . . . . . . . . . .
etc.
'Точки' - это то, где должны заканчиваться результаты функции (a,b,c) (например, верхняя левая точка должна быть результатом "функции (1,1,2)"). Следует отметить, что в столбце должны использоваться одни и те же парные значения b и c (поэтому в одном и том же столбце меняется только «a», а b и c остаются постоянными).
Предыдущая версия этой функции имела только 2 переменные в качестве входных данных (a и b, настроенные так же, как данные выше), и я использовал 2D-массив (значения 'a' в строках по вертикали, значения «b» в столбцах по горизонтали), чтобы применить функцию ко всем комбинациям a и b, используя следующий код:
Sub applyfunction()
Dim ws As Worksheet
Dim arr_ab()
Dim a, b, i As Long, j As Long
For Each ws In Worksheets
If ws.Name Like "Util*" Then
With ws
a = .Range("B5:B244").Value
b = .Range("C2:CG2").Value
ReDim arr_ab(1 To UBound(a), 1 To UBound(b, 2))
For i = LBound(arr_ab) To UBound(arr_ab)
For j = LBound(arr_ab, 2) To UBound(arr_ab, 2)
arr_ab(a, b) = "=function(" & a(i, 1) & ", " & b(1, j) & ")"
Next j
Next i
.Range("C5:CG244").Value = arr_ab()
End With
End If
Next ws
End Sub
Однако теперь, когда я добавил в функцию третью переменную (c), я хочу использовать функцию (a,b,c). У меня есть некоторые проблемы с тем, чтобы заставить его работать, как я делал, когда у меня было только 2 переменные. Есть ли способ использовать для этого массив?
Заранее спасибо за любую помощь.
Изменить: я хочу использовать значения (а не ссылки) a,b,c в функции
Возможный дубликат Расширение ячеек столбца для каждой ячейки столбца.
Вы хотите, чтобы полученная формула использовала значения a, b, c или ссылки на ячейки, содержащие значения?
@chrisneilsen Я бы хотел, чтобы в полученной формуле использовались значения a, b, c (а не ссылки). Я отредактировал вопрос, чтобы прояснить это.
Измените на `b = .Range("C2:CG3").Value` и
= "=function(" & a(i, 1) & ", " & b(1, j) & "," &b(2,j) & ")"
@chrisneilsen Кажется, это работает, спасибо! Есть ли способ отметить ваш комментарий как полезный?