Функция VBA, которая возвращает массив и автоматически заполняет диапазон в зависимости от размера массива - PullRequest
0 голосов
/ 21 июня 2020

Я создал функцию, в которой она возвращает массив: Val (0,0) = "Hello" Val (1,0) = "World"

Итак, мой массив - это двумерный массив. Если я помещаю свою формулу в определенную ячейку c, скажем «= GetData ()», она дает мне только 1 значение, которое является первым значением в массиве. Я знаю, что при получении массива я должен выбрать диапазон, затем ввести формулу и нажать «CTRL + SHIFT + ENTER», это действительно работает.

Однако я не знаю, есть ли вероятность, что выбрав только 1 ячейку (не диапазон) и введите формулу, которая возвращает массив, я хочу автоматически заполнять ячейки на основе размера массива, поэтому пользователю не нужно выбирать диапазон и нажимать CTRL + SHIFT + Enter.

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 21 июня 2020

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 и играя с ним, запустит код один раз, а не для параметра списка «Ничего» ...

0 голосов
/ 21 июня 2020

Используйте функцию new = FILTER () в excel. Это вернет 1D или 2D-массив в excel. VBA не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...