Установка возвращаемого значения в функции vba вызывает саму функцию - PullRequest
0 голосов
/ 27 июня 2018

Я использую следующую функцию для получения уникальных значений в массиве. Однако во второй последней строке UniqueArray (i) = TempArray (i), она снова вызывает саму функцию вместо назначения значения массива. Спасибо за любую помощь.

Function UniqueArray(MyArray) As Variant

Dim TempArray As Variant
ReDim TempArray(0)
TempArray(0) = MyArray(LBound(MyArray))
For i = LBound(MyArray) To UBound(MyArray)
      If Not IsInArray(TempArray, MyArray(i)) Then
            ReDim Preserve TempArray(UBound(TempArray) + 1)
            TempArray(UBound(TempArray)) = MyArray(i)
      End If
Next i

ReDim MyArray(UBound(TempArray))
For i = LBound(TempArray) To UBound(TempArray)
    UniqueArray(i) = TempArray(i)
Next i

End Function

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Передайте массив TempArray обратно целиком. Вам не нужно полагаться на вспомогательные функции для определения уникальности, так как приложение Excel.Application имеет несколько параметров.

Sub main()
    Dim arr As Variant

    arr = Array(1, 2, 2, 3, 4, 5, 5)

    Debug.Print Join(arr, ",")    '1,2,2,3,4,5,5

    arr = UniqueArray(arr)

    Debug.Print Join(arr, ",")    '1,2,3,4,5

End Sub

Function UniqueArray(MyArray) As Variant

    Dim i As Long, TempArray As Variant

    ReDim TempArray(0)
    TempArray(0) = MyArray(LBound(MyArray))

    For i = LBound(MyArray) + 1 To UBound(MyArray)
          If IsError(Application.Match(MyArray(i), TempArray, 0)) Then
                ReDim Preserve TempArray(UBound(TempArray) + 1)
                TempArray(UBound(TempArray)) = MyArray(i)
          End If
    Next i

    UniqueArray = TempArray

End Function

Если функция будет использоваться за пределами Excel, вы, вероятно, захотите сохранить сопутствующую функцию IsInArray.

0 голосов
/ 28 июня 2018

Полагаю, вам нужно будет переопределить UniqueArray , а не MyArray , поскольку MyArray является входом для функции. Поскольку вы еще не объявили его как массив.

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