我正在创建一个程序,可以快速而有效地分析大量数据。我已经启动了该程序,但是我仍然坚持如何创建一个循环,以获取数据集中每一列的平均值并将结果粘贴到新页面上。有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)。我真的不明白那里的错误,但无论它会改变,因为它现在处于循环中。我真的很困,希望有人能帮上忙。谢谢!