使用For …下一个循环来写入依赖于计数器的值

我想在列E中指定数量的单元格中写入“1”,然后在单元格正下方的相同数量的单元格中写入“2”,其中1个单元格,然后是“3”,依此类推,直到值我在单元格中写入达到用户定义的variables。 我我应该使用For … Next循环,但我不确定。 我现在的代码是这样的:

Dim k As Long For k = 0 To observations Range(Cells(2 + (k * patientprofiles), 5), Cells(1 + p * (k + 1), 5)).Value = k + 1 Next 

其中observations值是我想要在单元格中写入的值,而patientprofiles是在移动到下一个值之前要填充的单元格的数量。 例如,如果observations是6, patientprofiles是40,我想在单元格E2中写入1:E41,单元格E42:E81中的2,单元格E82:E121中的3,单元格E122中的4:E161,单元格E162中的5:E201和E202:E241中的6个。

我上面的代码是在单元格E1:E242中写入7,即在循环中不改变它正在写入的值,它在E1中开始并在E242中完成,而不是在E2中开始,在E241中结束。

我有三个问题:

  1. 我正确地认为我应该使用For … Next循环来做到这一点? 如果不是,我应该使用什么?

  2. 如果For … Next是正确的方法,我怎样才能让VBA在每个单元格中写入一个不同的值,而不是在所有的单元格中写入不同的值?

  3. 为什么开始一个单元太高,结束一个单元太低?

感谢您的帮助,我很抱歉,如果这是一个非常简单的问题,或者其他地方已经回答。

您需要将.Resize()方法与循环的Step参数结合使用:

 Sub Foo() Dim k As Long Dim incrementValue As Long Const observations As Long = 6 Const patientProfiles As Long = 40 incrementValue = 1 For k = 2 To observations * patientProfiles Step patientProfiles Cells(k, 5).Resize(40, 1).Value = incrementValue incrementValue = incrementValue + 1 Next End Sub 

Step参数告诉循环逐步增加,例如:

 For i = 1 To 10 '// 1,2,3,4,5,6,7,8,9,10 For i = 1 To 10 Step 2 '// 1,3,5,7,9 For i = 1 To 10 Step 3 '// 1,4,7,10 

Resize()方法将范围对象重新设置为给定的参数:

 Range("A1") '// 1R x 1C Range("A1:B5") '// 5R x 2C Range("A1").Resize(5, 2) '// 5R x 2C (Now "A1:B5") Range("B5").Resize(9, 1) '// 9R x 1C (Now "B5:B13") 

另一种方式如下

 Sub testttt() Dim k As Long observations = 6 patientprofiles = 40 For k = 0 To observations Range("E" & (Range("E" & Rows.Count).End(xlUp).Row + 1), "E" & patientprofiles + (Range("E" & Rows.Count).End(xlUp).Row)).Value = k Next End Sub 

一个“公式”的方法

 Option Explicit Sub main() Dim observations As Long, patientprofiles As Long observations = 6 patientprofiles = 10 ActiveSheet.Range("e2").Resize(observations * patientprofiles).FormulaR1C1 = "=IF(ROWS(R2C:RC)=1,1,IF(COUNTIF(R2C:R[-1]C,R[-1]C)<" & observations & ",R[-1]C,R[-1]C+1))" End Sub 

也可以直接写入excel单元格中,只需注意限制单元格放入或添加到公式中的外部“IF”条件,以统计写入结果数字的行数