VBA:如何比较dynamic数组值

嗨,大家好,

我是VBA的新手,对于以下问题的帮助将非常有帮助:
我有一个长度不一的string数组。 我想比较数组中每个位置的值与不同长度的数组中的所有位置。

我试图跟随(比较固定值,而不是一个初学者的数组,但不能得到这个工作):

Option Explicit Dim subassys(counter) As Long, Filter1 As String, Filter2 As String, Filter3 As String, Filter4 As String Sub sub_fitler () Sheets("data").Select ActiveSheet.Range("A1").CurrentRegion.AutoFilter Field:=4, Criteria1:="Spectrum 1" Range(("E2"), Range("E1").End(xlDown)).Copy Sheets("Temp").Select ActiveSheet.Paste Range("A1").End(xlDown).RemoveDuplicates Columns:=1, Header:=xlNo Range(ActiveCell, ActiveCell.End(xlDown)).Select set subassys = Selection Filter1 = "0" Filter2 = "ET" Filter3 = "Assy" Filter4 = "Normteil" For counter = 0 To UBound(subassys) If subassys(counter) = Filter1 Then ActiveCell.Delete Exit For ElseIf subassys(counter) = Filter2 Then ActiveCell.Delete Exit For ElseIf subassys(counter) = Filter3 Then ActiveCell.Delete Exit For ElseIf subassys(counter) = Filter4 Then ActiveCell.Delete Exit For End If Next counter Range(ActiveCell, ActiveCell.End(xlDown)).Select Set subassys = Selection Sheets("Temp").Range("A1").CurrentRegion.Clear End sub 

我觉得我已经在声明中犯了一个错误 – 没有声明数组的值为string。 但是,我真的不知道如何才能使这个工作。 有人可以帮我解决这个问题吗?

插口

PS这只是代码的一部分,前后还有其他元素

如果使用Range.Delete方法删除整行或整列, 则不必提供Shift xlDeleteShiftDirection选项,因为没有真正的select。 但是,如果您要删除一小组单元格或(如您的情况)单个单元格,则必须指定Shift:=xlShiftToLeftShift:=xlShiftUp

工作表上的什么单元格Temp收到.Paste? 也许A1? 没有给出明确的小区位置; 只是在粘贴之后不久就开始在列A上工作了。

当你在一个循环中删除单元格时,从底部开始,以数字方式工作。 如果不这样做,可能会导致您在删除单元格时跳过单元格,所有内容都会上移,然后循环到下一个单元格。

我不知道为什么Dim subassys(counter) As Long被使用,然后Set为Range对象 。 随后将其与一系列文本string进行比较。 我把它作为一个Range调暗,只有在比较(和可能的细胞删除)完成后才使用它。

 Option Explicit Dim subassys As Range, Filters As String Sub sub_fitler() Dim rw As Long With Worksheets("Data") With .Range("A1").CurrentRegion .AutoFilter Field:=4, Criteria1:="Spectrum 1" .Resize(.Rows.Count - 1, 1).Offset(1, 4).Copy _ Destination:=Worksheets("Temp").Range("A1") End With End With With Worksheets("Temp") .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) _ .RemoveDuplicates Columns:=1, Header:=xlNo Filters = Join(Array("", "0", "ET", "Assy", "Normteil", ""), ChrW(8203)) For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If CBool(InStr(1, Filters, ChrW(8203) & .Cells(rw, 1).Value2 & ChrW(8203), vbTextCompare)) Then .Rows(rw).EntireRow.Delete End If Next rw Set subassys = .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) .Range("A1").CurrentRegion.Clear End With End Sub 

我已经改变了主要比较在另一个删除的string中的分隔string。 这完全避免了二级循环。