在VBA中修改IF语句以确保使用正确的公式填充命名范围

时间:2017-06-26 16:37:18

标签: vba excel-vba excel

我的代码似乎有问题。它将使用'0'填充整个命名范围"Table_LM",而实际上我只想填充那些其值为"Table_Month"的值为'0'的值。 "Table_Month"大于/等于10.我假设它只是错误地定义了IF语句......

此外,我觉得我可以使我想要实现的目标更有效,更快捷。有没有人有什么建议?如果需要,我可以添加更多信息......

下面是语法:

    Sub Oval2_Click()
    Dim c As Range
    Const upperlimit As Integer = 10
    For Each c In Range("Table_Month")
      With Range("Table_LM")
        If c.Value >= upperlimit Then
            .Value = 0
        Else
            .Formula = "=table_month*table_long"
            .Value = .Value
        End If
      End With
     Next

    End Sub

2 个答案:

答案 0 :(得分:1)

问题出现是因为Table_LM“不知道”您正在循环Table_Month的单元格。你可以这样做:

Sub Oval2_Click()
Dim c As Range
Dim i as Long
Dim NRows as Long
Dim j as Long
Dim NCols as Long
Const upperlimit As Integer = 10
For i = 1 to NRows
  For j = 1 to NCols
    If Range("Table_Month").Cells(i,j).Value >= upperlimit Then
        Range("Table_LM").Cells(i,j).Value = 0
    Else
        Range("Table_LM").Cells(i,j).Formula = "=table_month*table_long"
        ' Range("Table_LM").Cells(i,j).Value = .Value
    End If
  Next j
Next i

End Sub

更多评论:

  • 在进入循环之前,您需要设置NRowsNCols的值。
  • 我不清楚你想对.Formula = "=table_month*table_long"做些什么。如果你打算成对地将table_month中的每个单元格乘以table_long中的相应单元格,则需要修改代码以获取单元格地址。
  • 我不清楚你想对.Value = .Value做些什么。在上一行代码中,您可以设置公式,因此将计算该值。

希望有所帮助。

答案 1 :(得分:0)

为什么不呢:

For Each c In Range("Table_Month")
    If c.Value >= upperlimit Then
        .Value = 0
    Else
        .Formula = "=table_month*table_long"
        .Value = .Value
    End If
Next c