使用For ... Next循环写入依赖于计数器的值

时间:2016-04-06 15:13:44

标签: excel vba excel-vba

我想写" 1"在E列的指定数量的单元格中,然后" 2"在单元格正下方的相同数量的单元格中,其中包含1,然后是#34; 3"等等,直到在单元格中写入的值I达到用户定义的变量。我我应该为此使用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,我想在单元格中写入1:E41,单元格E42中的2:E81,3单元格中的单元格E82:E121,4中的单元格E122: E161,5在单元格E162中:E201和单元格E202中的6:E241。

我上面的代码是在单元格E1:E242中写入7,即,当它在循环中移动时,它不会改变它的写入值,并且它在E1中开始并在E242中完成,而不是从E2开始并在E241中完成。

我有三个问题:

  1. 我是否认为我应该使用For ... Next循环来做到这一点?如果没有,我应该使用什么?

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

  3. 为什么启动单元格太高而单元格结尾太低?

  4. 感谢您的帮助,如果这是一个非常简单的问题,或者在其他地方得到解答,我会道歉。

3 个答案:

答案 0 :(得分:1)

您希望.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")

答案 1 :(得分:0)

另一种方式如下

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

答案 2 :(得分:0)

a"公式"方法

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单元格中编写,只需要将细胞限制在哪里放入或添加到公式外部&#34; IF&#34;条件来计算写入结果数的行数