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

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

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




如您所见,将公式向下拖动到最后一个填充的单元格的部分不起作用!!!

更新资料

我也在代码中添加了以下内容,但仍然无法正常工作;

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

最佳答案

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

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


另外,请注意,您可以摆脱由宏记录器生成的Select语句。例如:

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


可以只是:

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


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

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


因为您已经接受了此答案,所以我现在停止。除了说我喜欢动画!

关于excel - Excel:宏,用于将公式向下拖动到列尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22284748/

10-10 18:45