【问题标题】:Trying to understand how to write an if then elseif statement using certain parameters试图了解如何使用某些参数编写 if then elseif 语句
【发布时间】:2013-12-27 05:42:30
【问题描述】:

是的,我不擅长 VBA。只是在学习,我需要有人来看看这个并指出我正确的方向。我想为一系列单元格编写一个 if 语句。我希望宏查看每个单元格,如果单元格 = 0,则清除单元格,如果单元格 0,则什么也不做,查看下一个单元格。

这是我可怜的尝试。

Sub MACRO6()
    Dim VM As String
    VM = Range("D29:E43")
    Sheets("10").Select
    For Each VM In Range
        If cell = 0 Then ClearContents
        ElseIf cell <> 0 Then
        End If
    Next
End Sub

【问题讨论】:

    标签: loops excel vba


    【解决方案1】:

    您的ElseIf 是不必要的。默认情况下它什么都不做。只需删除该行。因为你的If ... Then 在一行,你也不需要End If 并且应该删除它。

    你想要类似下面的东西(从 this example 调整):

    Sub ClearZero()
        For Each c In Worksheets("10").Range("D29:E43").Cells
            If c.Value = 0 Then c.Value = ""
        Next
    End Sub
    

    【讨论】:

    • Ed,你是对的,那些是不需要的。但是,在删除它们之后,我的宏没有达到预期的效果(它让我大吃一惊)。你有什么建议吗?
    • 不知道这意味着什么……它做了什么?
    • 这是一个不同的问题——见上文。
    • 这个问题的意图比较明确——我不认为这是一个不同的问题。
    • 那是因为您试图告诉它“对于这组单元格中的每个工作表”......该范围内没有工作表,只有单元格。您必须将范围部分与 For Each...In... 语句分开并将其放在另一行。
    【解决方案2】:

    类似这样的:

    1. 您有两个范围可供使用,由D29:E43 定义的范围(下面的rng1),然后循环遍历此范围中的每个单元格(rng2)
    2. 请注意,rng1 已直接参考工作表 10 设置,以确保它在正确的工作表上运行(并且不需要选择该工作表)
    3. 您需要在ClearContents上指定一个范围

    代码

    Sub MACRO6()
    Dim rng1 As Range
    Dim rng2 As Range
    Set rng1 = Sheets("10").Range("D29:E43")
     For Each rng2 In rng1
        If rng2.Value = 0 Then rng2.ClearContents
    Next
    End Sub
    

    【讨论】:

    • + 1 回答问题 + 解决其他问题 :)
    • 附带说明:我猜.Replace 会是一个更好的选择:)
    • 是的 - 虽然这是基于理解的,它可能涉及Clear 而不是ClearContents 我虽然坚持OP的逻辑是值得的。
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多