我有很多价格数据但想要按照条款或小时价格除以每周平均值(周是周日到周日)几年来分析它。 基本上在L'列中我试图获得一个系数(每小时价格除以每周平均值)的平均值被分为高峰时段(0800和2100之间)和非高峰时段(所有其他时间) - 峰值平均值和平均值非高峰期。
这是我的代码,但我对VBA来说真的很新,这是不对的,不确定如何解决它:
Sub averagehourprice()
Dim MyRange As Range
Dim t As Integer
Dim x As Integer
Dim y As Integer
For t = 2012 To 2016 'for each year loop
Range ("B2:B43135")
For x = 1 To 52 'for each week loop
Range ("D2:D43135")
For y = 1 To 24 'for each hour in each week loop
Range ("F2:F43135")
'create a coulmn of peak hours and off peak hours
If Range("F2:F43135") > 8 And Range("F2:F43135") < 21 Then Range("H2:H43135") = 1
'if each cell value in the range is "F2:F43135" >8 and < than 21 then coresspondinbg cell in H =1 else 0
Else: Range "H2:H43135" = "-"
End If
'if a cell in H is "-" then cell in I = 1
If Range("H2:H43135") = "-" Then Range("I2:I43135") = 1
Else: Range("I2:I43135") = "-"
End If
'get weekly average of peak values and weekly average of off peak values
Range("J2:J43135") = Sum((Range("G2:G43135")) * (Range("H2:H43135"))) / Sum((Range("H2:H43135")))
Range("K2:K43135") = Sum((Range("G2:G43135")) * (Range("I2:I43135"))) / Sum((Range("I2:I43135")))
'create a coeffieicent as a function of day price and average weekly price
Range("L2:L43135") = Range("G2:G43135") / Range("J2:J43135") + Range("G2:G43135") / Range("K2:K43135")
Next y
Next x
Next t
End Sub
非常感谢您的帮助。
答案 0 :(得分:0)
我认为你完全不了解如何使用循环。循环的目的是您有一个需要在函数中使用的变量。您指定了一个变量,但您没有使用它。有关详细信息,请参阅此链接:http://www.excel-easy.com/vba/loop.html
你完全想要用循环做什么对我来说并不完全清楚。也许如果你可以为我更广泛地解释你的问题,我可以为你创造一些与你合作的东西
PS:这应该在评论中,而不是作为答案,但我没有足够的代表发表评论
我有以下内容给你。下方的宏将为您提供每年的平均每周价格。如果您将第I列标记为2012年,J为2013年......那么在此列中将显示第1周至第52周的平均价格。
将其粘贴到模块中并更改工作表名称,然后运行它:
Sub averageperweek()
For i = 2 To 43145
If Sheets("sheet1").Range("B" & i).Value = "2012" Then Column = 9
If Sheets("sheet1").Range("B" & i).Value = "2013" Then Column = 10
If Sheets("sheet1").Range("B" & i).Value = "2014" Then Column = 11
If Sheets("sheet1").Range("B" & i).Value = "2015" Then Column = 12
If Sheets("sheet1").Range("B" & i).Value = "2016" Then Column = 13
Row = Sheets("sheet1").Range("D" & i).Value + 1
Sheets("sheet1").Cells(Row, Column).Value = (Sheets("sheet1").Cells(Row, Column).Value + Sheets("sheet1").Range("G" & i).Value) / 168
Next i
End Sub
查看截图,看来您的周数不正确。 2月1日你的周数也会变为2。
希望这对您有所帮助,如果您需要更多帮助,请不要犹豫,