Организация данных из CSV

У меня есть этот файл csv, который я хочу организовать в struct. Я измеряю некоторые поверхности, и под каждой поверхностью есть секции, и под каждым разделом есть несколько прогонов. Я хочу извлечь каждый элемент с первой поверхности до следующей поверхности и так далее, пока данные не будут сгруппированы в соответствии с количеством поверхностей, которые появляются в данных. Я хочу написать общий код, который будет анализировать данные из измерения, которое будет принято. Теперь мой код для поверхностей может хранить только последние элементы под каждой поверхностью и сообщать мне, что «индекс не соответствует диапазону». Я укладывается в стек, и мне нужна помощь. Ниже приведены данные и код.

SURFACE SECTION RUN -0.07764007 0.07762 42 0.07801 -0.07747896 0.07744 -0.07753022 0.07759 -0.07729586 0.07747 -0.07753753 0.07741 -0.07742768 RUN -0.077435 0.07747 -0.07757416 0.07726 -0.07761077 0.07756 -0.07750092 -57 -0.07712009 0.07771 -0.07769133 0.07769 -0.07713472 0.07733 -0.07726657 0.0774 -0.07731783 0.07743 -0.07754486 0.07752 -0.07755219 0.07745 -0.07723726 SECTION RUN -0.07785247 0.07765 -0.07742036 -0.0776 -0.07742036 0.07747 -0.07729586 0.07741 -0.07744966 0.07724 -0.07753753 0.0773 -0.07747896 0.07759 -0.07746429 0.07771 SURFACE SECTION RUN -0.07753753 0.07786 -0.07729586 0.07743 -0.07762542 0.07763 -0.07723726 0.07735 -0.077955 -71 -0.07681249 0.07727 -0.0775229 0.07733 -0.07747896 0.07738 -0.07714205 0.07746 -0.07737642 0.07744 -0.07761809 0.07727 -0.07755951 0.07754 -0.07792571 

код

  Sub report() Dim FilePath As String, LineFromFile As Variant, LineItems As Variant Dim SURF() As Variant Dim surface As String, Section As String, run As String Dim DATA() As Variant, counter_surf As Long, counter_sect As Long Dim Snumbs() As Variant, j As Long, S As Integer, i As Long, q As Long Dim n As Long, m As Long, counter As Long Dim Endoffileflag As Boolean, errorflag As Boolean surface = "SURFACE" Section = "SECTION" run = "RUN" counter = 0 counter_surf = 0 counter_sect = 0 counter_run = 0 Endoffileflag = False errorflag = False FilePath = Application.GetOpenFilename("Cvv Files (*.csv), *.csv") Open FilePath For Input As #1 Do Until EOF(1) Line Input #1, LineFromFile LineItems = Split(LineFromFile, ",") For i = LBound(LineItems) To UBound(LineItems) ReDim Preserve DATA(i) DATA(i) = Mid(LineItems(i), 2, Len(LineItems(i)) - 2) If DATA(i) <> surface And DATA(i) <> Section And DATA(i) <> run Then DATA(i) = CDbl(DATA(i)) End If ActiveCell.Offset(i).Value = DATA(i) Next i Loop 'For j = LBound(DATA) To UBound(DATA) Do If DATA(counter) = surface Then ReDim Preserve SURF(counter_surf) 'If DATA(j + 1) <> surface Then Do SURF(counter_surf) = DATA(counter) counter = counter + 1 Loop Until DATA(counter) = surface And counter <= UBound(DATA) 'End If 'counter = counter + 1 End If counter_surf = counter_surf + 1 Loop Until counter >= UBound(DATA) 'Next j Close #1 End Sub 

Давайте будем гением компьютера.