Найти все совпадения в диапазоне столбцов и скопировать все значения в пределах диапазона - PullRequest
0 голосов
/ 28 мая 2019

Первый пользователь здесь.Я также новичок, пытающийся написать программу на VBA для Excel 2010, и вот что мне нужно сделать.

У меня есть книга, содержащая два листа, Sheet1, называемая «Процесс» (есть столбец A с заголовком «Item ") и Sheet2 с именем" Master "(столбец A с заголовком" Item "и столбец B с заголовком" Operation ")

Мне нужно сравнить эти два столбца A, если есть какие-либо данные, соответствующиеВы хотите скопировать ВСЕ данные из столбца B «Операция» из листа «Master» и поместить их в столбец B в листе «Process».

Код от Мохита Бансала работает отлично, но после того, как я пытаюсь привести код в реальное состояние рабочего листа, я сталкиваюсь с новой проблемой: если в столбце «Элемент» есть те же данные, этокопировать только для первых данных.

Любая помощь в выяснении того, как обойти это, будет принята с благодарностью.

При этом я редактирую на основе реального состояния рабочего листа.

Лист1 "Процесс"

-------------------------
|Column A   |Column B   |
|"Item"     |"Operation"|
-------------------------
|20YStandard|           |
|20Y        |           |
|20Y        |           |
|20Y        |           |
|20YF0Blank |           |
|20YF0      |           |
|20YF0      |           |
|20YFGAfter |           |
|20YFG      |           |
|20YFG      |           |
|20YStandard|           |
|20Y        |           |
|20Y        |           |
|20Y        |           |
|20YF0Blank |           |
|20YF0      |           |
|20YF0      |           |
|20YFGAfter |           |
|20YFG      |           |
|20YFG      |           |

Лист2 "Мастер"

-------------------------
|Column A   |Column B   |
|"Item"     |"Operation"|
-------------------------
|20Y        |MLM1       |
|20Y        |IQTM1      |
|20Y        |HBM1       |
|20YF0      |QT1        |
|20YF0      |SB1        |
|20YFG      |FG7        |
|20YFG      |SCR1       |
|21YF0      |QT2        |
|21YF0      |SB2        |
|21YF0      |MG2        |
|21YFG      |FG8        |
|21YFG      |SCR2       |

Фактический результат =

Лист1 "Процесс"

-------------------------
|Column A   |Column B   |
|"Item"     |"Operation"|
-------------------------
|20YStandard|           |
|20Y        |MLM1       |
|20Y        |IQTM1      |
|20Y        |HBM1       |
|20YF0Blank |           |
|20YF0      |QT1        |
|20YF0      |SB1        |
|20YFGAfter |           |
|20YFG      |FG7        |
|20YFG      |SCR1       |
|20YStandard|           |
|20Y        |Not copied |
|20Y        |Not copied |
|20Y        |Not copied |
|20YF0Blank |           |
|20YF0      |Not copied |
|20YF0      |Not copied |
|20YFGAfter |           |
|20YFG      |Not copied |
|20YFG      |Not copied |

Sub Button2_Click()

pr = Worksheets("Process").Range("A2:B1000").Value

ma = Worksheets("Master").Range("A2:B8008").Value

Range("B:B").ClearContents

For i = LBound(pr, 1) To UBound(pr, 1)

    For j = LBound(ma, 1) To UBound(ma, 1)

        If ma(j, 1) = pr(i, 1) Then

            Worksheets("Process").Range("B" & i + 1).Value = ma(j, 2)
            ma(j, 1) = "---"

            Exit For

        End If
Next j
Next i
End Sub

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

Лист1 «Процесс»

-------------------------
|Column A   |Column B   |
|"Item"     |"Operation"|
-------------------------
|20YStandard|           |
|20Y        |MLM1       |
|20Y        |IQTM1      |
|20Y        |HBM1       |
|20YF0Blank |           |
|20YF0      |QT1        |
|20YF0      |SB1        |
|20YFGAfter |           |
|20YFG      |FG7        |
|20YFG      |SCR1       |
|20YStandard|           |
|20Y        |MLM1       |
|20Y        |IQTM1      |
|20Y        |HBM1       |
|20YF0Blank |           |
|20YF0      |QT1        |
|20YF0      |SB1        |
|20YFGAfter |           |
|20YFG      |FG7        |
|20YFG      |SCR1       |

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Это работает отлично:

pr = Worksheets("Process").Range("A2:B11").Value
ma = Worksheets("Master").Range("A2:B13").Value


For i = LBound(pr, 1) To UBound(pr, 1)

    For j = LBound(ma, 1) To UBound(ma, 1)

        If ma(j, 1) = pr(i, 1) Then

            Worksheets("Process").Range("B" & i + 1).Value = ma(j, 2)
            ma(j, 1) = "---"
            Exit For

        End If
Next j
Next i

Output

Новый ответ

Только если 10 строк повторяются вЛист процесса

Sub Button2_Click ()

pr = Worksheets("Process").Range("A2:B21").Value

ma = Worksheets("Master").Range("A2:B13").Value

Worksheets("Process").Range("B:B").ClearContents

For i = LBound(pr, 1) To UBound(pr, 1)

    If i = 11 Then ma = Worksheets("Master").Range("A2:B13").Value

    For j = LBound(ma, 1) To UBound(ma, 1)

        If ma(j, 1) = pr(i, 1) Then

            Worksheets("Process").Range("B" & i + 1).Value = ma(j, 2)
            ma(j, 1) = "---"

            Exit For

        End If
Next j
Next i
End Sub
0 голосов
/ 28 мая 2019

Вы можете использовать Find FindNext

Sub Button2_Click()
    Dim firstAddress As String
    Dim finalrow As Long, i As Long
    Dim shtCS As Worksheet, shtFD As Worksheet, rw As Range
    Dim c

    Set shtCS = Worksheets("Process")
    Set shtFD = Worksheets("Master")

    finalrow = shtFD.Range("A" & Rows.Count).End(xlUp).Row

    With shtFD.Columns(1)
        For i = 2 To finalrow
            Set c = .Find(shtCS.Cells(i, 1).Value2)

            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    shtCS.Cells(i, 2).Value2 = c.Offset(0, 1).Value2
                    i = i + 1
                    Set c = .FindNext(c)
                Loop Until c.Address = firstAddress
            End If
        Next i
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...