【发布时间】:2018-09-05 13:38:28
【问题描述】:
我正在尝试通过在 excel VBA 中使用两个数组来查找多个列中的不匹配项
因此,代码在“Sammanställning”工作表中的 A 列(varr 数组)中使用,作为 Facit 上的一种,用于另一个数组 arr(来自其他工作表的列 k)来查找不匹配项,然后将不匹配项添加到最后“Sammanställning”表中的 A 列。
现在解决问题:
它有效,但只是一种。它进行匹配,找到不匹配的将其添加到正确位置的末尾。 但是在第一张纸之后,如果它添加了不匹配的内容,它不会更新 varr 数组。 我尝试使用下面的 3 种变体更新数组,但没有奏效。我收到“超出索引”错误。
ReDim Preserve varr(LBound(varr) To (UBound(varr) + 1)) As Variant
ReDim Preserve varr(LBound(varr) To (UBound(varr) + 1))
ReDim Preserve varr(UBound(varr) + 1)
第一部分是为了避免看错表格,为此我使用 GlobalSheetName。
Sub KollaFlyttaData()
Dim ws As Worksheet
Dim ShName As String
Dim char As Variant
Dim blnChar As Boolean
Dim Sistaraden As Variant
Dim varr As Variant
varr = Sheets("Sammanställning").Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
For Each ws In ActiveWorkbook.Worksheets
For Each char In Split(GlobalSheetName, ",")
If ws.Name = char Then
blnChar = True
Exit For
Else
blnChar = False
End If
Next
If Not blnChar = True Then
ws.Activate
Dim arr As Variant
arr = Range("K3:K" & Cells(Rows.Count, "K").End(xlUp).Row).Value
Dim x As Variant, y As Variant, match As Boolean
For Each x In arr
match = False
For Each y In varr
If x = y Then match = True
Next y
If Not match Then
Sistaraden = Sheets("Sammanställning").Cells(Rows.Count, "A").End(xlUp).Row + 1
Sheets("Sammanställning").Range("A" & Sistaraden).Value = x
ReDim Preserve varr(LBound(varr) To (UBound(varr) + 1)) As Variant
End If
Next x
End If
Next
End Sub
如何更新 varr,以便添加所有不匹配项并将不匹配项添加到“Sammanställning”工作表中 A 列的最后一个非空单元格之后。
【问题讨论】:
-
当您执行
varr = Sheets("Sammanställning").Range("A1:A" ...时,它是该范围内Values的快照。如果您稍后更新范围,您将需要再次执行varr = ...(而不是redim varr ...) -
我做了一个
varr=...,但只能用列表中已有的数据来广告更多新单元格。