【问题标题】:Evaluate two columns for matching data评估匹配数据的两列
【发布时间】:2015-09-22 13:51:00
【问题描述】:

我想比较两列并判断它们是否相等。

第一列有 100 个数据,第二列有 80 个数据。在 100 个中,有 80 个数据与第二列匹配。

如果第二列数据与第一列不匹配,则在第二列插入空白单元格/0。然后取相同的第二列数据并与第一列下一个数据进行检查。

例如:

C1    C2    
1    1    
2    2    
3    4    
4    5    
5    

在上面的例子中,第一两行匹配。然后在比较第三行 C1 和 C2 时,没有匹配。因此,在第 3 行 C2 插入空白单元格或 0,并将第 3 行 C2 值 4 移动到下一行 C2。然后比较第 4 行 c1 和 c2。

最终结果

c1    c2    
1    1    
2    2    
3    0    
4    4    
5    5    

【问题讨论】:

标签: vba excel


【解决方案1】:

你可以试试这个:

Public Sub MatchValues(rInputRange As Range)

    Dim rCell As Range

    'Initial checks
    If rInputRange.Columns.Count <> 2 Then
        MsgBox "Supply two columns as the input range"
        Exit Sub
    End If

    For Each rCell In rInputRange.Columns(1).Cells
        If rCell.Offset(0, 1) > rCell Then
            rCell.Offset(0, 1).Insert xlDown
            rCell.Offset(0, 1) = 0
        End If
    Next rCell

End Sub

您可以提供范围或当前选择:

MatchValues range("A1:D2")

匹配范围选择

【讨论】:

  • 不客气。您使用了哪个答案,您能否标记该答案以便将其关闭?谢谢。
【解决方案2】:

在您的 VBA IDE 中,转到工具下拉菜单并选择参考。选择“Microstoft ActiveX 数据对象 2.8 库。

Private Sub CommandButton1_Click()
    Dim rs As New ADODB.Recordset
    Dim ws As Excel.Worksheet
    Dim lrow As Long

        Set ws = Application.ActiveSheet

        'Add fields to your recordset for storing data.
        With rs
            .Fields.Append "Row", adInteger
            .Fields.Append "ColumnB", adInteger
            .Open
        End With

        lrow = 1

        'Loop through and record what column B
        Do While lrow <= ws.UsedRange.Rows.count

            If ws.Range("B" & lrow).Value <> "" Then
                rs.AddNew
                rs.Fields("Row").Value = lrow
                rs.Fields("ColumnB").Value = ws.Range("B" & lrow).Value
                rs.Update
            End If

            lrow = lrow + 1
        Loop

        'Now go through and rewrite column B if A was found in B
        lrow = 1
        Do While lrow <= ws.UsedRange.Rows.count

            If ws.Range("A" & lrow).Value <> "" Then
                rs.Filter = ""
                rs.Filter = "ColumnB='" & ws.Range("A" & lrow).Value & "'"
                'If we have a match, write C and D
                If rs.RecordCount > 0 Then
                    ws.Range("B" & lrow).Value = rs.Fields("ColumnB").Value
                Else
                    ws.Range("B" & lrow).Value = 0
                End If
            End If

            lrow = lrow + 1
        Loop
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多