我有一列字符串值,最多具有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在处理字符串时会复制第一个唯一值