Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-对照表2检查表1中的值,然后复制注释(如果匹配)_Vba_Excel - Fatal编程技术网

Excel VBA-对照表2检查表1中的值,然后复制注释(如果匹配)

Excel VBA-对照表2检查表1中的值,然后复制注释(如果匹配),vba,excel,Vba,Excel,我有两张床单。我想将一列中的值与第二页中同一列中的值进行比较。如果它们匹配,那么我想将字符串数据从Notes列迁移到新工作表。从本质上说,我是在看上周的票号在本周是否仍然有效,并把上周的记录带过去 我尝试使用以下代码来实现这一点,使用Z列作为数据,BE作为注释: Sub Main() Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") Dim part

我有两张床单。我想将一列中的值与第二页中同一列中的值进行比较。如果它们匹配,那么我想将字符串数据从Notes列迁移到新工作表。从本质上说,我是在看上周的票号在本周是否仍然有效,并把上周的记录带过去

我尝试使用以下代码来实现这一点,使用Z列作为数据,BE作为注释:

Sub Main()

Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")

Dim partNo2 As Range
Dim partNo1 As Range
Dim partNo3 As Range


For Each partNo2 In ws1.Range("Z1:Z" & ws1.Range("Z" & Rows.Count).End(xlUp).Row)
    For Each partNo1 In ws2.Range("Z1:Z" & ws2.Range("Z" & Rows.Count).End(xlUp).Row)
     For Each partNo3 In ws1.Range("BE1:BE" & ws2.Range("BE" & Rows.Count).End(xlUp).Row)
        If StrComp(Trim(partNo2), Trim(partNo1), vbTextCompare) = 0 Then
            ws2.Range("BE" & partNo1.Row) = partNo3
        End If
        Next
    Next
Next

'now if no match was found then put NO MATCH in cell
For Each partNo1 In ws2.Range("E1:F" & ws2.Range("A" & Rows.Count).End(xlUp).Row)
    If IsEmpty(partNo1) Then partNo1 = ""
Next

End Sub
未经测试:

Sub Main()

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim rng1 As Range, rng2 As Range
    Dim c As Range, f As Range

    Set ws1 = Sheets("Sheet1")
    Set ws2 = Sheets("Sheet2")

    Set rng1 = ws1.Range("Z1:Z" & ws1.Range("Z" & Rows.Count).End(xlUp).Row)
    Set rng2 = ws2.Range("Z1:Z" & ws2.Range("Z" & Rows.Count).End(xlUp).Row)

    For Each c In rng1.Cells
        Set f = rng2.Find(c.Value, , xlValues, xlWhole)
        If Not f Is Nothing Then
            f.EntireRow.Cells(, "BE").Value = c.EntireRow.Cells(, "BE").Value
        End If
    Next c

    'now if no match was found then put NO MATCH in cell
    For Each c In ws2.Range("E1:F" & ws2.Range("A" & Rows.Count).End(xlUp).Row)
        If Len(c.Value) = 0 Then c.Value = "NO MATCH"
    Next

End Sub

这可能实现了相同的结果,但底部的E&F列不匹配。这只是一种不同的方式。我不使用范围,而是直接查看每个单元格并进行比较

测试:


E列和F列是怎么回事?
Sub NoteMatch()

Dim lastRow1 As Long
Dim lastRow2 As Long
Dim tempVal As String

    lastRow1 = Sheets("Sheet1").Range("Z" & Rows.Count).End(xlUp).row
    lastRow2 = Sheets("Sheet2").Range("Z" & Rows.Count).End(xlUp).row

    For sRow = 2 To lastRow1
        tempVal = Sheets("Sheet1").Cells(sRow, "Z").Text

        For tRow = 2 To lastRow2
            If Sheets("Sheet2").Cells(tRow, "Z") = tempVal Then
                Sheets("Sheet2").Cells(tRow, "BE") = Sheets("Sheet1").Cells(sRow, "BE")
            End If
        Next tRow
    Next sRow

Dim match As Boolean
'now if no match was found, then put NO MATCH in cell
    For lRow = 2 To lastRow2
        match = False
        tempVal = Sheets("Sheet2").Cells(lRow, "Z").Text

        For sRow = 2 To lastRow1
            If Sheets("Sheet1").Cells(sRow, "Z") = tempVal Then
                match = True
            End If
        Next sRow

        If match = False Then
            Sheets("Sheet2").Cells(lRow, "BE") = "NO MATCH"
        End If
    Next lRow
End Sub