1
Sub xLator2()
Dim s1 As Worksheet, s2 As Worksheet
Dim N As Long, i As Long
Dim from(), too()
Set s1 = Sheets("Sheet1") '   contains the data
Set s2 = Sheets("Sheet2") '   contains the translation table

s2.Activate

N = Cells(Rows.Count, 1).End(xlUp).Row
ReDim from(1 To N)
ReDim too(1 To N)
For i = 1 To N
    from(i) = Cells(i, 1).Value
    too(i) = Cells(i, 2).Value
Next i

s1.Activate

For i = LBound(from) To UBound(from)
    Cells.Replace What:=from(i), Replacement:=too(i)
Next i
End Sub

Я использую приведенный выше код, чтобы найти и заменить несколько слов (в "Столбце A Sheet1" словами в "Столбце B Sheet 2") в указанном ниже листе:

https://docs.google.com/spreadsheets/d/15TRLccDr_EAR8s78u-WGSkGpAecBf42_lhRkjCev_WE/edit?usp=sharing

Однако, когда я применяю это на другом листе (как упомянуто ниже) для других данных, тогда код не выполняется, т.е. я получаю искаженные слова в sheet1:

https://docs.google.com/spreadsheets/d/14ba9pQDjMPWJd4YFpGffhtVcHxml0LdUUVQ0prrOEUY/edit?usp=sharing

Пожалуйста, помогите мне, чтобы я мог заменить слова в "Столбце A Sheet1" словами в "Столбце B Sheet2"

Примечание. Выше приведены ссылки на таблицы Google, однако у меня возникли проблемы с таблицей Excel 2007.

Я прошу вас помочь мне, предоставив весь пересмотренный код, так как я не очень хорош в VBA

1 ответ1

0

Я предполагаю, что вы хотите сделать замену только один раз и прекратить дальнейшие правила после замены. Взяв в качестве примера второй лист, строку 12 "но" следует перевести на "однако" и прекратить дальнейшие правила, чтобы "однако" не переводилось на "хойвеовер" (как правило № 17 переводит "мы" в "вы")).

Обходной путь - сначала перевести все на некоторый промежуточный символ, а во втором раунде перевести с промежуточных символов на желаемую замену. Слегка изменив ваш код, как показано ниже:

Sub xLator2()
Dim s1 As Worksheet, s2 As Worksheet
Dim N As Long, i As Long
Dim from(), too()
Set s1 = Sheets("Sheet1") '   contains the data
Set s2 = Sheets("Sheet2") '   contains the translation table

s2.Activate

N = Cells(Rows.Count, 1).End(xlUp).Row
ReDim from(1 To N)
ReDim too(1 To N)
For i = 1 To N
    from(i) = Cells(i, 1).Value
    too(i) = Cells(i, 2).Value
Next i

s1.Activate

' -------------- Modification starts here --------------------------
' Replace from from(i) to __MYREPLACEMENTi__  (where i is the counter)
For i = LBound(from) To UBound(from)
    Cells.Replace What:=from(i), Replacement:="__MYREPLACEMENT" + Str(i) + "__"
Next i
' Replace from __MYREPLACEMENTi__ to too(i)  (where i is the counter)
For i = LBound(from) To UBound(from)
    Cells.Replace What:="__MYREPLACEMENT" + Str(i) + "__", Replacement:=too(i)
Next i
' -------------- Modification ends here --------------------------
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .