Excel VBA не позволяет функции UDF изменять значение другой ячейки. Единственное, что разрешено делать UDF, - это возвращать значения в ячейку / ячейки, из которых он вызывается .
Итак, то, что вы пытаетесь сделать, невозможно.
Чтобы получить то, что вам нужно, не используйте функцию UDF ! Я имею в виду, не вызывайте его из рабочего листа.
Если вам нужен обходной путь, вы можете попробовать изменить лист Event
, чтобы настроить таргетинг на определенную ячейку c (где вы что-то меняете) и создать код разместить массив там, где ваш код говорит ему ...
Пример этого будет следующим. Вы можете видеть, что одномерный массив также может использоваться для возврата в диапазоне:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.address(False, False) <> "G1" Then Exit Sub
If Target.Value = "Go" Then
Dim arr(1 To 1, 1 To 2) As Variant, arr2 As Variant
arr(1, 1) = "Hello": arr(1, 2) = "World"
arr2 = Split("Hello World", " ")
Target.Offset(, 1).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
Target.Offset(1, 1).Resize(1, UBound(arr2) + 1).Value = arr2
End If
End Sub
Чтобы использовать его, вы должны написать «Go» на листе, где существует указанное выше событие. Я бы посоветовал вам проверить ячейку как список, указав Go,Nothing
и играя с ним, запустит код один раз, а не для параметра списка «Ничего» ...