我正在尝试分析工作表中的一些数据,第一步是找到我管理的最后一行。然后,我需要将数据存储在每一列的数组中,以简化进一步的分析。
我的数据如下:
我试图将B列存储在数组中,但从B6开始:
Sub List_Rem_stock()
Dim array_Rem_Batch(1 To last_row_Rem_stock - 5) As Integer
For i = 1 To last_row_Rem_stock - 5
array_Rem_Batch(i) = Worksheets("Rem stock").Range(Bi)
Next i
Debug.Print array_Rem_Index
End Sub
last_row_Rem_stock
代表表格的最后一行。
我这样做是否正确?
答案 0 :(得分:1)
几乎,请尝试以下代码(在代码注释中找到解释):
Option Explicit
Sub List_Rem_stock()
Dim last_row_Rem_stock As Long, i As Long
Dim array_Rem_Batch() As Long
With Worksheets("Rem stock")
last_row_Rem_stock = .Cells(.Rows.Count, "B").End(xlUp).Row ' get last row with value in colum B
ReDim array_Rem_Batch(1 To last_row_Rem_stock - 5) ' redim array size
For i = 1 To last_row_Rem_stock - 5
array_Rem_Batch(i) = .Range("B" & i).Value
Next i
End With
End Sub
答案 1 :(得分:0)
您可以像这样将范围分配给数组(2D):
Dim arrData as variant: arrData = Range("B1:B" & lastrow)
。
您还可以通过以下方式将数组放回电子表格中:
Range("B1:B" & lastrow) = arrData
简单,轻松,快速,无需遍历数据。
在您的示例中,您可能会这样做。
Sub List_Rem_stock()
Dim i as Long
Dim array_Rem_Batch as variant
array_Rem_Batch = Worksheets("Rem stock").Range("B1:B" & last_row_Rem_stock)
for i = 6 to last_row_Rem_stock
debug.print array_Rem_Batch(i, 1)
next i
End Sub
请注意,以这种方式分配的数组将始终从1开始,而不是0。
编辑:
我要从第1行开始分配数据,而不是从第6行开始分配数据,纯粹是为了数组索引和工作表行之间的1:1关系。在情况允许的情况下,我更喜欢这种方式。
If array_Rem_Batch(i, 1) = Range("B" & i) Then ....
始终可以从所需的任何行分配数据:
array_Rem_Batch = Worksheets("Rem stock").Range("B6:B100") 'now the array has 95 rows.
在这种情况下,数组索引1将对应于工作表的第6行,如果需要执行以下操作,则必须在代码中进行管理:
If array_Rem_Batch(i, 1) = Range("B" & i + 5) Then ....