2015-04-12 109 views
1

我对这个论坛和Excel VBA很新。我有一段时间通过玩VBA学到了一些东西。但现在我陷入了这个小问题,我相信Excel Guru在这里可以帮助我。任何帮助,将非常感激。下面是我的问题多个条件查找并替换

摘要:

我在列A:F 我想找到和C列具有取决于价值C柱和柱A十六进制值替换其值的电子表格。

例子:

如果列A = 1和列C = General然后用0x0001

但如果更换GeneralA = 2和列C = General然后用0x0002

我的代码替换General

Columns("C").Replace What:=" General", Replacement:=" 0x0001", LookAt:=xlWhole, _SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ReplaceFormat:=False

问题:

我目前拥有的代码只着眼于C列中的值,从而改变每次General0x0001

回答

1

如果你开始:

enter image description here

运行此宏:

Sub Changes() 
    Dim N As Long, i As Long 
    N = Cells(Rows.Count, 1).End(xlUp).Row 
    For i = 1 To N 
     v1 = Cells(i, 1).Value 
     v3 = Cells(i, 3).Value 
     If v1 = 1 And v3 = "General" Then Cells(i, 3).Value = "0x0001" 
     If v1 = 2 And v3 = "General" Then Cells(i, 3).Value = "0x0002" 
    Next i 
End Sub 

会产生:

enter image description here

1

除了@ garys-学生回答,我想说的是“案例”方法,更容易为大决策树,如:

Sub Changes() 
    Dim N As Long, i As Long 
    N = Cells(Rows.Count, 1).End(xlUp).Row 
    For i = 1 To N 
     v1 = Cells(i, 1).Value 
     v3 = Cells(i, 3).Value 
     Select Case v1 
      Case 1 
       Select Case v3 
        Case "General" 
         Cells(i, 3).Value = "0x0001" 
        Case Else 
       End Select 
      Case 2 
       Select Case v3 
        Case "General" 
         Cells(i, 3).Value = "0x0002" 
        Case Else 
       End Select 
      Case Else 
     End Select 
    Next i 
End Sub 

“选择案例V1”去代替“如果V1 =”,然后在“案例1”完成它“如果V1 = 1" 。

1

我会使用If和Case的组合,V3测试只有一个可能的触发器,不需要大小写。

Sub Changes() 
    Dim N As Long, i As Long 
    N = Cells(Rows.Count, 1).End(xlUp).Row 
    For i = 1 To N 
     v1 = Cells(i, 1).Value 
     v3 = Cells(i, 3).Value 
     If v3 = "General" Then 
      Select Case v1 
       Case 1 
        Cells(i, 3).Value = "0x0001" 
       Case 2 
        Cells(i, 3).Value = "0x0002" 
       Case Else 
      End Select 
     End If 
    Next i 
End Sub