EXCEL VBA 下面这段代码怎么简化,初学者求教
If Cells(k, 1) = "" Then
For j = 1 To 4
Cells(k, j) = Cells(3, j + 8)
Next
Exit For
End If
Next
For k = 2 To 2000
If Cells(k, 1) = "" Then
For j = 1 To 4
Cells(k, j) = Cells(4, j + 8)
Next
Exit For
End If
Next
For k = 2 To 2000
If Cells(k, 1) = "" Then
For j = 1 To 4
Cells(k, j) = Cells(5, j + 8)
Next
Exit For
End If
Next
For k = 2 To 2000
If Cells(k, 1) = "" Then
For j = 1 To 4
Cells(k, j) = Cells(6, j + 8)
Next
Exit For
End If
Next 展开
如图,k=3代表I列数据开始的行号,
rng为单元格变量,
For Each 循环会让rng每次代表A3:A2000中的一个单元格,
如果rng单元格的值为空值时,则提取数值过去,并同时k进行累加1
假如k始终没达到>6的条件,则会一直遍历到A2000为止,
假如k达到>6的条件时,则会直接跳出for,提前结束循环。
代码如下:
Sub 宏宏()
Dim rng As Range, k& '声明rng为单元格对象,k为loog型
k = 3 '给k赋一个初值
For Each rng In Range("A3:A2000") '遍历该区域每个单元格
If rng = "" Then '如果rng单元格的值为空值
rng.Resize(1, 4) = Range("I" & k).Resize(1, 4).Value
'rng重选1行4列 = Range("I" & k)重选1行4列的值
k = k + 1 '累加
If k > 6 Then Exit For '满足此条件则跳出for
End If
Next
MsgBox "处理完毕", 64 '弹出提醒对话框
End Sub
如果循环的3-6行的9-12列和填充的不在同一个工作表,怎么写呢,谢谢!
在这两处单元格(或区域)的前面指明工作表,即可。
工作表名有三种写法:
打开工作簿打开后,下左下方咱们可以重命名的,是工作表的小名。
工作表的大名是一成不变的,在VBA编辑器的左侧栏中可以看到。
在VBA编辑器的左侧栏中,每张表显示两个名字,没打括号的是大名,打了括号的是小名,就是你可以自由重命名的那个名字。
工作表的大名的写法:
Sheet1.Range("A1")
工作表的小名的写法:
Sheets("明细表").Range("A1")
这里Sheets是带s的,表示工作表的集合中,名字叫"明细表"的那张表,括号中的小名必须用文本表示。
另外,工作表名还有第三种写法,即顺序名:
Sheets(1).Range("A1")
这句表示工作表的集合中,顺序排在第1张的表。
Sheets(Sheets.Cuont).Range("A1")
这句表示工作表的集合中,顺序排在最后1张的表。
Sheets.Cuont是工作表集合中的表的数量,表示一个数字。
括号中必须是一个数字,或者是一个表示数字的变量。
例如:在每一张表的A1写入888
for i = 1 to Sheets.Cuont
Sheets(i).Range("A1")=888
Next