【发布时间】:2021-06-05 00:10:56
【问题描述】:
我需要能够比较 2 个工作表中的每个单元格,但数据不会总是在同一行,因为新数据会不断添加和导出。
两张纸上的范围都相当大,所以现在我将其限制为 A1:AS150。任何找不到匹配项的实例我都想突出显示该单元格。
我找到了这个,它看起来与我需要的很接近,但不起作用(显然,我在我的工作示例中添加了 Else 代码)。
Sub test()
Dim varSheetA As Variant
Dim varSheetB As Variant
Dim strRangeToCheck As String
Dim iRow As Long
Dim iCol As Long
strRangeToCheck = "A1:AS150"
' If you know the data will only be in a smaller range, reduce the size of the ranges above.
Debug.Print Now
varSheetA = Worksheets("Sheet1").Range(strRangeToCheck)
varSheetB = Worksheets("Sheet2").Range(strRangeToCheck) ' or whatever your other sheet is.
Debug.Print Now
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.
' Do nothing.
Else
' Cells are different.
' Code goes here for whatever it is you want to do.
End If
Next iCol
Next iRow
要回答“狐火和烧伤和烧伤”问题: 检查: Sheet1.Cell$.Value 是否存在于 sheet2 中,但适用于两个工作表范围内的每个单元格。
表 1
| A | B | C |
|---|---|---|
| Paul | 999 | ABC111 |
| John | 888 | ABC222 |
| Harry | 777 | ABC333 |
| Tom | 666 | ABC444 |
表 2
| A | B | C |
|---|---|---|
| Tom | 666 | ABC444 |
| John | 888 | ABC222 |
| Harry | 777 | ABC333 |
所以在这些例子中:
在工作表 2 中搜索 Sheet1.A1,如果 = 匹配,则无其他内容,否则将突出显示红色。然后是 A2、A3 等,然后是 B1、B2 等,然后是 C1、C2 等……你明白了要点。
【问题讨论】:
-
欢迎来到 SO。你在做什么检查?您是否需要检查单元格值是否存在?您需要将其与另一个单元格进行比较吗?你期待什么样的结果?什么是失败?什么是出口?请发布一些数据示例、输入和预期输出。
-
声明“数据不会总是在同一行,因为不断添加和导出新数据”,上面的代码不能返回你需要的样子。它检查单元格的相同位置(行、列)。如果您确实需要帮助,则必须回答上述问题。如果有一些相同的列排列,您必须说明它(以节省代码浪费时间),并且如果新添加的列/行/数据中的某些逻辑也将受到欢迎。否则,如果仅在您的脑海中定义需求,就很难得到帮助......
-
列位置将始终相同。因此,我的示例中的 A 列将始终是 A 列,它只是随着新记录的添加而移动的行。
-
所以您想检查工作表 1 列 A 的值是否存在于工作表 2 列 A 的任何行中?然后在这种情况下使用 COUNTIF。
-
我们应该明白这些行不是在最后一个现有行之后添加的吗?它们是否添加到范围的顶部?如果不是,您是否只想确定哪些是新行?如果没有,请问你的最终目标是什么?