Arrays 变量阵列多个错误和故障
互联网上的人们,我需要你们的帮助!我试图使用变量数组将一个大型性能数据集汇总为单个分数 我有一张大约13000行的桌子,大约1500名员工要循环浏览 我不是VBA新手,以前也用过这种方法,所以我不知道出了什么问题 当for循环超过数组的UBound时,我要么得到一个“下标超出范围”,要么得到一堆“Next without for”、“End Select without Select”,而不管“End”或“Next”是否存在 请帮忙Arrays 变量阵列多个错误和故障,arrays,excel,vba,variant,subscript,Arrays,Excel,Vba,Variant,Subscript,互联网上的人们,我需要你们的帮助!我试图使用变量数组将一个大型性能数据集汇总为单个分数 我有一张大约13000行的桌子,大约1500名员工要循环浏览 我不是VBA新手,以前也用过这种方法,所以我不知道出了什么问题 当for循环超过数组的UBound时,我要么得到一个“下标超出范围”,要么得到一堆“Next without for”、“End Select without Select”,而不管“End”或“Next”是否存在 请帮忙 Sub createScore() Dim loData A
Sub createScore()
Dim loData As ListObject
Dim arrData() As Variant, arrSummary As Variant
Dim lRowCount As Long, a As Long, b As Long
Set loData = Sheets("DataMeasure").ListObjects("tbl_g2Measure")
arrData = loData.DataBodyRange
lRowCount = Range("A6").Value
Range("A8").Select
For a = 1 To lRowCount
Selection.Offset(1, 0).Select
For b = LBound(arrData) To UBound(arrData)
If arrData(b, 2) = Selection Then
Select Case arrData(b, 8)
Case "HIT"
Selection.Offset(0, 3) = Selection.Offset(0, 3) + 1
End Select
End If
Next b
Next a
Range("A8").Select
End Sub
无需使用
选择即可快速重写。不过,这仍然没有从阵列中获得任何好处
Sub createScore()
Dim loData As ListObject
Dim arrData() As Variant, arrSummary As Variant
Dim lRowCount As Long, a As Long, b As Long
Set loData = Sheets("DataMeasure").ListObjects("tbl_g2Measure")
arrData = loData.DataBodyRange
lRowCount = Range("A6").Value
' Update with correct sheet reference
With ActiveSheet.Range("A8")
For a = 1 To lRowCount
For b = LBound(arrData, 1) To UBound(arrData, 1)
If arrData(b, 2) = .Offset(a, 0).Value2 And arrData(b, 8) = "HIT" Then
.Offset(a, 3) = .Offset(a, 4)
End If
Next b
Next a
End With
End Sub
我需要做一些类似的事情,用户列表中有重复项,因此我创建了一个唯一用户名数组:
Dim arr() As String
lrn = 13237 'ActiveSheet.Range("A1").Range("A1").SpecialCells(xlCellTypeLastCell).Row
ac = 0
ReDim arr(0 To ac) As String
For Each c In Range("L2:L" & lrn)
If Not IsEmpty(c.Value) Then
If Not (UBound(Filter(arr, c.Value)) > -1) Then
If ac > 0 Then ReDim Preserve arr(0 To ac)
arr(ac) = c.Value
ac = ac + 1
End If
End If
DoEvents
Next c
下标超出范围明显;您正在超出数组的边界。其余的听起来像是你的条件反射的问题。我会一步一步地检查它,看看发生了什么。不要使用Select,所以我尝试了“For b”1到13237,但当断点到达时,它仍然能够到达13238。我不确定我是否理解您代码的要点。您是否只是尝试根据条件填充单元格?如果是这样,您可以在Excel中使用If
语句。而且,您的第一个循环似乎没有做任何事情,最后,为什么要使用数组?无论如何,您并没有真正使用它。选择几乎总是一个性能问题