【问题标题】:excel vba sheet comparison using vba in excel and store result in a sheet?excel vba表格比较在excel中使用vba并将结果存储在表格中?
【发布时间】:2013-09-18 13:18:49
【问题描述】:

我需要动态选择两个 excel 表的范围,并进行逐行比较,然后使用 excel VBA 宏将其打印在报表中,例如 true 或 false。请帮助。VBA Macro to compare all cells of two Excel files 这个链接很有帮助,但我想动态选择范围,还需要在比较表中打印一些 TRUE/FALSE。

我确实想将工作表加载到变体数组中,然后循环遍历它们以提高代码的性能。

注意 - 请假设需要比较的两个工作表都包含相同的行数并已排序。

For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
    For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
        If varSheetA(iRow, iCol) = varSheetB(iRow, iCol) Then
            ' Cells are identical.
            ' i want to go to the exact cell in Comparison sheet and type TRUE Else
            ' Cells are different.
            ' i want to go to the exact cell in Comparison sheet and type FALSE
        End If
    Next iCol
Next iRow

【问题讨论】:

  • 所以您的问题与VBA Macro to compare all cells of two Excel files 重复。你的具体问题是什么?显示您的代码并告诉我们哪些不起作用以及您已经尝试过哪些。
  • 你对代码的尝试是什么?
  • 我无法在比较表中找到导航并用 TRUE/FALSE 填充每个单元格,因为我使用的变量是变体..

标签: vba excel


【解决方案1】:

这是一个示例。示例代码只记录比较选项卡中不匹配的array(i,j)坐标。您应该修改它以记录您需要的任何其他信息:

Sub CompareSheets()
    Dim s1 As Worksheet, s2 As Worksheet, s3 As Worksheet
    Dim rComp As Range, addy As String
    Dim I As Long, J As Long, K As Long
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")
    Set s3 = Sheets("comparison")
    s1.Select
    Set rComp = Application.InputBox(Prompt:="Select range", Type:=8)
    addy = rComp.Address
    ary1 = rComp
    ary2 = s2.Range(addy)
    K = 1
    For I = LBound(ary1, 1) To UBound(ary1, 1)
        For J = LBound(ary1, 2) To UBound(ary1, 2)
            If ary1(I, J) = ary2(I, J) Then
            Else
                s3.Cells(K, 1) = I
                s3.Cells(K, 2) = J
                K = K + 1
            End If
        Next J
    Next I
End Sub

编辑:

作为对您的评论的回应,此版本将在比较表中填写 TRUE 和 FALSE:

Sub CompareSheets2()
    Dim s1 As Worksheet, s2 As Worksheet, s3 As Worksheet
    Dim rComp As Range, addy As String
    Dim I As Long, J As Long, K As Long
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")
    Set s3 = Sheets("comparison")
    s1.Select
    Set rComp = Application.InputBox(Prompt:="Select range", Type:=8)
    addy = rComp.Address
    ary1 = rComp
    ary2 = s2.Range(addy)
    ary3 = s3.Range(addy)
    K = 1
    For I = LBound(ary1, 1) To UBound(ary1, 1)
        For J = LBound(ary1, 2) To UBound(ary1, 2)
            If ary1(I, J) = ary2(I, J) Then
                ary3(I, J) = "TRUE"
            Else
                ary3(I, J) = "FALSE"
            End If
        Next J
    Next I
    s3.Range(addy) = ary3
End Sub

【讨论】:

  • 感谢您的回复,但我确实想针对比较表中的每个单元格打印“真/假”
猜你喜欢
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 2016-08-20
  • 2013-08-04
相关资源
最近更新 更多