如何使用do-while循环取多个数据数组的平均值

时间:2019-02-17 18:11:33

标签: excel vba loops average do-while

我正在创建一个程序,可以快速而有效地分析大量数据。我已经启动了该程序,但是我仍然坚持如何创建一个循环,以获取数据集中每一列的平均值并将结果粘贴到新页面上。有64种不同的数据集,每组都有511个数据条目。我也想使用averageif函数,以便忽略零。我见过很多关于平均循环的参考,但是我对vba还是很陌生,所以我无法很好地将其解释为我的代码。

名为“ Mu2e程序”的文件是主文件,其中包含我到目前为止所拥有的模块1中的所有代码。名为“ FEB_histo_NT17290005_20181023_TRIAL_2”的文件是正在分析的实际数据。在我已经编写的代码中,它要求您选择一个文件(在其中我将选择“ FEB_histo _...”),然后转置数据,然后将频道号添加到FEB文件中的新页面上(稍后用于粘贴我们的averageif值)。用于查找平均值的示例范围为“ 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)。我真的不明白那里的错误,但无论它会改变,因为它现在处于循环中。我真的很困,希望有人能帮上忙。谢谢!

0 个答案:

没有答案