【发布时间】:2017-08-22 07:54:01
【问题描述】:
所以我正在 VBA 中开发这个模块,我可以
将数据从工作表范围复制到数组。
计算该数组中每个整数的出现次数。
我尝试将整数数组元素与整数类型进行比较,但它给出了类型不匹配错误,所以我试图找出 range.offset.value 的数据类型,但它总是给出类型不匹配。
这是我的代码。请帮忙!!!
编辑:
我尝试将所有数组转换为 Variant,但现在 If 语句给了我一个类型不匹配错误。 如果 k = first(j) 那么 total(k) = total(k) + 3
'-------------------------
Option Explicit
Sub Task1()
Dim total(32) As Integer
Dim first(32) As Integer
Dim second(32) As Integer
Dim third(32) As Integer
Dim firs As Range
Dim secon As Range
Dim thir As Range
Set firs = Range("B2:B33")
Set secon = Range("C2:C33")
Set thir = Range("D2:D33")
Dim i As Integer
'copying data from first , second and third range to specific arrays
'gives type mismatchy error here
For i = 0 To 32
first(i) = firs.Offset(i, 0).Value
second(i) = secon.Offset(i, 0).Value
third(i) = thir.Offset(i, 0).Value
Next
'initialize total array with 0
For i = 0 To 32
total(i) = 0
Next
Call reader(total, first)
End Sub
'---------------------------------------------------
Sub reader(total() As Integer, first() As Integer)
Dim i, j, k As Integer
'Checks the occurance of every array element
For i = 0 To 32
'gives type mismatch error here
k = first(i)
j = i + 1
For j = i To 32
If k = first(j) Then total(k) = total(k) + 3
Next
Next
End Sub
【问题讨论】:
-
我认为这将是一个变体。此外,ranges.value 作为数组存在,因此
arr=range("a1:a100").value也会为您节省一个循环。在即时窗口中,输入? typename(first(I))也只有k被定义为整数,I和j不会是 -
您的范围内是否有任何错误值?
-
我没有任何错误值。都是整数@Rory
-
@Nathan_Sav 我尝试通过 arr=range("a1:a100").value 分配值,但它没有那样工作。
-
如果只需要统计某个范围内整数的出现次数,为什么不直接使用
COUNTIF?。您可以循环遍历您的范围并以这种方式获得结果