动态地和条件地将数据集划分为多个阵列或存储关于分割位置的信息

时间:2015-08-28 09:39:00

标签: excel-vba vba excel

我有一组数据,这些数据按照"年份"列排序。我从一小部分开始构建我的代码,因此只有大约500行。专栏中有大约15个不同的值"年"我想分别为每一列制作一个图表。要做到这一点,我需要知道一年开始的哪一行以及它结束的那一行。因此,我需要每年将大量数据分成单独的数组,或者每年包含开始行和结束行的数组,以便我可以在生成图形的代码中引用它们。

我正在考虑编写一个循环来检查列中的行的值是否为"年"与上面的值不同,使用类似的东西:

For row = 3 to TotalRows
    IfNot Cells(row,1).Value = Cells(row-1,1).Value Then
        'Row = startrow current year
        'Cells(row,1).Value = current year
        'Row -1 = endrow previous year
        'Cells(row-1,1).Value = previous year
    End If
Next row

存储这些值的最佳方法是什么,以便我以后可以引用它们?

1 个答案:

答案 0 :(得分:0)

我只是通过获得风滚草徽章来回到这个问题。然而,我最近解决了这个问题,所以我想我也许可以与任何可能遇到这个问题的人分享我的答案:

Public MyRange As Range
Public Years() As Variant
Global TotalRows As String

Sub DevideData()

Dim i As Integer

Set MyRange = Range("AL35:AN35") 'output data from Years here for manual control.

ReDim Years(1, 2)

Years(0, 0) = Cells(2, 1).Value
Years(0, 1) = 2

i = 1
ThisWorkbook.Worksheets("Simple Boundary").Activate
TotalRows = ThisWorkbook.Worksheets("Simple Boundary").Range("A100000").End(xlUp).row

For row = 3 To TotalRows 'my data starts in row 2, as row 1 is a header
    Years = ReDimPreserve(Years, i, 2) 'as data starts in row 2 this is the first entry

    If Not Cells(row, 1).Value = Cells(row - 1, 1).Value Then 
'check if cell value differs from row above if so fill a line in the array
        Years(i - 1, 2) = row - 1
        Years(i, 0) = Cells(row, 1).Value
        Years(i, 1) = row
        i = i + 1 'increase the row of the array
    End If
Next row

Years(i - 1, 2) = TotalRows
MyRange.Resize(i, 3) = Years

End Sub

在我的另一个问题here

中也可以找到更优雅的答案