2016-02-01 19 views
1

我有几个需要更改的文本项目。需要更改的数据只会出现在电子表格的B列中。代码的工作原理很长,但最后一次有效更改不会发生。例如。当它是最后一个填充的单元格并且需要更改时,“Roger”不会更新。实际上,我有大约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

谢谢,Doug。当我粘贴在上面时,我错误地忽略了这一点。我已经更新了代码。 – Rblossom

回答

0

,你也可以做到这一点没有循环(快):

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

谢谢Fadi。我现在要试试这个。这非常直截了当。 – 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

谢谢你,罗汉K.这很好。一个问题,如果我必须复制这个在另一列中使用,比如在A中,所有这些都应该改变? – Rblossom

+0

昏暗AROW只要,FRowB只要 昏暗周作为工作表 昏暗米只要 集WK = Sheet 1中 米= wk.Rows.Count FRowB = wk.Range( “A” &M).END (xlUp).Row – Rblossom

+0

将这个'FRowB = wk.Range(“B”&m).End(xlUp).Row'改为'FRowB = wk.Range(“A”&m).End(xlUp).Row (aRow,2)=“Jay”Then Cells(aRow,2)=“Jason”'如果单元格(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 ...'Cells(aRow,4)'for D ...等等......感谢 –

+0

这段代码实际上并不适用于我,但我感谢您的输入。 – Rblossom

相关问题