При обнаружении ошибок команд можно добавить данные в список поиска, чтобы предотвратить будущие ошибки - PullRequest
1 голос
/ 29 апреля 2019

У меня есть лист данных, который я пытаюсь «очистить» с помощью 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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...