Я создаю программу, которая быстро и эффективно анализирует большой объем данных.Я запустил программу, но я застрял на том, как создать цикл для получения среднего значения каждого столбца в наборе данных и вставки результатов на новую страницу.Существует 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).Я действительно не понимаю ошибку там, но независимо от того, что она изменится, поскольку теперь она будет в цикле.Я действительно застрял и надеюсь, что кто-то может помочь.Спасибо!