EXCEL VBA 下面这段代码怎么简化,初学者求教

Fork=2To2000IfCells(k,1)=""ThenForj=1To4Cells(k,j)=Cells(3,j+8)NextExitForEndIfNextFo... For k = 2 To 2000
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
展开
 我来答
boyayes
2021-12-19 · TA获得超过4502个赞
知道大有可为答主
回答量:4231
采纳率:75%
帮助的人:984万
展开全部

如图,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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式