如何在Excel VBA中循环范围编号而不更改字母

时间:2017-12-04 14:33:48

标签: excel vba excel-vba

我如何让它工作? 我到目前为止编写了这段代码:

Sub RemoveLoop()

Dim i As Long

For i = 6 To 15
If Range("B" + i) = "YES" Then
    Range("C" + i + ":" + "P" + i).ClearContents
End If

Next i
End Sub

而不是像这样单独做每个: 以下是我试图缩短/完成的内容:

Sub Remove()

If Range("B6") = "YES" Then
    Range("C6:P6").ClearContents
End If
If Range("B7") = "YES" Then
    Range("C7:P7").ClearContents
End If
If Range("B8") = "YES" Then
    Range("C8:P8").ClearContents
End If
If Range("B9") = "YES" Then
    Range("C9:P9").ClearContents
End If
If Range("B10") = "YES" Then
    Range("C10:P10").ClearContents
End If
If Range("B11") = "YES" Then
    Range("C11:P11").ClearContents
End If
If Range("B12") = "YES" Then
    Range("C12:P12").ClearContents
End If
If Range("B13") = "YES" Then
    Range("C13:P13").ClearContents
End If
If Range("B14") = "YES" Then
    Range("C14:P14").ClearContents
End If
If Range("B15") = "YES" Then
    Range("C15:P15").ClearContents
End If
End Sub

简单的问题,谢谢你的帮助。 我不知道还有什么可说的,我相信这是非常直截了当的。但我仍然得到了,#34;看起来你最多的是代码错误。" 对于VBA专家来说,这应该很容易解决。

再次感谢。

2 个答案:

答案 0 :(得分:2)

试试这个:

Sub RemoveLoop()

Dim i As Long
Set WSheet = Worksheets("Sheet1") ' This enables the change in the mentioned sheet and not the Active sheet.
For i = 6 To 15
    If WSheet.Range("B" & i) = "YES" Then
        WSheet.Range("C" & i & ":P" & i).ClearContents
    End If
Next i

End Sub

答案 1 :(得分:0)

这是你可以做的,将单元格和范围作为变量传递:

Option Explicit

Sub RemoveLoop()

    Dim i As Long

    For i = 6 To 15
        With Worksheets(1)
            If UCase(.Range("B" & i)) = "YES" Then
                .Range(.Cells(i, "C"), .Cells(i, "P")).ClearContents
            End If
        End With
    Next i

End Sub

除了使用Range(Cells,Cells)之外,代码引用了UCase,这确保了"是"和"是"在专栏" B"是平等的。