Вывести массив из функции VBA в лист Excel, используя формулу - PullRequest
0 голосов
/ 06 июля 2011

Я нашел отличную функцию RegEx, которую я использую (см. Ниже). Функция выводит массив. Это нормально, если мне нужен только первый элемент массива. Но я пытаюсь извлечь авторов из данных цитирования, поэтому мне нужно извлечь несколько элементов из этого вывода.

Я знаю о массивах в листах Excel. Поэтому я попытался = {ReFind (A3, "[^ ()] +")}, выделил область и нажал Ctrl + Shift + Enter, но он возвращает ошибку и {= ReFind (A3, "[^ ()] + ")} просто дублирует формулу в ячейках.

Есть ли способ заставить функцию выводить массив в несколько ячеек по формуле? Могу ли я уйти без необходимости писать больше VBA?

Function ReFind(FindIn, FindWhat As String, _
    Optional IgnoreCase As Boolean = False)
Dim i As Long
Dim matchCount As Integer
Dim RE As Object, allMatches As Object, aMatch As Object
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = FindWhat
RE.IgnoreCase = IgnoreCase
RE.Global = True
Set allMatches = RE.Execute(FindIn)
matchCount = allMatches.Count
If matchCount >= 1 Then
    ReDim rslt(0 To allMatches.Count - 1)
    For i = 0 To allMatches.Count - 1
        rslt(i) = allMatches(i).Value
    Next i
    ReFind = rslt
Else
    ReFind = ""
End If
End Function

1 Ответ

2 голосов
/ 06 июля 2011

Вам необходимо вернуть двумерный массив, который соответствует диапазону вызывающих ячеек (чтобы вы вводили его как формулу многоклеточного массива (не вводите {}, просто выберите ячейки, введите формулу и нажмите Control-shift-enter)) Вы в настоящее время возвращаете одномерный массив

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