工作项目的要求是按天将每小时的值加在一定数量的类别中。这些值存储在一个长列中的电子表格中;为了获得这些值,我将每24行汇总到新的一天。这可以通过循环遍历电子表格并将每个循环的值增加24来实现。
例如:
first = 1
second = 24
i = 0
While Worksheets("Data").Range("A1").offset(i, 0) <> ""
Worksheets("Data").Range("C1").offset(i, 0).Formula = "=SUM(B" & first & ":B" & second & ")")
first = first + 24
second = second + 24
Wend
其中A列是类别,B列是每小时数据。 B列将是A * 24列的长度。
这会产生类似......
的结果=SUM(B1:B24)
=SUM(B25:B48)
=SUM(B49:B72)
..等等。
效果很好,但速度很慢。我想要做的是在整个范围内使用自动填充功能,但我不确定如何以每次增加值25的方式编写它。到目前为止,我只能让它为每个值增加1,其中
=SUM(B1:B24)
变为
=SUM(B2:B25)
有没有办法在一个可变数字增加的范围内使用自动填充功能 - 在这种情况下,24?
提前致谢。
答案 0 :(得分:1)
如果您对当前方法的唯一抱怨是它的速度,那么您可以通过在插入公式时暂停计算来显着加快速度:
Application.Calculation = xlCalculationManual
'do your thing
Application.Calculation = xlCalculationAutomatic
答案 1 :(得分:0)
使用或不使用VBA可能有很多方法可以做到。
我向您展示仅使用Excel的解决方案,但可以迁移到VBA以避免其他列的使用(我相信必须有一种方法可以在不使用支持列的情况下执行此操作,社区中的其他人可能会记住,最终)。
嗯,这里的诀窍是使用INDIRECT
公式。
我假设您将总和公式应用到C列。
在D列和E列中,您将存储行索引。然后,我们将:
|D |E |
|-------|-------|
|1 |24 |
|=D1+24 |=E1+24 |
|=D2+24 |=E2+24 |
现在,在C列中,不使用带直接值的Sum,而是使用:
=SUM(INDIRECT("B"&D1):INDIRECT("B"&E1))
=SUM(INDIRECT("B"&D2):INDIRECT("B"&E2))
=SUM(INDIRECT("B"&D3):INDIRECT("B"&E3))
只要将C,D和E列拖到一起,就可以根据需要拖动此代码。
同样,它也可以使用VBA以更高级的方式完成(并且可能以更智能的方式仅使用Excel,呵呵)但这就是我想到的方式。无论如何,我在这里看到的关于简单VBA实现的大多数问题都是出于个人使用,所以使用其他列不会有问题。
如果您更喜欢(或需要)使用VBA,请起草您的代码,我们会帮助您。
希望它有所帮助。