多个条件查找和替换

时间:2015-04-12 18:18:49

标签: excel-vba vba excel

我是这个论坛和Excel VBA的新手。我已经通过与VBA玩了一段时间了解了一点。但现在我陷入了这个小问题,我相信Excel Guru在这里可以帮助我。任何有关这方面的帮助将非常感激。以下是我的问题

要点:

我的电子表格中包含值A:F的值 我想在列C中使用十六进制查找和替换值,具体取决于列C和列A中的值。

示例:

如果列A = 1和列C = General然后将General替换为0x0001

但是,如果列A = 2和列C = General然后将General替换为0x0002

我的代码:

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

问题:

我目前的代码只查看了列C中的值,因此每个General都会更改为0x0001

3 个答案:

答案 0 :(得分:2)

如果您从:

开头

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 :(得分:1)

除了@ garys-student的答案之外,我还想说" Case"方法使更大的决策树更容易,例如:

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"。

答案 2 :(得分: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