Excel VBA填充到上一列中使用的最后一行

时间:2017-03-09 16:30:52

标签: excel vba

我整个下午都在寻找答案。

代码可以按照我的意愿工作(经过大量的时间研究,我对此非常绿色),除了我想填写前一列中使用的最后一行而不是整张表。

我无法准确引用上一栏,因为它并不总是在同一个地方,因此我为什么要查找它并根据查找结果做所有事情。

我找到的所有答案都使用了Range命令,但我无法找到如何使用我的colNum变量。

Sub cndob()
'
' cndob change dob
'
' find column number and select
'
    Dim colNum As Integer
    colNum = WorksheetFunction.Match("BDate", Range("1:1"), 0)
    Columns(colNum + 1).Select

' insert column right

    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

' formula fill down
    Cells(2, colNum + 1).Select
    ActiveCell.FormulaR1C1 = "=RIGHT(RC[-1],2)&CHAR(47)&MID(RC[-1],5,2)&CHAR(47)&LEFT(RC[-1],4)"
    Range(ActiveCell, ActiveCell.End(xlDown)).FillDown

请帮忙

2 个答案:

答案 0 :(得分:1)

Range.Offset属性是完美的解决方案。将您的最后一行代码更改为:

S

Range(ActiveCell, ActiveCell.Offset(0, -1).End(xlDown)).FillDown 的第一个参数是行偏移量。我们不想改变。但是,列偏移量设置为活动列左侧的一个。

答案 1 :(得分:0)

我不确定你到底想做什么,但从我的理解,这样的事情将会起到作用:

Option Explicit

Sub TestMe()

    Dim colNum      As Long
    Dim sht         As Worksheet
    Dim rng         As Range

    Set sht = ActiveSheet

    colNum = WorksheetFunction.Match("BDate", Range("1:1"), 0)

    Set rng = sht.Cells(1, colNum)

    rng.Offset(0, 1).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    rng.Offset(0, 1).FormulaR1C1 = "=1+1"

    Range(rng, rng.End(xlDown)).Offset(0, 1).FillDown

End Sub

它做什么?它在第一行查找单元格“Bdate”,如果找到它,则向右插入列(如果没有,则表示错误:))。在此之后,它会为每个单元格插入一个公式1+1,该公式位于右侧。无论如何,这样的事情:

enter image description here