循环访问数据以查找统计信息并将其分配给单元格

时间:2015-04-09 17:43:01

标签: excel vba excel-vba

到目前为止,我非常感谢我收到的帮助,它确实很有用。正如前一篇文章中所述,我正在开展一个大学项目,处理每天收集的大量流级数据,并在.csv中看起来像这样:

 ID Year        DD  Apr  May    Jun  Jul    Aug      Sep    Oct
08HB089 2000    1   3.25 3.83   2.34 1.05   0.273   0.092   0.045
08HB089 2000    2   5.18 3.3    2.6  1.09   0.225   0.081   0.04
08HB089 2000    3   5.5  3.33   2.92 0.93   0.186   0.054   0.036
08HB089 2000    4   4.98 2.53   3.33 0.804  0.153   0.041   0.033

等等另外400行。到目前为止我所做的是创建一个执行以下操作的脚本:

  1. 选择所需的年份(" 2000")
  2. 将选择项向右偏移2,以便选择4月(或任何月份)的值。
  3. 计算平均值和标准偏差并将它们分配给单元格。
  4. 见下面的代码:

     Sub StatMakersub(Rng1 As Range)
        Dim MyRange As Range
        Dim Cell As Object
        Dim InQuestion As Range
        Dim SelAvg As Variant
        Dim SelSD As Variant
        Dim L As Integer
        Dim Year As Integer
    
    For L = 2 To 17
        Year = 2000
        For Each Cell In Rng1
        If Cell.Value = Year Then
                If MyRange Is Nothing Then
                    Set MyRange = Range(Cell.Address)
                Else
                    Set MyRange = Union(MyRange, Range(Cell.Address))
                    MyRange.Select
                    With ThisWorkbook.Worksheets("08HB089_daily_Flow_Tab")
                        Selection.Offset(0, 2).Select
                        Set InQuestion = Selection
                        SelAvg = Application.WorksheetFunction.Average(InQuestion)
                        Range(L, 15).Value = SelAvg
                        SelSD = Application.WorksheetFunction.StDev(InQuestion)
                        Range(L, 16).Value = SelSD
                Year = Year + 1
    End Sub
    

    如果你不能告诉我,我在编码方面很陌生。我现在要做的是为函数添加循环功能,所以我不必手动完成所有操作。正如您所看到的,我已尝试使用上面的for循环,但我一直遇到语法错误。如果有人可以帮我弄清楚如何添加搜索特定年份的循环功能,找到数据,并将其统计数据计算到一个单元格(比如L2),然后在下一年(2001年)进行下一步,并将这些数据放入在下一个单元格(L3)中的统计数据,我将非常感激。

1 个答案:

答案 0 :(得分:0)

要直接回答您的问题,您需要使用“next”命令标记要循环的代码的结尾。在这种情况下,您应该使用“Next L”

那就是说,除非您只是将其作为学习VBA的项目,否则我认为您可以从数据透视表中获得所需的所有功能。简而言之,通过数据透视表,您可以操作可以通过多个不同列进行不同分组的数据。我会说更多,但是有很多很好的教程可以教你比我更好。