该vba 多列填充问题,求优化代码和不足

2024-11-30 11:38:11
推荐回答(2个)
回答1:

最好举个例子说明 开始的状态 和 最后的效果
你的意思是:
A列内,A1填充到下一个有数值的单元格为止(即A3),如果不到n行,继续将A4向下填充,一直到n行为止
对吗?
------------
Sub AutoFill3()
Dim iRng As Range, C As Range, r, rS&, rZ&, col%, dR, rF, tmp

' rS = 1 '指定的开始行
rZ = 454 '指定的结束行
Set iRng = Range("G1,H1,I1,J1,K1") '指定填充的列(中间的数字1不要动,改列标就行了)
'--结束----*/>

Set dR = CreateObject("Scripting.Dictionary")
For Each C In iRng.Cells
col = C.Column
dR.RemoveAll
For r = rS To rZ
If Cells(r, col) <> "" Then dR(r) = ""
Next
If dR.Count > 0 Then
dR(rZ + 1) = ""
rF = dR.keys
For r = LBound(rF) To UBound(rF) - 1
tmp = Val(rF(r + 1)) - Val(rF(r))
If tmp > 1 Then
With Cells(Val(rF(r)), col)
.AutoFill .Resize(tmp), xlFillCopy
End With
End If
Next
End If
Next
End Sub
--------
详细Hi我

回答2:

根据你的要求,如下代码即可解决
Sub AutoFill3()
Dim x&, n&,y&
n = Val(InputBox("请输入最大行号(正整数)", "输入", 10)) '指定的到第几行
For x = 1 To n
For y = 1 To 4
If Cells(x, y) = "" Then
Cells(x, y) = Cells(x - 1, y)
End If
Next y
Next x
End Sub

你果你的数据是同一行有数据,还可简化如下
Sub aa()
Dim x&, n&
n = Val(InputBox("请输入最大行号(正整数)", "输入", 10)) '指定的到第几行
For x = 1 To n
If Cells(x, 1) = "" Then
Cells(x - 1, 1).Resize(1, 4).Copy Cells(x, 1)
End If
Next x
End Sub