从工作表将数据存储到阵列

时间:2019-09-04 14:29:07

标签: arrays excel vba

我正在尝试分析工作表中的一些数据,第一步是找到我管理的最后一行。然后,我需要将数据存储在每一列的数组中,以简化进一步的分析。

我的数据如下:

Data picture

我试图将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代表表格的最后一行。 我这样做是否正确?

2 个答案:

答案 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 ....