在两个数组中查找不匹配,并在列

时间:2018-03-27 08:27:41

标签: arrays excel vba excel-vba

我试图通过在excel VBA中使用两个数组来找到几列中的非匹配

因此代码在“Sammanställning”表中的列A(varr数组)中用作另一个数组arr的Facit(来自其他工作表的列k)以查找非匹配,然后在最后添加非匹配“Sammanställning”表中的A栏。

现在出现问题:

它有效,但只是一种。它执行匹配,找到非匹配将其添加到正确位置的末尾。 但是在第一张表之后,如果它添加了非匹配,则它不会更新varr数组。 我尝试使用下面的3个变体更新阵列,但没有工作。我得到了“out of index”错误。

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列中的最后一个非空单元格后添加非匹配项。

1 个答案:

答案 0 :(得分:0)

您可以使用字典吗?您可以将其与按钮推送或工作表事件(可能是第一个更容易)联系起来,以便更新前进。

到目前为止,我正在避免使用您的代码来获取正确的工作表并简单地演示字典部分:

    var BritishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");

    DateTime dt = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified);

    DateTimeInBritishLocal = TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.Local, BritishZone);