Макрос Excel для замены содержимого ячеек из поиска по 2 столбцам

На листе Sheet1 мне нужно пройти через столбец A и найти любое значение Sheet2 col. A и замените строку, найденную на Sheet2 col. Значение B.

Например, если у меня есть "переходить на http://google.com каждый день" где-нибудь в Sheet1.A и "google" в Sheet2.A234 мне нужно заменить исходную строку на значение Sheet2.B234 ("stackoverflow"), чтобы получить "перейти на http://stackoverflow.com каждый день "в исходную ячейку или в новый столбец. Без изменений, если ничего не найдено.

Я мало что знаю о vba, я лишь немного изменил код, который можно найти здесь и там. Я знаю, как составить формулу для этого, но в этом случае я могу заставить работать любой цикл / диапазон.

Любая помощь приветствуется :)

Фред

YowE3K отлично работает, менее элегантно, но тоже работает:

Sub remplace()

Dim myInput As String, myTest As String, myReplacement As String

For i = 1 To 8 'for 10 rows of data in Sheet2
    For j = 1 To 4 'for 5 rows of data in Sheet1

        myInput = Sheets("Sheet3").Cells(j, 1).Value
        myTest = Sheets("Sheet4").Cells(i, 1).Value
        myReplacement = Sheets("Sheet4").Cells(i, 2).Value

        resultText = Replace(myInput, myTest, myReplacement)

        Sheets("Sheet3").Cells(j, 1).Value = resultText

    Next j
Next i

End Sub

person Fred A.    schedule 30.08.2016    source источник
comment
Вы можете подумать о том, чтобы показать свою формулу, возможно, это поможет другим понять, что вы делаете, и облегчить им помощь вам :)   -  person David Zemens    schedule 30.08.2016


Ответы (2)


Следующий код должен делать то, что вы хотите, но может быть не очень эффективным, если у вас есть большое количество строк в Sheet1 или Sheet2. («большой», вероятно, означает> 1000)

Sub ReplaceValues
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim rows1 As Long
    Dim rows2 As Long

    Dim row1 As Long
    Dim row2 As Long

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

    rows1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row
    rows2 = ws2.Range("A" & ws2.Rows.Count).End(xlUp).Row

    For row1 = 1 To rows1
        For row2 = 1 To rows2
            ws1.Cells(row1, 1).Value = Replace(ws1.Cells(row1, 1).Value, _
                                               ws2.Cells(row2, 1).Value, _
                                               ws2.Cells(row2, 2).Value)
        Next
    Next
End Sub
person YowE3K    schedule 30.08.2016

приведенный ниже код выполнит эту работу

Sub foo()

For i = 1 To 10 'for 10 rows of data in Sheet2
    For j = 1 To 5 'for 5 rows of data in Sheet1
        If Sheets("Sheet2").Cells(i, 1).Value = Sheets("Sheet1").Cells(j, 1).Value Then
            Sheets("Sheet1").Cells(j, 1).Value = Sheets("Sheet2").Cells(i, 2).Value
        End If
    Next j
Next i

End Sub
person Arun Thomas    schedule 30.08.2016
comment
Привет, Томас, спасибо за вашу помощь, я только что адаптировал ваш код для выполнения замены, потому что мои значения не равны и нуждаются в частичной замене. Результат выше;) - person Fred A.; 31.08.2016
comment
Рад узнать, что вы нашли решение - person Arun Thomas; 31.08.2016