【问题标题】:VBA Rounding With Cell Values使用单元格值进行 VBA 舍入
【发布时间】:2019-02-06 17:01:26
【问题描述】:

我正在尝试将 AD:AD 列中的每个填充单元格四舍五入到小数点后 4 位,并在下一个单元格为空白时结束。

我认为这样的事情会起作用,但它在 cell.value 上出错了。

Sub Round_4()
For Each cell In [AD:AD]
    If cell = "" Then Exit Sub
    cell.Value = WorksheetFunction.Round(cell.Value, 4)
Next cell 

结束子

有什么建议吗?

【问题讨论】:

  • 它对我有用...您遇到了什么错误...尝试将变量“cell”重命名为其他内容...“Cell”可能是关键字

标签: vba rounding


【解决方案1】:

您只能使用

工作到第一个空单元格
Range("AD1", Range("AD1").End(xlDown)).Value = Evaluate("round(" & Range("AD1", Range("AD1").End(xlDown)).Address & ",4)")

请注意,这是使用 Activesheet 引用。您可以将 With 语句换成父表。

【讨论】:

    【解决方案2】:

    你可以这样做:

    Dim myCell As Range
    Dim myRange As Range
    
    Set myRange = Excel.Application.ThisWorkbook.Worksheets(worksheetNameGoesHereInDoubleQuotes).Range("AD:AD")
    
    For Each myCell In myRange
        If Not IsEmpty(myCell) Then
            myCell.Value = Application.WorksheetFunction.Round(CDbl(myCell.Value), 4)
        'me being lazy with my range assignment
        ElseIf IsEmpty(myCell) Then
            Exit For
        End If
    Next
    

    【讨论】:

    • 如果myCell 包含文本将不起作用。另外,IsEmpty(myCell) - 缺少Not
    • @BigBen 因为 OP 没有另行声明,我假设所有单元格都是数字
    • 但是 OP 也没有声明它们都是数字。
    • (我正在尝试将 AD:AD 列中的每个填充单元格四舍五入到小数点后 4 位,并在下一个单元格为空白时结束。)大量信息假设它们都是数字。
    • 如果它们都是数字那么为什么cell.Value = WorksheetFunction.Round(cell.Value, 4) 会抛出错误?我的观点是防守更安全。 “填充”单元格不等同于“数字”单元格。
    猜你喜欢
    • 1970-01-01
    • 2020-02-09
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多