繁体   English   中英

使用VBA中的特定单元格来自动填充多列的公式

[英]Formula Autofill down multiple columns, using specific cells in VBA

特定细胞:K4和K8

具有公式所需数据的列:A(名为devm的值),C(名为slice的值)和D(名为point的值)

带有公式的列:E,F和G(想将这些值命名为angle,devmm和height)

进入E1的公式:=(D1-1)* $ K $ 8

进入F1的公式:= A1 * 1000

进入G1的公式:=(C1-1)* $ K $ 4

^^^这些仅针对第1行

我希望宏将这些公式输入到这些行1单元格中,然后自动填充到“最后一个活动行”(我已经对其进行了排序)。 我的代码的相对部分如下。

K = 1
ender = Tier * increment
last = LastTier * increment
starter = ender - (increment - 1)
If starter = 0 Then
    starter = 1
End If

sheetname1 = "Sheet1"
ActiveSheet.Name = sheetname1
ActiveSheet.Range("K2") = TankHeight
ActiveSheet.Range("K3") = LastTier - 1
ActiveSheet.Range("K4").Formula = "=$K$2/$K$3"
ActiveSheet.Range("K6").Value = 360
ActiveSheet.Range("K7") = increment
ActiveSheet.Range("K8").Formula = "=$K$6/$K$7"

' ********************************************************************
Set Range1 = Range("A1:J65536")
With Range1
    Rows(last + 2).Delete
End With

For K = starter To ender
    Devm = ActiveSheet.Range("A" & K).Value
    Rad = ActiveSheet.Range("B" & K).Value
    slice = ActiveSheet.Range("C" & K).Value
    point = ActiveSheet.Range("D" & K).Value
    ' ***Automation settings for Formulas and Autofill down to last***
    ActiveSheet.Range("E1").Formula = "=(D1-1)*$K$8"
    ActiveSheet.Range("F1").Formula = "=A1*1000"
    ActiveSheet.Range("G1").Formula = "=(C1-1)*$K$4"
    Angle = ActiveSheet.Range("E" & K).Value
    Devmm = ActiveSheet.Range("F" & K).Value
    height = ActiveSheet.Range("G" & K).Value

    K = K + 1

    ActiveSheet.Range("C1").Select

Next

无需循环。 您可以一次性在所有单元格中输入公式

Range("E1:E" & lastRow).Formula = "=(D1 - 1) * $K$8"
Range("F1:F" & lastRow).Formula = "=A1 * 1000"
Range("G1:G" & lastRow).Formula = "=(C1 - 1) * $K$4"

其中lastRow是列中的最后一行。

您可以使用“ 在VBA中查找上次使用的单元格时出错 ”来发现该错误

有几种方法可以解决此问题,但是要在对代码进行最小更改的情况下执行此操作,我将对公式使用R1C1表示法,并对每一行使用对k的引用:

ActiveSheet.Range("E" & k).FormulaR1C1 = "=(RC[-1]-1)*R8C11"
ActiveSheet.Range("F" & k).FormulaR1C1 = "=RC[-5]*1000"
ActiveSheet.Range("G" & k).FormulaR1C1 = "=(RC[-4]-1)*R4C11"

无需查找最后一行。 这是一个更简单的方法:

Selection.AutoFill Destination:= _
Range(Selection, ActiveCell.Offset(0, -1).End(xlDown).Offset(0, 1))

本示例假定您位于右侧的一列。

双偏移量是可能的-谁知道!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM