【问题标题】:Excel VBA For Loop writing Formula in cells depending on the number in the loopExcel VBA For Loop根据循环中的数字在单元格中写入公式
【发布时间】:2019-08-01 20:53:39
【问题描述】:

我正在尝试在单元格中编写一个 Forumla(从单元格 A2 到 AI,其中 I 是 For 循环中的数字)。 要写的公式必须对应Cell M2到MI,其中I是For循环中的数字。

我可以自己编写工作表参考:

ws.Cells(1 + I, KolonneForX + 1).Formula = " ='" & ws.Name & "'"

这给了我想要的单元格中的公式='Ark1'(由它自己)。

还有要读取的单元格的正确名称:

ws.Cells(1 + I, KolonneForX + 2).Formula = "=CONCATENATE(""M"",TEXT(" & I & "+1,""0""))"

这给了我想要的单元格中的公式MI(由它自己,与 I 对应的数字)。

但是当我尝试将它们两个放在一起时,我无法让它运行并引用正确的单元格。

这是我一直在尝试运行的代码:

Sub OppretteKnutepunkt()
    Dim ws As Worksheet
    Set ws = Worksheets("Ark1")
    Dim KolonneForX As Integer

    For I = 1 To 5
        ws.Cells(1 + I, KolonneForX + 2).Formula = "='" & ws.Name & "'!CONCATENATE(""M"",TEXT(" & I & "+1,""0""))"
    Next I
End Sub

我希望单元格A2 具有以下公式:

='Ark1'!M2

我希望单元格A3 具有以下公式:

='Ark1'!M3

等等。

有什么建议吗?

【问题讨论】:

    标签: excel vba for-loop concatenation formula


    【解决方案1】:

    你可以在不循环的情况下实现这一点

    Dim I as Long    
    I = 7
    With ws.Range("A2:A" & I)
        .Formula = "='" & .Parent.Name & "'!M2"
    End With
    

    With 是在代码块上使用相同前缀的简写方式。 VBA 编译器会在以 . 开头的所有内容前面加上 With 块声明的任何内容

    上面的等价物是:

    ws.Range("A2:A" & I).Formula = "='" & ws.Range("A2:A" & I).Parent.Name & "'!M2"
    

    【讨论】:

    • 这适用于 A2 到 A7。不过,我对“With”不是很熟悉。是否可以在“A2:AI”范围内做到这一点,我在哪里?
    • With 块基本上是编写相同语法位的简写方式。即前面只有一个点 (.) 的所有内容,VBA 编译器都会为 With 块声明的内容添加前缀。已更新为使用变量作为范围的最后一行
    • 非常感谢@Tom,感谢您花时间帮助和解释。这很完美!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多