2016-02-01 3 views
1

У меня есть несколько текстовых элементов, которые необходимо изменить. Данные, которые необходимо изменить, будут отображаться только в столбце B таблицы. Код работает, но в длинном списке последнее вхождение действительного изменения не происходит. Напр. «Роджер» не обновляется, когда он является последней заполненной ячейкой и нуждается в изменении. На самом деле у меня около 12 утверждений IF Then.Код, не переходящий на последнюю ячейку, которая нуждается в обновлении

Я пробовал вставить петлю и получил ошибку.

Sub Names2() 
Dim aRow As Integer 

For aRow = 1 To WorksheetFunction.CountA(Columns(2)) 

    If Cells(aRow, 2) = "Jay" Then 
     Cells(aRow, 2) = "Jason" 
    End If 

    If Cells(aRow, 2) = "Steve" Then 
     Cells(aRow, 2) = "Steven" 
    End If 

    If Cells(aRow, 2) = "Rog" Then 
     Cells(aRow, 2) = "Roger" 
    End If 

    Next aRow 

End Sub 
+1

Вы никогда не заявляете, что такое aRow. Вы также можете легко решить эту проблему с помощью индекса/матча, а также –

+0

Спасибо, Дуг. Я пропустил это, по ошибке, когда я вставил выше. Я обновил код. – Rblossom

ответ

0

Также Вы можете сделать это без Looping (быстрее):

Sub test() 

With Columns("B") 
    .Replace "Jay", "Jason", xlWhole 
    .Replace "Steve", "Steven", xlWhole 
    .Replace "Rog", "Roger", xlWhole 
End With 

End Sub 

Select Case Чтобы использовать (для столбца "A"):

Select Case Cells(aRow, 1).Value 
    Case "Jay" 
    Cells(aRow, 1).Value = "Jason" 
    Case "Steve" 
    Cells(aRow, 1).Value = "Steven" 
    Case "Rog" 
    Cells(aRow, 1).Value = "Roger" 
End Select 
+0

Спасибо, Фади. Я собираюсь попробовать это сейчас. Это гораздо более прямолинейно. – Rblossom

+0

@Rblossom, добро пожаловать. и если вы хотите использовать свой код, попробуйте использовать 'Select Case', он будет быстрее, чем 3' If ... Then statement'. – Fadi

+0

Отлично работает. Спасибо. – Rblossom

1

Попробуйте это.

Sub Names2() 
Dim aRow As Long, FRowB As Long 
Dim wk As Worksheet 
Dim m As Long 

Set wk=Sheet1   'Replace this with your Worksheet Number 

m=wk.Rows.Count 

FRowB = wk.Range("B" & m).End(xlUp).Row 

For aRow = 1 To FRowB 

    If Cells(aRow, 2) = "Jay" Then Cells(aRow, 2) = "Jason" 

    If Cells(aRow, 2) = "Steve" Then Cells(aRow, 2) = "Steven" 

    If Cells(aRow, 2) = "Rog" Then Cells(aRow, 2) = "Roger" 


Next aRow 

End Sub 
+0

Спасибо, Рохан К. Это отлично работает. Один вопрос, если мне нужно повторить его для использования в другом столбце, например, в A, что все должно измениться? – Rblossom

+0

дим Arow As Long, FRowB As Long дим Как недельными рабочий лист Тусклых м As Long Set = Лист1 недель м = wk.Rows.Count FRowB = wk.Range ("А" и м) .END (xlUp) .Row – Rblossom

+0

Измените это 'FRowB = wk.Range (" B "& m) .End (xlUp) .Row' на' FRowB = wk.Range ("A" & m) .End (xlUp) .Row 'и this' If Cells (aRow, 2) = «Jay» Затем ячейки (aRow, 2) = «Jason» 'to' If Cells (aRow, 1) = «Jay» Затем ячейки (aRow, 1) = «Jason "' – newguy

1

Thevalue из Arow 1 всего кода, вам необходимо увеличить его, чтобы переместить его на следующую строку, чтобы сделать его проще для вас, чтобы понять, что я не пишу новый код для выполнения этой задачи, но модифицируя код

Sub Names2() 

For aRow = 1 To WorksheetFunction.CountA(Columns(2)) 

If Cells(aRow, 2) = "Jay" Then 
    Cells(aRow, 2) = "Jason" 
aRow = aRow+1 
End If 

If Cells(aRow, 2) = "Steve" Then 
    Cells(aRow, 2) = "Steven" 
aRow = aRow+1 
End If 

If Cells(aRow, 2) = "Rog" Then 
    Cells(aRow, 2) = "Roger" 
aRow = aRow+1 
End If 

Next aRow 

End Sub 
+0

Благодарим вас за это. – Rblossom

+0

Синтаксис - это ячейки (строка, столбец) .... Чтобы переместить его в любой другой столбец, вам просто нужно изменить номер столбца 'Ячейки (aRow, 1)' для A .... 'Ячейки (aRow, 3)' для C ... 'Ячейки (aRow, 4)' для D ... и т. д. Спасибо –

+0

Этот код на самом деле не работает для меня, но я благодарю вас за ввод. – Rblossom

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