Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 变量阵列多个错误和故障_Arrays_Excel_Vba_Variant_Subscript - Fatal编程技术网

Arrays 变量阵列多个错误和故障

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

互联网上的人们,我需要你们的帮助!我试图使用变量数组将一个大型性能数据集汇总为单个分数

我有一张大约13000行的桌子,大约1500名员工要循环浏览

我不是VBA新手,以前也用过这种方法,所以我不知道出了什么问题

当for循环超过数组的UBound时,我要么得到一个“下标超出范围”,要么得到一堆“Next without for”、“End Select without Select”,而不管“End”或“Next”是否存在

请帮忙

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
语句。而且,您的第一个循环似乎没有做任何事情,最后,为什么要使用数组?无论如何,您并没有真正使用它。选择几乎总是一个性能问题