将范围内的唯一字符串过滤到数组中

时间:2019-01-08 03:34:32

标签: arrays excel vba

我有一列字符串值,最多具有4个唯一值(不包括空字符串和“虚拟字符串”)。

我想将这些值过滤到字符串数组中。

我正在尝试学习VBA,所以我在寻找更多关于为什么我的代码无法正常工作的解释,而不是更简单的方法来对此进行解释。但是,这些也总是受到赞赏。

基本上,我的程序适用于整数(对于1-85的列,我得到(1、2、3、4)),但是当我将引用列换成字符串的列时(看起来只有1)唯一值),得到一个包含两个相等值和两个空变量的数组。它只能是一个变量。

我尝试引入第二个唯一的字符串值。它可以正确捕获它,但是将其分配给数组中的第三个变量

我尝试引入第三个唯一字符串值。它可以正确捕获它,但是将其分配给数组中的第四个变量

我尝试引入第四个唯一值。它可以正确捕获它,但是由于数组具有第一个值的重复项,因此未将其分配给数组

Option Explicit

Dim r1 As Range
Dim Plans(3) As String
Dim i as range

Sub scrubbingsub()
    Set r1 = Nothing
    For i = 0 To 3
        Plans(i) = ""
    Next

    For Each r1 In Range("P2:P86")
        If (r1.Cells.Value <> "dummy string") And (r1.Cells.Value <> "") Then
            If Not IsInArray(r1.Cells.Value, Plans) Then
                For i = 0 To 3
                    If (Plans(i) = "") Then
                        Plans(i) = r1.Cells.Value
                        Exit For
                    End If
                Next
            End If
        End If
    Next

    MsgBox (Plans(0) & ", " & Plans(1) & ", " & Plans(2) & ", " & Plans(3))
End Sub



'Below function takes a string and an array of strings
'if the string is anywhere in the array, it returns TRUE
Function IsInArray(stringtobefound As String, arr As Variant) As Boolean
    IsInArray = (UBound(Filter(arr, stringtobefound)) >= 1)
End Function

如上所述,该子程序最多需要从范围中过滤4个字符串并将其显示在消息框中。由于某些原因,我的sub在处理字符串时会复制第一个唯一值

0 个答案:

没有答案