VBA中对数组处理正数求和时遇错误,求解决方法
问题原因分析
- 第一个
ArrayList代码报错:Application.WorksheetFunction.CountIf不支持直接传入ArrayList对象,它仅接受Range对象或标准的Variant数组作为参数,因此直接传递ArrayList会触发参数不匹配错误。 - 第二个Range转数组代码报错:从Range赋值得到的是二维Variant数组(即使是单列,结构为
rr(行索引, 列索引)),而CountIf对数组参数要求为一维结构,因此出现"object required"错误。
纯数组实现正数求和的解决方案
以下是不依赖工作表数据的几种实现方式:
方法一:遍历数组(最通用,无需依赖工作表函数)
通过循环遍历数组元素,判断正数后累加,适用于普通Variant数组和ArrayList:
针对ArrayList的实现
Option Explicit Sub SumPositiveArrayList() Dim arr1 As New ArrayList Dim sumPos As Double Dim item As Variant arr1.Add 20 arr1.Add -15 arr1.Add 20.77 sumPos = 0 For Each item In arr1 If item > 0 Then sumPos = sumPos + item Next item MsgBox "正数总和:" & sumPos End Sub
针对普通Variant数组的实现
Option Explicit Sub SumPositiveVariantArray() Dim arr As Variant Dim sumPos As Double Dim i As Long ' 定义纯内存数组(完全不依赖工作表) arr = Array(20, -15, 20.77, -5, 10) sumPos = 0 For i = LBound(arr) To UBound(arr) If arr(i) > 0 Then sumPos = sumPos + arr(i) Next i MsgBox "正数总和:" & sumPos End Sub
方法二:转换数组后使用工作表函数(如果偏好函数式实现)
将ArrayList转换为一维Variant数组后,即可使用SumIf或CountIf等工作表函数:
Option Explicit Sub UseSumWithArrayList() Dim arr1 As New ArrayList Dim varArr As Variant Dim sumPos As Double arr1.Add 20 arr1.Add -15 arr1.Add 20.77 ' 将ArrayList转换为一维Variant数组 varArr = arr1.ToArray ' 调用SumIf计算正数总和 sumPos = Application.WorksheetFunction.SumIf(varArr, ">0") MsgBox "正数总和:" & sumPos End Sub
内容的提问来源于stack exchange,提问作者nirav vaniya
相关产品推荐
相关产品推荐

