Как использовать цикл do-while для получения среднего из нескольких массивов данных - PullRequest
0 голосов
/ 17 февраля 2019

Я создаю программу, которая быстро и эффективно анализирует большой объем данных.Я запустил программу, но я застрял на том, как создать цикл для получения среднего значения каждого столбца в наборе данных и вставки результатов на новую страницу.Существует 64 различных набора данных, каждый из которых содержит 511 записей.Я также хочу использовать функцию среднего значения, чтобы нули игнорировались.Я видел так много ссылок на средний цикл, но я довольно плохо знаком с vba, поэтому не могу хорошо их интерпретировать в своем коде.

Файл с именем «Mu2e Program» является основным файлом со всем кодом.в модуле 1, что я до сих пор.Файл с именем "FEB_histo_NT17290005_20181023_TRIAL_2" представляет собой фактические данные, которые анализируются.В коде, который я уже написал, он просит вас выбрать файл (в котором я бы выбрал "FEB_histo _..."), затем он транспонирует данные и затем добавляет номера каналов на новую страницу в файле FEB (позже будет использоваться для вставки наших средних значений).Примером диапазона, используемого для нахождения среднего значения, будет «D4: D515».У меня такое ощущение, что это намного проще, чем я думаю, я просто не могу этого понять!Самым сложным для меня является понимание того, как общаться с различными рабочими книгами (написание кода в моем программном файле, который выполняется в файле FEB).Это было долгое испытание!

Public Sub Start()
'to open and transpose the data
    Dim file As Variant
    Dim csvWb As Workbook, newWs As Worksheet
    Dim Mu2eWb As Workbook, Ws2 As Worksheet
    Dim copyRange As Range

        file = Application.GetOpenFilename(FileFilter:="Report Files *.csv (*.csv),*.csv", Title:="Please choose a .csv file to open", MultiSelect:=False)

        If file <> False Then
            Set csvWb = Workbooks.Open(file)
            Set Mu2eWb = ThisWorkbook
            Set copyRange = csvWb.Worksheets(1).UsedRange
            Set Ws2 = Mu2eWb.Worksheets.Add(After:=Mu2eWb.Worksheets(Mu2eWb.Worksheets.Count))
        copyRange.Copy
            Ws2.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        End If

'to calculate and paste average on to a new worksheet (also label the channel columns)
    Dim AvgRange As Range
    Dim Ws3 As Worksheet
    Dim Col As Long

        Set Ws2 = ActiveSheet
        Set Cell = ActiveSheet.Range("D4")
        Set Cell = ActiveCell

        Set Ws3 = ActiveWorkbook.Sheets.Add(After:=Worksheets(Worksheets.Count))


    Ws3.Range("A1").Select
    Ws3.Range("A1").FormulaR1C1 = "1"
    Range("B1").Select
    Range("B1").FormulaR1C1 = "2"
    Range("A1:B1").Select
    Selection.AutoFill Destination:=Range("A1:BL1"), Type:=xlFillDefault
    Range("A1:BL1").Select

    With Workbooks("Mu2e Program.xlsm").Worksheets("Sheet2")
        AVG = WorksheetFunction.AverageIf(Range("D:D"), 0)

    End With

End Sub

В данный момент единственной ошибкой, которая возникает, является последняя строка кода, AVG = WorksheetFunction.AverageIf (Range ("D: D"), 0).Я действительно не понимаю ошибку там, но независимо от того, что она изменится, поскольку теперь она будет в цикле.Я действительно застрял и надеюсь, что кто-то может помочь.Спасибо!

...