【问题标题】:Excel VBA - Sum up a columnExcel VBA - 总结一列
【发布时间】:2011-02-26 23:45:52
【问题描述】:

我试图总结 Excel VBA 中的一列,但是因为有空格,所以我得到 0 作为总和。

Dim rExternalTotal As Range , dExternalTotal as Double
Set rExternalTotal = Range(rReportData.Offset(0, 0), rReportData.Offset(261, 0).End(xlUp))
dExternalTotal = Application.WorksheetFunction.Sum(rExternalTotal)

dExternalTotal 始终为零。我无法删除工作表上的空格。谁能建议一种以编程方式求和的方法?

【问题讨论】:

  • 呃,我更喜欢原帖的格式。只是讨厌水平滚动条...
  • rReportData 只是另一个范围
  • 在 Sum() 之前添加这个,作为检查:debug.print rExternalTotal.address

标签: vba excel


【解决方案1】:

我认为您误解了错误的来源; rExternalTotal 似乎等于单个单元格。 rReportData.offset(0,0) 等于 rReportData
rReportData.offset(261,0).end(xlUp) 可能也等于 rReportData,因为您偏移 261 行,然后使用 .end(xlUp) 函数选择连续数据范围的顶部。
如果您只对某一列的总和感兴趣,可以直接参考整列:

dExternalTotal = Application.WorksheetFunction.Sum(columns("A:A"))

dExternalTotal = Application.WorksheetFunction.Sum(columns((rReportData.column))

工作表函数 sum 将正确忽略空格。

如果这有帮助,请告诉我!

【讨论】:

  • 感谢您的回复,但总和仍然是零。
  • 这一行代码,没有上述任何一项对我有用(另外一行代码来初始化 rReportData),我在各个列上进行了测试;你在初始化 rReportData 吗?您能否发布完整的代码,包括显示 dExternalTotal 的位置?
  • 抱歉代码太长,无法发送。但 rReportData 只是一个正常范围。数据如下所示: COLUMN C
    7,000,000.00 7,130,000.00 5,165,000.00 3,360,000.00 2,030,000.00 3,420,000.00 5,170,000.00 1,650,000.00
  • 我不太确定是什么问题;这对我来说很好。您确定第二次引用 dExternalTotal 时(或显示它的任何地方)没有错字吗?错误输入变量名可能会导致 VBA 创建一个默认为 0 的新变量。否则我有点不知所措。此代码 dExternalTotal = Application.WorksheetFunction.Sum(columns("A:A")) 是否为您提供了 A 列的正确总和?
  • 不,它没有。前 2 个单元格是空白的,该列中的几个单元格也是如此。我对其他 3 个范围做了完全相同的事情,而且效果很好。我将再次重新测试您的代码。
【解决方案2】:

如果您想在 Excel 中添加一列数字,可以执行以下操作。 (我使用的是 Excel 2010,但不应该有所作为。)

示例: 假设您想将 B 列中的单元格从 B10 添加到 B100 并希望答案在单元格 X 中或变量 X 中(X 可以是任何单元格或您创建的任何变量,例如将 Dim X 作为整数等)。代码如下:

Range("B5") = "=SUM(B10:B100)"

X = "=SUM(B10:B100)

"=Sum(B10:B100) 的括号内没有引号,但 Range("B5") 的括号内有引号。等号和引号之间有一个空格没错。

某些单元格是否为空无关紧要,它只会将它们视为包含零!

这应该会为你做的!

【讨论】:

    【解决方案3】:

    我的表单上有一个标签,用于接收 Sheet1 中 D 列的数字总和。我只对第 2 到 50 行感兴趣,如果您的行数是动态的,您可以使用行计数器。我在 D 列中也有一些空白条目,它们被忽略了。

    Me.lblRangeTotal = Application.WorksheetFunction.Sum(ThisWorkbook.Sheets("Sheet1").Range("D2:D50"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      相关资源
      最近更新 更多