VBA和Excell:获取列平均值的问题

时间:2016-01-19 13:50:24

标签: excel vba

我在Excel文件中有一组数据,其第一列有日期&时间和其他列具有相同数量的数据。

我想要做的是使用VBA创建一个脚本,每15分钟后显示每列的平均值,这些平均值应显示在不同的表格上。

请参考下图以获取数据集的示例。

enter image description here

随着时间从12:05到13:45开始,所以我需要B,C和D列的平均值12:05到12.20,然后是12:25到1:40,依此类推请注意时间间隔可能不一样,所以我需要一个脚本,它包含循环以从A列读取值并相应地平均其他列

请参阅下文了解我目前的情况:

Sub AverageTimeCalculation()


    Dim finalrow As Integer
    Sheets("Elysees").Activate
    finalrow = Sheets("Elysees").Range("A12120").Row
    For i = 2 To finalrow
        If Cells(i, 1).Value <= 42286.75 Then
            Sheets("sheet1").FormulaR1C1 = "=AVERAGE(Elysees!cells(i,2))"
            Sheets("sheet1").Range("B2").Select
            Selection.AutoFill Destination:=Range("B2:V2"), Type:=xlFillDefault
            Range("B2:V2").Select
        End If
    Next i
End Sub

1 个答案:

答案 0 :(得分:0)

试一试。

使用Sheets&#34; Elysees&#34;将其粘贴到工作簿中的模块中。并插入一张表并命名为&#34; ElyseesAverage&#34;

Option Explicit
Sub AverageTimeCalculation()

    Dim OriginalDataSheet As Worksheet
    Set OriginalDataSheet = ThisWorkbook.Sheets("Elysees")

    Dim AverageDataSheet As Worksheet
    Set AverageDataSheet = ThisWorkbook.Sheets("ElyseesAverage")

    Dim finalrow As Integer
    With OriginalDataSheet
        finalrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With

    Dim StartTimeRowReference As Integer
    Dim AverageTimeBlock As Range
    Dim ColumnReference As Integer
    Dim AverageValue As Double ' use double for the decimals
    Dim AverageDataSheetRowReference As Integer

    AverageDataSheetRowReference = 2
    For StartTimeRowReference = 2 To 200 Step 4

        AverageDataSheet.Cells(StartTimeRowReference, "A").Value = OriginalDataSheet.Cells(StartTimeRowReference, "A").Value

        For ColumnReference = 2 To 8

            Set AverageTimeBlock = OriginalDataSheet.Range(Cells(StartTimeRowReference, ColumnReference), _
                                                           Cells(StartTimeRowReference + 3, ColumnReference))

            AverageValue = WorksheetFunction.Average(AverageTimeBlock)

            AverageDataSheet.Cells(AverageDataSheetRowReference, ColumnReference).Value = AverageValue


        Next ColumnReference
    Next StartTimeRowReference


End Sub