Excel:用于将公式向下拖动到列末尾的宏

时间:2014-03-09 16:26:42

标签: excel excel-formula

我正在使用一个宏来创建工作表的副本,然后重命名它,删除一些列并将公式插入单元格然后将其拖下来。

将其拖下来的部分不起作用!

Sub filterData()
'
' filterData Macro
' Filter data
'
' Keyboard Shortcut: Ctrl+m
'
    Sheets("devices").Select
    Sheets("devices").Copy After:=Sheets(1)
    Sheets("devices (2)").Select
    Sheets("devices (2)").Name = "filterData"
    ActiveWorkbook.Save
    Columns("G:J").Select
    Selection.Delete Shift:=xlToLeft
    Columns("H:AA").Select
    Selection.Delete Shift:=xlToLeft
    ActiveWorkbook.Save
    Range("G2").Select
    ActiveCell.FormulaR1C1 = _
        "=LEFT(devices!RC[4],IFERROR(SEARCH("""""""",devices!RC[4]),SEARCH(""-"",devices!RC[4]))-1)"
    ActiveWorkbook.Save
    Range("G2").Select
    Selection.AutoFill Destination:=Range("Table122[Display]")
    Range("Table122[Display]").Select
    End Sub

Image

正如您所看到的,将公式拖到最后一个填充单元格的部分无效!!!

更新

我已经在代码中添加了以下内容,但它仍然不起作用;

lastrow = Range("G2").End(xlUp).Row --new line
Range("G2").Select
ActiveCell.FormulaR1C1 = _
    "=LEFT(devices!RC[4],IFERROR(SEARCH("""""""",devices!RC[4]),SEARCH(""-"",devices!RC[4]))-1)"
Range("G2").Select
Selection.AutoFill Destination:=Range("G2:G" & lastrow) --new line

3 个答案:

答案 0 :(得分:1)

由于它是一个表(VBA ListObject),您可以立即填写整个ListColumn:

ActiveCell.ListObject.ListColumns("Display").DataBodyRange.Formula = _ 
    "=LEFT(devices!RC[4],IFERROR(SEARCH("""""""",devices!RC[4]),SEARCH(""-"",devices!RC[4]))-1)"

另请注意,您可以删除Macro Recorder生成的Select语句。例如:

Columns("G:J").Select
    Selection.Delete Shift:=xlToLeft

可以只是:

Columns("G:J").Delete Shift:=xlToLeft

最后一个提示是完全限定范围,例如:

Worksheets("filterData").Columns("G:J").Delete Shift:=xlToLeft

我已经停止了,因为你已经接受了这个答案。除了说我喜欢动画!

答案 1 :(得分:0)

宏的问题可能就在这一行:

Range("Table122[Display]").Select

您正在尝试自动填充“显示”列,包括可能不喜欢的“标题”行。请尝试这样:

Range("Table122[[#Data],[Display]]").Select

答案 2 :(得分:0)

对于将公式拖动到动态行计数的宏的简单解决方案:

您还可以使用上一列来参考要拖动公式的行数。

Generic:Range(“B2:B”& Range(“A65000”)。End(xlUp).Row).FormulaR1C1 =“{= formulahere}”

因此,在您的情况下,它看起来像:

范围(“G2:G”和范围(“F65000”)。结束(xlUp).Row).FormulaR1C1 =“= LEFT(设备!RC [4],IFERROR(SEARCH(”“”“”“) “”,装置RC [4]),SEARCH(! “” - “”,装置RC [4])) - 1)“