1

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

.. 等等。

这很好用,但速度很慢。我想做的是在整个范围内使用 AutoFill,但我不确定如何编写它,以便每次将值增加 25。到目前为止,我只能让它为每个值增加一,其中

=SUM(B1:B24)

变成

=SUM(B2:B25)

有没有办法在一个范围内使用自动填充,它会增加一个可变数字——在这种情况下是 24?

提前致谢。

4

2 回答 2

1

如果您对当前方法的唯一抱怨是它的速度,那么您可以通过在插入公式时暂停计算来显着加快速度:

Application.Calculation = xlCalculationManual
'do your thing
Application.Calculation = xlCalculationAutomatic
于 2011-07-14T20:09:00.147 回答
0

可能有很多方法可以做到这一点,无论是否使用 VBA。

我向您展示了一个仅使用 Excel 的解决方案,但可以迁移到 VBA 以避免使用其他列(我相信必须有一种方法可以在不使用支持列的情况下做到这一点,社区中的其他人最终可能会记得如何)。

好吧,这里的诀窍是使用INDIRECT公式。

我假设您将求和公式应用于 C 列。

在 D 和 E 列中,您将存储行索引。然后,我们将拥有:

|D      |E      |
|-------|-------|
|1      |24     |
|=D1+24 |=E1+24 |
|=D2+24 |=E2+24 |

Now, in column C, instead of using Sum with direct values, use:

=SUM(INDIRECT("B"&D1):INDIRECT("B"&E1))
=SUM(INDIRECT("B"&D2):INDIRECT("B"&E2))
=SUM(INDIRECT("B"&D3):INDIRECT("B"&E3))

This code can be dragged down as much as you want, as long as you drag the columns C, D and E together.

Again, it could also be done in a fancier way using VBA (and maybe in a smarter way using only Excel, hehe) but that's the way that came up to my mind. Anyway, most of the questions I've seen here about simple VBA implementations were for personal usage, so use other columns wouldn't be a problem.

In case you prefer (or need) to use VBA, draft your code and we'll be helping you out.

Hope it helps.

于 2011-07-14T21:30:37.003 回答