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

Vba 按变量编号递增自动填充范围,vba,excel,autofill,Vba,Excel,Autofill,工作项目的一项要求是对特定数量的类别按天将小时值相加。这些值存储在一个长列的电子表格中;为了得到这些值,我每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

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

这很有效,但速度很慢。我想做的是对整个范围使用AutoFill,但我不确定如何将其写入这样一种方式,即每次将值递增25。到目前为止,我只能让它每增加一个值,其中

=SUM(B1:B24)
变成

=SUM(B2:B25)
有没有一种方法可以在一个范围内使用自动填充,在这个范围内它将以一个可变的数字递增——在本例中是24


提前谢谢

如果您对当前方法的唯一不满是速度,那么您可以在插入公式时暂停计算,从而大大加快速度:

Application.Calculation = xlCalculationManual
'do your thing
Application.Calculation = xlCalculationAutomatic

如果您对当前方法的唯一不满是速度,那么您可以在插入公式时暂停计算,从而大大加快速度:

Application.Calculation = xlCalculationManual
'do your thing
Application.Calculation = xlCalculationAutomatic

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

我向您展示了一个仅使用Excel的解决方案,但可以迁移到VBA以避免其他列的使用(我相信一定有一种方法可以不用使用支持列,社区中的其他人最终可能还记得如何使用)

这里的技巧是使用
间接
公式

我假设你将求和公式应用到C列

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

|D      |E      |
|-------|-------|
|1      |24     |
|=D1+24 |=E1+24 |
|=D2+24 |=E2+24 |
现在,在C列中,不要使用带直接值的和,而是使用:

=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,请起草您的代码,我们将为您提供帮助


希望能有所帮助。

可能有很多方法可以做到这一点,不管是使用VBA还是不使用VBA

我向您展示了一个仅使用Excel的解决方案,但可以迁移到VBA以避免其他列的使用(我相信一定有一种方法可以不用使用支持列,社区中的其他人最终可能还记得如何使用)

这里的技巧是使用
间接
公式

我假设你将求和公式应用到C列

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

|D      |E      |
|-------|-------|
|1      |24     |
|=D1+24 |=E1+24 |
|=D2+24 |=E2+24 |
现在,在C列中,不要使用带直接值的和,而是使用:

=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,请起草您的代码,我们将为您提供帮助


希望有帮助。

这是您的实际代码吗?在哪里增加i?是否可以使用Excel小计?这将很容易做到(只要你有一个关于当天的专栏)。@Tim:不,这是演示这个想法的示例代码。我现在明白了,我应该进一步回顾一下。在循环中,我将增加1。@Tiago Cardoso:我将尝试小计;我现在不在上班,但明天早上我会试一试。谢谢,嗯,保罗,正如我说的。。。有很多方法可以做同样的事情,也许是小计,也许就像我在下面提到的。。。只需选择一个最适合您的需要:-)这是您的实际代码吗?在哪里增加i?是否可以使用Excel小计?这将很容易做到(只要你有一个关于当天的专栏)。@Tim:不,这是演示这个想法的示例代码。我现在明白了,我应该进一步回顾一下。在循环中,我将增加1。@Tiago Cardoso:我将尝试小计;我现在不在上班,但明天早上我会试一试。谢谢,嗯,保罗,正如我说的。。。有很多方法可以做同样的事情,也许是小计,也许就像我在下面提到的。。。只要选择一个最适合你需要的:——)蒂亚戈,这个主意不错。明天早上我第一件事就是给你打一针,然后告诉你。非常感谢。蒂亚戈,这主意不错。明天早上我第一件事就是给你打一针,然后告诉你。非常感谢。蒂姆,谢谢你的建议。我有一个方法可以启动我的电子表格中的每个流程,我在这个“主要”方法的开头和结尾都有这些行。蒂姆,谢谢你的建议。在我的电子表格中,我有一个启动每个进程的方法,在这个“主要”方法的开头和结尾都有这些行。