Selection.AutoFill Destination未按要求工作



我有以下代码首先,它将逐个插入两列然后计算C列中的行数然后复制ActiveCell.FormulaR1C1="=R[-5]C[18]";到B7到行计数类似地,Copy ActiveCell.FormulaR1C1="=R[-5]C[13]";到A7到行计数但当活动行只有01(一(时,我会出错,如果它不止一个,那么它可以正常工作。我正在为此而挣扎。如果有人能帮忙的话

Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Dim LastRow As Long
LastRow = Range("C" & Rows.Count).End(xlUp).Row
Range("B7").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-5]C[18]"
Range("B7").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("B7:B" & LastRow), Type:=xlFillCopy
Range("B7:B" & LastRow).Select
Range("A7").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-5]C[13]"
Range("A7").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("A7:A" & LastRow), Type:=xlFillCopy
Range("A7:A" & LastRow).Select

结束问题:

不使用AutoFill,也可以使用Range("B7:B" & LastRow).Value = Range("B7").Value,对于列A也是如此。

或者只在两列的一行中:Range("A7:B" & LastRow).Value = Range("A7:B7").Value

首先,Selection对象不一定是最佳选项。可以使用Range("A:B").Insert xlShiftToRight插入列。

接下来,您可以一次为整个范围设置公式,而不是复制和粘贴。由于公式仅从第7行开始,因此需要偏移并调整由C列(插入后(中的内容定义的范围。

Resize方法需要将行数减少6,因为公式直到第7:.Resize(LastRow - 6)行才开始。由于原始范围只有一列宽,Resize方法中的列计数可以省略(否则,它将是.Resize(LastRow - 6, 1)(。

Offset方法需要向下移动6行,向左移动1(或2(列:.Offset(6,-1).Offset(6,-2)(。

然后,您的代码将大大简化为:

Dim LastRow As Long
ActiveSheet.Range("A:B").Insert xlShiftToRight
LastRow = Range("C" & Rows.Count).End(xlUp).Row
With Range("C:C").Resize(LastRow-6) 
.Offset(6,-1).FormulaR1C1="=R[-5]C[18]"
.Offset(6,-2).FormulaR1C1="=R[-5]C[13]"
End With

当然,更简单的方法是将工作表转换为表(VBA中的"ListObject"(,并让Excel来完成繁重的工作。但这远远超出了你的要求。

最新更新