VBA заменить несколько строк из отдельного списка

StackOverflow https://stackoverflow.com//questions/25074054

  •  26-12-2019
  •  | 
  •  

Вопрос

Мне нужно заменить строки, но до сих пор мне удалось заменить только слова. Код проходит через столбец Описание и должен заменить каждую последовательность из списка. Идея состоит в том, чтобы использовать сокращения ( новые значения ), а не полные слова ( старых значений ).

Каждый раз, когда есть соседние (без пространства) слово, символ и т. Д., код не удается. Что не так? Спасибо !!!

Sub ReplaceWords_BUT_Need_ToReplaceStrings()

    Application.ScreenUpdating = False

    'This macro works with separated words only. Eliminate hyphens etc before applying this macro.

    Dim r As Range, A As Range
    Dim s1 As Worksheet, s2 As Worksheet, LastRow As Integer, v As String, j As Integer,      
    oldv As String, newv As String

    LastRow = Cells(Rows.count, "A").End(xlUp).row

    Set s1 = Sheets("JE_data")
    Set s2 = Sheets("ListToReplace")
    Set A = s1.Range("J:J").Cells.SpecialCells(xlCellTypeConstants)
    For Each r In A
        v = r.Value

        For j = 2 To LastRow

            oldv = s2.Cells(j, 1).text
            newv = s2.Cells(j, 2).text
.

'Замените функцию, когда вы использовали, это чувствительно к регистру. «Вы уверены, что все ваши слова начнутся с заглавной буквы? «Если вместо этого не используйте функцию v= заменить (v, ardv, newv, 1 ,1, vbtextcompare). ОК.

        v = Replace(v, oldv, newv, 1, -1, vbTextCompare)    
        'v = Replace(v, oldv, newv)

        Next j
        r.Value = Trim(v)

    Next r

    Application.ScreenUpdating = True

End Sub
.

Пример:

ListToreplace

Left column (old)     Right column (new)
----------------------------------------
Invoice               inv 
Salary                sy 
Credit                cr 
.

JE_DATA

cr Note
cr note 
INV/2712/14RF/0229/14 
Invoice 1078 10 
TECHNOQ01SI 2014 03288
.

( Редактор Примечание: Я не знаю, правильно ли примеру, так как он был написан в комментариях)

Credit был заменен cr, и ожидается, что Invoice будет заменен генеракодицетагкодом, но он не был

Это было полезно?

Решение

Заменить функцию, как вы использовали, это чувствительно к регистру.Вы уверены, что все ваши слова начнутся с заглавной буквы?Если нет, то используйте

v = Replace(v, oldv, newv, 1, -1, vbTextCompare)
. Вместо этого функция

.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top