开发者问题收集

如何在列中的每个单元格中插入具有动态值的函数

2023-06-22
62

我试图在未知行数的“F”列的每个单元格中粘贴并执行一个函数。

该函数为 =QM_Stream_Delta(Value)

其中 Value 是相应行的“A”列的单元格内容。

在此处输入图像描述

这是我目前的 VBA 脚本:

Sub GetDelta()
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
    Dim i As Integer
    myFormula = "=QM_Stream_Delta(Value)"
    For i = 9 To FinalRow
        OptionSymbol = Cells(i, "A")
        Cells(i, "F").Value(myFormula(OptionSymbol)
    Next i
End Sub

但我不确定如何在那里实际获取函数 - 我得到了一个语法错误

Cells(i, "F").Value(myFormula(OptionSymbol)

3个回答

这是 Formula2R1C1 的另一个用例。

Sub GetDelta()
    Dim Target As Range
    
    Set Target = Range("F1").Resize(Cells(Rows.Count, 1).End(xlUp).Row)
    Set Target = Intersect(Target, Target.Offset(8))
    
    Target.Formula2R1C1 = "=@QM_Stream_Delta(RC1)"
End Sub

我们应该养成完全限定引用的习惯。在这里,我将目标范围限定为 Delta 工作表。

Sub GetDelta()
    Dim Target As Range
    
    With ThisWorkbook.Worksheets("Delta")
        Set Target = .Range("F1").Resize(.Cells(Rows.Count, 1).End(xlUp).Row)
        Set Target = Intersect(Target, Target.Offset(8))
    End With
    Target.Formula2R1C1 = "=@QM_Stream_Delta(RC1)"
End Sub
TinMan
2023-06-22

我注意到的一个问题是,您从第 9 行而不是第 1 行开始循环。您的屏幕截图显示您 希望 插入的公式从第 1 行开始。

我更改了您的宏以构建您想要的 “函数” ,然后将其放入单元格中。

函数:

Sub GetDelta()
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
    Dim i As Integer
    Dim myFormula As String
    For i = 1 To FinalRow
        myFormula = "=QM_Stream_Delta(A" & i & ")"
        Cells(i, "F").Formula = myFormula
    Next i
End Sub

我运行它,它用函数填充了 F 列。我不知道 QM_Stream_Delta() 函数是什么,但 VBA 宏将公式放在单元格中:

enter image description here

现在您可以运行 VBA 函数,并在您想要的行、您想要的列中自动添加对 QM_Stream_Delta() 的调用:

A B C D E F
A =QM_Stream_Delta(A1)
B =QM_Stream_Delta(A2)
C =QM_Stream_Delta(A3)

就我个人而言,我不太明白这样做的好处;Excel 已经具备快速填充一列值的能力。( Ctrl + D

Ian Boyd
2023-06-22

在公式中使用对单元格的引用。

Sub GetDelta()
    Const StartRow As Long = 9

    Dim FinalRow As Long
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

    Range("F" & StartRow & ":F" & FinalRow).Formula = "=QM_Stream_Delta(A" & StartRow & ")"
End Sub
BigBen
2023-06-22