免责声明:这是一个来自初学者的简单问题。请放轻松我。
目前我正在进行一项简单的实验,我在按钮中指定了一个宏。我希望这个宏在A列,第1行到第10行插入数字1.一旦完成,数字将增加到2并填充接下来的10行,依此类推。
公式将一直持续到我在代码中为它设置的范围。如下所示:
Sub fill()
Dim ID
For c = 1 To 34
ID = 1
ActiveWorkbook.Sheets("Sheet1").Cells(c, 1) = ID
ActiveWorkbook.Sheets("Sheet1").Cells(c + 1, 1) = ID
c = c + 1
Next c
End Sub
此时它将整个单元格填充为1.对于将数字增加到2的命令,我想到使用IF语句来增加它。
If c = c * 10 Then
ID = ID + 1
End If
显然这不起作用,我也不知道我应该把它放在整个代码中。这是解决这个问题的正确方法吗?或者我应该使用其他方法吗?
更新问题:
现在我希望代码从第3行开始。我的for语句的含义我改为:
Sub fill()
Dim ID
ID = 1
For c = 3 To 34
ActiveWorkbook.Sheets("Sheet1").Cells(c, 1) = ID
ActiveWorkbook.Sheets("Sheet1").Cells(c + 1, 1) = ID
c = c + 1
If (c Mod 10) = 0 Then
ID = ID + 1
End If
Next c
End Sub
然而,当这样做时,数字1从3开始并继续到10然后继续。含义1仅创建7次。我希望从第3行开始1,从第13行开始重复到12,从第13行开始,依此类推。这个公式可以做到吗?
答案 0 :(得分:0)
使用If语句执行此操作的一种方法是使用Modulo(如果您不知道Modulo的作用,请参阅here)
代码如下所示:
If (c Mod 10) = 0 Then
ID = ID + 1
End If
因此它除以10
,每次剩余值为0(10,20,30等)
它会增加ID
你也可以使用两个for循环,但是你的限制你会搞砸,所以我认为上面的解决方案应该这样做。至于在哪里放置它,在这里:
Sub fill()
Dim ID
ID = 1
For c = 1 To 34
ActiveWorkbook.Sheets("Sheet1").Cells(c, 1) = ID
ActiveWorkbook.Sheets("Sheet1").Cells(c + 1, 1) = ID
c = c + 1
If (c Mod 10) = 0 Then
ID = ID + 1
End If
Next c
End Sub
答案 1 :(得分:0)
你可以尝试一下......
Sub Fill()
Dim ws As Worksheet
Dim i As Long, lr As Long
Set ws = Sheets("Sheet1")
lr = 1
For i = 1 To 34
ws.Range("A" & lr).Resize(10).Value = i
lr = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
Next i
End Sub
修改强>
Sub Fill()
Dim ws As Worksheet
Dim i As Long, ID As Long
Set ws = Sheets("Sheet1")
ID = 1
For i = 1 To 34
ws.Range("A" & i).Value = ID
If i Mod 10 = 0 Then ID = ID + 1
Next i
End Sub
答案 2 :(得分:0)
有一种简单的方法,只是一些数学技巧。
Sub fill()
For c = 1 To 34
ActiveWorkbook.Sheets("Sheet1").Cells(c, 1) = (c - 1) \ 10 + 1
Next c
End Sub
介绍:\运算符将返回两个数字的商。例如11 \ 4 = 2,且12 \ 4 = 3
我删除了行c = c + 1
变量c控制For循环,更改其值会很危险。如果For循环中有c = c + 1
,它将只执行c = 1,3,5,7,...因为Next c
也在c上加1。我猜这不是你想要的。