首页 文章

Excel VBA:如何比较两列中是否显示值并将其相邻单元格值复制到另一列?

提问于
浏览
0

我正在尝试搜索2组数据(从7月和8月)并进行比较以获得结果

  • 个国家出现在7月和8月

  • 个国家出现在7月,而不是8月

  • 计算国家/地区计数值的增加或减少百分比(出现在7月和8月)

下面是我所指的excel截图

  • 在单元格A2中取值'America'并在E列中搜索

  • 如果找到,将单元格A1,B1和C1中的值复制到H1,I1和J1列

  • 现在我想将F列中的值复制到K列(如果同一个国家/地区出现在8月和7月) .

  • 例如对于Cananda搜索,我的代码逻辑可以复制同一行但不在单元格F2(cos不同行)中的值?有什么想法可以分享怎么做?

enter image description here

以下是我的VBA代码

Sub Compare()
Dim Report As Worksheet, lastRow As Long, fVal As Range, c As Range, i As Long
Set Report = Sheets(1) 'Edit sheet name
lastRow = Report.Cells(Rows.Count, 1).End(xlUp).Row
    'For Each c In Report.Range("A2:A10") 'Assumes header row
    For i = 2 To lastRow
        'Set fVal = Report.Range("E2:E" & lastRow).Find(c.Value, LookIn:=xlValues, LookAt:=xlWhole)
        Set fVal = Report.Range("E2:E" & lastRow).Find(Report.Cells(i, 1).Value, LookIn:=xlValues, LookAt:=xlWhole)
            If Not fVal Is Nothing Then
                'c.Interior.ColorIndex = 6
                Report.Cells(i, 1).Interior.ColorIndex = 6
                Report.Cells(i, 8) = Report.Cells(i, 1)
                Report.Cells(i, 9) = Report.Cells(i, 2)
                Report.Cells(i, 10) = Report.Cells(i, 3)
            Else
                Report.Cells(i, 13) = Report.Cells(i, 1)
                Report.Cells(i, 14) = Report.Cells(i, 2)
            End If
    Next
End Sub

1 回答

  • 0

    我认为这样做你想要的 . 使用Resize也缩短了代码 . 您需要参考您找到的单元格(在这种情况下,我理解的是右侧的一个单元格) .

    Sub Compare()
    
    Dim Report As Worksheet, lastRow As Long, fVal As Range, c As Range, i As Long
    
    Set Report = Sheets(1) 'Edit sheet name
    lastRow = Report.Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To lastRow
            Set fVal = Report.Range("E2:E" & lastRow).Find(Report.Cells(i, 1).Value, LookIn:=xlValues, LookAt:=xlWhole)
            If Not fVal Is Nothing Then
                Report.Cells(i, 1).Interior.ColorIndex = 6
                Report.Cells(i, 8).Resize(, 3).Value = Report.Cells(i, 1).Resize(, 3).Value
                Report.Cells(i, 11).Value = fVal.Offset(, 1).Value
            Else
                Report.Cells(i, 13).Resize(, 2).Value = Report.Cells(i, 1).Resize(, 2).Value
            End If
        Next i
    
    End Sub
    

相关问题