【问题标题】:Using (Nested Loop) .find to grab identical values seperate sheets VBA EXCEL使用(嵌套循环).find 来获取相同的值单独的工作表 VBA EXCEL
【发布时间】:2017-07-21 00:40:05
【问题描述】:

我有以下代码循环遍历两个不同的工作表并将 A 列与 A 列进行比较,以检查另一张工作表上是否存在相同的值。如果是,则该行将显示为绿色。

Dim compareRange As Range
Dim toCompare As Range
Dim rFound As Range
Dim cel As Range

Set compareRange = Worksheets("sheet2").Range("A1:A" & Lastrow3)
Set toCompare = Worksheets("sheet3").Range("A1:A" & Lastrow4)
Set rFound = Nothing

For Each cel In toCompare
Set rFound = compareRange.Find(cel)
If Not rFound Is Nothing Then
    cel.EntireRow.Interior.Color = 5296274
    Set rFound = Nothing
End If
Next cel

现在我有了包含行的单元格,如何从同一行但在不同列中获取单元格?因为现在我想检查 sheet2 中的 L 列是否与 sheet3 中的 L 列匹配。如果不是,我想从 sheet2 中获取该值并将其放在同一列 L 下方的新行中。任何指导或帮助将不胜感激。

【问题讨论】:

  • 定义抓取?你到底想完成什么?您是否已经获得了行着色?
  • 查看 Range.Offset() 属性,如果您偏移某个整数,您可以在必要时将其作为循环的一部分进行递增。
  • 我正在尝试获取 sheet2 上 L 列中任何值的值,该值与我发现与 A 匹配的 cel 位于同一行。L 值为 OPEN 或 CLOSED。假设 sheet2 中的 A 行和 sheet3 中的 A 行在第五个循环中匹配,并且两者的值都为 123 和 123。现在我想留在同一行并抓取 F 列 sheet2 中的任何内容并与 F 列 sheet3 进行比较。跨度>
  • 将您的值存储到变量中? var = cel("L" & cel).Value 之类的东西?

标签: vba excel


【解决方案1】:

这应该有助于演示如何做你想做的事

Private Sub compAre()

    Application.ScreenUpdating = False

    Dim sht1 As Range
    Dim rcell As Range

    Set sht1 = ThisWorkbook.Sheets("Sheet1").Range("A1:A3")

    For Each rcell In sht1.Cells
        If rcell.Value = ThisWorkbook.Sheets("Sheet2").Range("L" & rcell.Row).Value Then
            sht1.Rows.Interior.Color = vbBlue
        End If
    Next rcell

    Application.ScreenUpdating = True

End Sub

【讨论】:

  • 我看不出这是如何从不同的列中抓取的 A 匹配项?你是说ThisWorkbook.Sheets("Sheet2").Range("F" & rcell.Row).Value 那么?
  • @AngatvirSanghera 已编辑以向您展示如何毕业 L :)
【解决方案2】:

这里有一些代码涵盖了您所描述的大部分内容,为匹配的单元格着色并将它们放入第三张表的 L 列。在那之后我不明白问题的其余部分,但这应该给你一个好的开始。动画首先显示工作表 1、2、3 的内容,然后在运行宏后再次显示这些工作表。

Option Explicit
Sub test()
Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet, num As Integer
Dim r1 As Range, r2 As Range, r3 As Range, cell1 As Range, cell2 As Range
Set sh1 = Worksheets("1")
Set sh2 = Worksheets("2")
Set sh3 = Worksheets("3")
Set r1 = Range(sh1.Range("A1"), sh1.Range("A1").End(xlDown))
Set r2 = Range(sh2.Range("A1"), sh2.Range("A1").End(xlDown))
Set r3 = sh3.Range("L1")
For Each cell1 In r1
  For Each cell2 In r2
    If cell1 = cell2 Then
      cell1.Interior.Color = vbGreen
      cell2.Interior.Color = vbGreen
      r3 = cell1.Value
      Set r3 = r3.Offset(1, 0)
      num = num + 1
    End If
  Next
Next
MsgBox (num & " were found to match")
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2014-03-22
    相关资源
    最近更新 更多