[英]Excel VBA - Subscript out of range
I need help. 我需要帮助。 The below code is written to add to column data and store in another column.
编写以下代码,以添加到列数据并存储在另一列中。 When I execute the code it says subscript out of range in for loop where it adds to array values.
当我执行代码时,它说下标超出了for循环的范围,并在此添加了数组值。
Kindly give an advice. 请给个建议。
Thanks 谢谢
Sub test()
Dim W1, W2, R1, R2, R3, R4, R5 As Double
Dim i, j, T As Integer
Dim myRange As Double
Dim Arr1 As Variant, Arr2 As Variant, Arr3 As Variant
myRange1 = Worksheets("Sheet2").Range("M15", "M30")
myRange2 = Worksheets("Sheet2").Range("N15", "N30")
R1 = WorksheetFunction.Sum(myRange1)
R2 = WorksheetFunction.Sum(myRange2)
R3 = (R1 + R2)
R4 = (R1 / R3) * 100
R5 = (R2 / R3) * 100
Range("M31") = R4
Range("N31") = R5
Arr1 = Range("M15:M30").Value
Arr2 = Range("N15:N30").Value
For i = LBound(Arr1) To UBound(Arr1)
Arr3(i) = Arr1(i) + Arr2(i)
Next
T = 16
For j = 1 To T
Range("M" & 33 + j).Cells = Arr3
Next
End Sub
Arr3 is never The error is caused because Arr3
was never initialized as an array. 永远不会将Arr3出现该错误是因为从未将
Arr3
初始化为数组。 Arr1(i)
will also throw an error because Arr1
is a 2 dimensional array; Arr1(i)
也将引发错误,因为Arr1
是二维数组。 use Arr1(i, 1)
instead. 请改用
Arr1(i, 1)
。
ReDim Arr3(LBound(Arr1) To UBound(Arr1))
For i = LBound(Arr1) To UBound(Arr1)
Arr3(i) = Arr1(i, 1) + Arr2(i, 1)
Next
Dim W1, W2, R1, R2, R3, R4, R5 As Double
In the declaration above R5
's datatype is Double the rest are Variants. 在上面的声明中,
R5
的数据类型为Double,其余为变量。
Here are a few videos that will help: Excel VBA Introduction Part 3 - What to do When Things Go Wrong (Errors and Debugging) , Excel VBA Introduction Part 34 - Type Declarations (User-Defined Types) and Excel VBA Introduction Part 25 - Arrays 以下是一些视频,这些视频将有所帮助: Excel VBA简介第3部分-出错时的处理方法(错误和调试) , Excel VBA简介第34部分-类型声明(用户定义的类型)和Excel VBA简介第25部分-数组
Code: 码:
Option Explicit
Public Sub TEST()
Dim Arr1(), Arr2(), Arr3(), i As Long, ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Arr1 = Application.Transpose(ws.Range("M15:M30").Value)
Arr2 = Application.Transpose(ws.Range("N15:N30").Value)
ReDim Arr3(1 To UBound(Arr1))
For i = LBound(Arr1) To UBound(Arr1)
Arr3(i) = Arr1(i) + Arr2(i)
Next
End Sub
you could use a 2D array 您可以使用2D阵列
Public Sub TEST()
Dim Arr(), Arr3(), i As Long
With ThisWorkbook.Worksheets("Sheet1").Range("M15:N30") ' reference wanted range in wanted sheet and workbook
Arr = .Value ' store referenced range values in an array
ReDim Arr3(1 To UBound(Arr, 1))
For i = 1 To UBound(Arr, 1)
Arr3(i) = Arr(i, 1) + Arr(i, 2)
Next
.Offset(18).Resize(, 1).Value = Application.Transpose(Arr3) ' paste array values to referenced range offsetted 18 rows down and resize to one column
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.