我有一组数据,这些数据按照"年份"列排序。我从一小部分开始构建我的代码,因此只有大约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
存储这些值的最佳方法是什么,以便我以后可以引用它们?
答案 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
中也可以找到更优雅的答案