У меня есть лист данных, который я пытаюсь «очистить» с помощью VBA.
Я просматриваю каждый столбец и заменяю данные, которые я видел ранее, известными сокращенными значениями. Однако, когда я сталкиваюсь с новым значением, для которого у меня нет сокращения, мне нужно приписать это известному сокращению. Затем мне нужно добавить эту известную ссылку к поисковым данным, поэтому, если я снова найду это значение, у меня будет сокращение, чтобы заменить его на
В приведенном ниже примере мой код зацикливается на Column A
и заменяет каждое значение поисковой аббревиатурой в Column C
. Известная ссылка в Column B
позволяет этому поиску работать.
Когда цикл достигает значения row 6
, он не может искать ошибки. На этом этапе я хочу открыть отдельный список сокращений в Column C
для выбора, а затем добавить эту ссылку внизу Column B
& C
, чтобы, когда цикл достиг строки 13, он знал эту ссылку и можно посмотреть без ошибок.
(Msg Box просто маркер, можно удалить)
(Извинения, если терминология неверна - новинка для VBA)
Column A Column B Column C
--------- --------- ---------
Dry clean Dry clean DCLN
Wipe clean Machine wash MWSH
Machine wash Wipe clean WPCL
40C Machine Wash 40C Machine Wash MWSH
Wipe clean 30C Machine Wash MWSH
Machinewash
Dry clean
Wipe clean
Machine Wash
Wipe clean
40C Machine Wash
30C Machine Wash
Machinewash
Мой код VBA приведен ниже;
Sub replace_wash()
Application.DisplayAlerts = False
Dim myLastReplaceRow As Long
Dim myLastDataRow As Long
Dim myRow As Long
Dim myFind As String
Dim myReplace As String
myLastReplaceRow = Cells(Rows.Count, "B").End(xlUp).Row
myLastDataRow = Cells(Rows.Count, "A").End(xlUp).Row
For myRow = 1 To myLastDataRow
myFind = Cells(myRow, "A")
myReplace = Application.IfError(ApplicationVlookup(myFind, Columns("B:C"), 2, False), "ERROR")
Application.DisplayAlerts = True
If myReplace = "ERROR" Then
MsgBox "invalid value"
Else
Cells(myRow, "A").Replace What:=myFind, Replacement:=myReplace, LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
Next myRow
Exit Sub
End Sub
Вывод, который я хочу получить:
Column A Column B Column C
--------- --------- ---------
DCLN Dry clean DCLN
WPCL Machine wash MWSH
MWSH Wipe clean WPCL
MWSH 40C Machine Wash MWSH
WPCL 30C Machine Wash MWSH
MWSH Machinewash MWSH
DCLN
WPCL
MWSH
WPCL
MWSH
MWSH
MWSH