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



我似乎对我的代码有问题。当我只想填充我在我名为 "Table_Month"的值时,它将填充整个命名范围"Table_LM",而当"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

问题出现了,因为 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中配对每个单元格中的每个单元格一个相应的单元格,则需要修改代码以获取单元格地址。
  • 我不清楚您想对.Value = .Value做什么。在以前的代码中,您设置了公式,因此该值将被计算。

希望会有所帮助。

为什么不只是:

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

最新更新