Excel:macros拖动公式到列的结尾

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

拖动它的部分不起作用!

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 

由于它是一个Table(VBA ListObject),所以你可以一次填写整个ListColumn:

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

此外,请注意,您可以摆脱macroslogging器生成的Select语句。 例如:

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

可以只是:

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

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

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

你已经接受了这个答案,我现在就停下来。 除了说我喜欢animation!

您的macros的问题可能是这一行:

 Range("Table122[Display]").Select 

您试图自动填充显示列,包括标题行,它可能不喜欢。 试试像这样:

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

对于一个简单的解决scheme,将公式拖动到dynamic行计数:

您也可以使用上一列作为您想要拖动公式的行数的参考。

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)”