2015-11-18 7 views
0

Я написал макрос, чтобы проверить выбор для значения, и если он соответствует этому значению, заменить его чем-то другим. Хорошо, это довольно просто, когда это всего лишь одно значение. Когда я пытаюсь добавить несколько значений, я постоянно сталкиваюсь с различными ошибками. надеюсь, один из вас может указать, где я пропущу точку :)VBA Macro Проверка диапазона для нескольких критериев

Sub PTranslate() 
Dim cell As Range 
On Error Resume Next 
For Each cell In Selection 
If cell = "DZC" Or "0654548" Then 
cell.Value = "Douglas C" 
     ElseIf cell = "RLP" Or "0623344" Then 
cell.Value = "Ryan P" 
End If 
Next 


End Sub 
+0

Ее стоит отметить, что я начал с одной записи, но планирую сделать это 2-300 долгий. –

ответ

1

Короткий ответ таков. Правильный синтаксис - ссылаться на объект каждый раз, когда в нескольких условиях If операторов.

Dim cell As Range, sVal as String 

For Each cell In Selection 

    sVal = Cstr(cell.Value2) 

    If sVal = "DZC" Or sVal = "654548" Then 'sVal = "0654548" Then 
     cell.Value = "Douglas C" 
    ElseIf sVal = "RLP" Or sVal = "623344" Then 'sVal = "0623344" Then 
     cell.Value = "Ryan P" 
    End If 

Next 

Если вы собираетесь иметь много значений подстановки может служить вам лучше, чтобы сделать список в вашей книге и заменить значение ячеек с соответствующим значением в списке поиска. Вы также можете использовать Select Case, но это может быть даже уродливым с ~ 300 вариантами.

Если предположить, что построить свой список в mySheet в диапазоне A1: B300, код для этого будет:

Dim cell As Range 

For Each cell In Selection 

    If Not IsErr(Application.WorksheetFunction.VLookup(cell.Value2, Sheets("mySheets").Range("A1:B300"), 2, 0)) Then 

     cell.Value = Application.WorksheetFunction.VLookup(cell.Value2, Sheets("mySheets").Range("A1:B300"), 2, 0) 

    End If 

Next 
+0

Ушел в ту же проблему, что и у меня, я бы выбрал только первый выбор. На этот раз он даже не потрудился с частью OR первых критериев IF –

+1

см. Мой отредактированный код. У меня была мысль, которая может помочь. Я также вижу ваши образцы данных. Вы уверены, что ведущий ноль всегда будет там (потому что он не находится в ваших данных образца). Если это не так, избавьтесь от начального нуля в инструкции vba If. –

+0

Отправленный снимок экрана результата. Жалко с ним еще немного, когда я прихожу домой :) –

2

Используйте 'Select Case' для длинного списка:

For Each cell In Selection 
    Select Case cell.Value 
     Case "DZC", "0654548" 
      cell.Value = "Douglas C" 
     Case "RLP", "0623344" 
      cell.Value = "Ryan P" 
     ... 
     Case Else 
      ... 
    End Select 
Next cell 
+0

попробовал это, и он не работал. Как бы то ни было, я вернусь к нему немного. Ошибка пользователя - вещь :) –

Смежные вопросы