【问题标题】:find missing value which are present in sheet 1 but not in sheet 2查找表 1 中存在但表 2 中不存在的缺失值
【发布时间】:2019-02-04 15:37:02
【问题描述】:

我已经编写了一个示例代码,它比较了两张纸,如果在 col1 的 sheet1 中没有为 col2 找到 sheet2 中的任何值,则突出显示不同

我想将此代码扩展到整个工作表。这样任何不在工作表 2 中的值都会在工作表 1 中突出显示。

我该怎么做?我试图通过 A:Z 增加范围,但它给了我错误

Sub CompareAndHighlight()

Dim rng1 As Range, rng2 As Range, i As Integer, j As Integer
Dim isMatch As Boolean

For i = 2 To Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
    isMatch = False
    Set rng1 = Sheets("Sheet1").Range("A" & i)
    For j = 1 To Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row
        Set rng2 = Sheets("Sheet2").Range("A:B" & j)
        If StrComp(Trim(rng1.Text), Trim(rng2.Text), vbTextCompare) = 0 Then
            isMatch = True
            Exit For
        End If
        Set rng2 = Nothing
    Next j

    If Not isMatch Then
        rng1.Interior.Color = RGB(255, 0, 0)
    End If
    Set rng1 = Nothing
Next i

End Sub

【问题讨论】:

  • 我没有收到此代码的任何错误,但是当我尝试通过“A:B”语法包含时我收到错误
  • 我已经对代码进行了更改。
  • 这都不是VBScript,两个人回答但你们都不能对标签进行排序?

标签: excel vba


【解决方案1】:
Sub CompareAndHighlight()

Dim xRange As Range, yRange As Range
Dim xCell As Range, yCell As Range
Dim Found As Range

Dim wsX As Worksheet: Set wsX = ThisWorkbook.Sheets("Sheet1")
Dim wsY As Worksheet: Set wsY = ThisWorkbook.Sheets("Sheet2")

LR1 = wsX.Range("A" & wsX.Rows.Count).End(xlUp).Row
LR2 = wsY.Range("B" & wsY.Rows.Count).End(xlUp).Row

Set xRange = wsX.Range("A1:A" & LR1)
Set yRange = wsY.Range("B1:B" & LR2)

For Each xCell In xRange

    Set Found = yRange.Find(xCell.Value)

    If Found Is Nothing Then
        xCell.Interior.Color = RGB(255, 0, 0)
    End If

    Set Found = Nothing

Next xCell

End Sub

【讨论】:

  • 好的,你在第二张纸上有“B”,我有“A”。我改变了它。非常感谢你,我给你一个大大的吻。干杯
  • 如果其他列的 A 列最后一个单元格下方有值,我会小心。使用这种方法 LR1 = wsX.Range("A" & wsX.Rows.Count).End(xlUp).Row 您可能会离开它们而不进行比较。
  • 这会找到底部的最后一行@RicardoDiaz,所以下面不能有其他任何东西..
  • @urdearboy 在其他专栏中。 zee 说目标是查看整张纸。
  • 哦-是的。调整 LR1 以使用最有可能指示范围结束的列。我使用了 A 列,因为这已经是 Op 使用 @RicardoDiaz 的内容。无法预测每一个问题
【解决方案2】:

试试这个:

Sub CompareAndHighlight()

    ' Declare object variables
    Dim originalRange As Range
    Dim compareToSheet As Worksheet
    Dim cellRange As Range

    ' Declare other variables
    Dim originalSheetName As String
    Dim compareSheetName As String

    ' >>> Customize
    originalSheetName = "Sheet1"
    compareSheetName = "Sheet2"

    ' Initiate objects
    Set originalRange = ThisWorkbook.Worksheets(originalSheetName).UsedRange
    Set compareToSheet = ThisWorkbook.Worksheets(compareSheetName)


    ' Loop through used cells in first sheet
    For Each cellRange In originalRange

        If StrComp(cellRange.Value, compareToSheet.Range(cellRange.Address).Value, vbTextCompare) <> 0 Then
            cellRange.Interior.Color = RGB(255, 0, 0)
        End If

    Next

End Sub

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多