Найти значение ячейки в другом (целом) листе, если оно совпадает с копией столбца B - PullRequest
1 голос
/ 11 октября 2019

у меня 2 листа. Sheet1 содержит экспортированные электронные письма с номерами между текстами. Sheet2 содержит числа, которые я ищу в Sheet1. Я пытаюсь найти значения столбца A из Sheet2 во всем Sheet1. Если он совпадает где-то в строке, я хотел бы скопировать значение столбца B в Sheet2 "B". У меня есть код ниже, найдите значения Sheet2 Column A в Sheet1 и выделите его, а также найдите значение из столбца B, но оно работает только в том случае, если рядом с ним находится нужное мне значение. Мне нужна ваша помощь, чтобы изменить код, чтобы всегда копировать значения (даты) из столбца B.

Лист1 с электронными письмами ,

Лист2 с номерами, которыеЯ ищу

Ожидаемый: Ожидаемый результат

Большое спасибо за вашу помощь заранее.

Sub find()
Dim lastRow As Integer
Dim rng As Range

lastRow = Sheets("Sheet2").Range("A65000").End(xlUp).Row   

For i = 1 To lastRow
Set rng = Sheets("Sheet1").Range("A:L").find(Sheets("Sheet2").Cells(i, 1))

If Not rng Is Nothing Then Sheets("Sheet2").Cells(i,1).Cells.Interior.Color = vbGreen
Sheets("Sheet1").Range(rng(, 2), rng(, 2)).Copy Destination:=Sheets("Sheet2").Range("B" & i)        
End If 
Next 
End Sub

1 Ответ

0 голосов
/ 11 октября 2019

Вот точный исправленный код, который вы ищете, а затем немного улучшенный общий подход, который может дать вам некоторые идеи. Учитывая, что вы не знакомы со свойством Row, вы проделали отличную работу для того, кто не знаком с VBA. Так держать ... отличный первый пост.

Sub find()
Dim lastRow As Integer
Dim rng As Range

lastRow = Sheets("Sheet2").Range("A65000").End(xlUp).Row

For i = 1 To lastRow
Set rng = Sheets("Sheet1").Range("A:L").find(Sheets("Sheet2").Cells(i, 1))

If Not rng Is Nothing Then
    Sheets("Sheet2").Cells(i, 1).Cells.Interior.Color = vbGreen
    Sheets("Sheet2").Cells(i, 2).Value = Sheets("Sheet1").Cells(rng.Row, 2).Value

End If
Next
End Sub

Несколько идей для рассмотрения:

Sub alternateWays()
Dim lastRow As Integer, i As Long, aCell As Range
Dim rng As Range, ws1 As Worksheet, ws2 As Worksheet

Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("sheet2")
Set aCell = ws2.Range("A1")

Do While Not IsEmpty(aCell)
    Set rng = ws1.Range("A:L").find(aCell.Value)

    If Not rng Is Nothing Then
        aCell.Cells.Interior.Color = vbGreen
        aCell.Offset(, 1).Value = ws1.Cells(rng.Row, 2).Value
    End If


    Set aCell = aCell.Offset(1, 0) 'don't forget this....
Loop

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...