按变量编号增加自动填充范围

时间:2011-07-14 17:02:21

标签: vba excel-vba autofill excel

工作项目的要求是按天将每小时的值加在一定数量的类别中。这些值存储在一个长列中的电子表格中;为了获得这些值,我将每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?

提前致谢。

2 个答案:

答案 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,请起草您的代码,我们会帮助您。

希望它有所帮助。