跨动态启动的自动填充列
Posted
技术标签:
【中文标题】跨动态启动的自动填充列【英文标题】:Autofill column across dynamic start 【发布时间】:2017-02-21 12:19:39 【问题描述】:我正在尝试编写代码以将工作表中的最后一列自动填充到右侧 x 次。
我有最后一列的代码:
With ActiveSheet
LC = .Cells(3, .Columns.Count).End(xlToLeft).Column
End With
Columns(LC).Select
如果我指定哪些特定列,还有代码会自动填充
Selection.AutoFill Destination:=Columns("BE:BQ"), Type:=xlFillDefault
我正在努力解决的是如何用链接到原始最后一列 (LC) 的所需代码替换列“BE:BQ”。 理想情况下,我希望它自动填充以添加 10 个新列。你有什么建议吗?
理想情况下,我希望代码循环浏览我工作簿中的所有工作表 - 但这对我来说可能有点高级!
提前非常感谢您。
更新
感谢您推荐的 cmets。我已将代码修改如下。这首先看起来很完美。但是,此后我遇到了两个问题。
问题 1 - 在某些工作表上,当它填充第 3 行中的日期字段时未填充。它只是复制与最后一行中的日期完全相同的日期(即 01/06/2017,但显示为 Jun-17)。我希望这个能一次填满一个月。
问题 2 - 在第 2 行有一个日期,它是上个月的最后一天。这目前是手动输入的,但是当我开发了宏时,我希望将其更改为等于负 1 天以下单元格中的日期的公式。我尝试使用以下公式执行此操作,但完全出错了!
sht.Cells(2, LC).Formula = "=" & Cells(3, LC) & "-1"
任何有关如何解决这两个问题的建议将不胜感激。
【问题讨论】:
一种方法是cells(1,LC).resize(,10).entirecolumn.autofill
,但您真的想填满整个列吗(通常不建议或不需要选择)。
不需要 - 我可以添加最后一行计算并通过这种方式自动填充。假设 LR 是计算的最后一行,如何调整 VBA?
请将您的答案移至实际答案,而不是用答案编辑您的问题,然后在指定的时间过去后将答案标记为已接受。这使其他用户更容易找到即将到来的答案。\
@ScottHoltzman 谢谢并更新了答案,但自从我开始使用代码以来,我发现了一些问题。所以更新了上面的问题。
我在下面提出了一个答案。
【参考方案1】:
Dim LC As Integer
Dim LR As Long
ActiveSheet.Unprotect
With ActiveSheet
LC = .Cells(3, .Columns.Count).End(xlToLeft).Column
LR = .Cells(Rows.Count, LC).End(xlUp).Row
End With
Range(Cells(1, LC), Cells(LR, LC)).Select
Selection.AutoFill Destination:=Range(Cells(1, LC), Cells(LR, LC + 10)),Type:=xlFillDefault
【讨论】:
【参考方案2】:试试这个。我不确定 A2 位,因为代码表明自动填充从第 3 行开始,但如果还应该包含,可以将代码中的 3 替换为 2。
Sub x()
Dim LC As Long, LR As Long, ws As Worksheet
For Each ws In Worksheets
With ws
LC = .Cells(3, .Columns.Count).End(xlToLeft).Column
LR = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(3, LC), .Cells(LR, LC)).AutoFill Destination:=.Range(.Cells(3, LC), .Cells(LR, LC + 10)), Type:=xlFillDefault
.Cells(3, LC).AutoFill Destination:=.Cells(3, LC).Resize(, 10), Type:=xlFillMonths
.Range("A2").Formula = "=A3-1"
End With
Next ws
End Sub
【讨论】:
以上是关于跨动态启动的自动填充列的主要内容,如果未能解决你的问题,请参考以下文章