【问题标题】:Excel VBA setting cell value to a formulaExcel VBA将单元格值设置为公式
【发布时间】:2013-07-22 12:27:29
【问题描述】:

大家好,我在 excel vba 中有一些硬代码,可以将给定的单元格值 = 设置为公式,并且我有多行代码可以为每个单元格值执行此操作,但会更改公式以查看其下方的特定列.

所以我的问题是,有没有办法在 1 行中对下面的内容进行编码,以便公式会根据其实际所在的列自动更改其查看的列。

Sheets("Standalone Non Clustered").Range("G10").Formula = "=CEILING(Worksheet!$G$9*(1+Worksheet!$G$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("H10").Formula = "=CEILING(Worksheet!$H$9*(1+Worksheet!$H$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("I10").Formula = "=CEILING(Worksheet!$I$9*(1+Worksheet!$I$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("J10").Formula = "=CEILING(Worksheet!$J$9*(1+Worksheet!$J$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("K10").Formula = "=CEILING(Worksheet!$K$9*(1+Worksheet!$K$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("L10").Formula = "=CEILING(Worksheet!$L$9*(1+Worksheet!$L$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("M10").Formula = "=CEILING(Worksheet!$M$9*(1+Worksheet!$M$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("N10").Formula = "=CEILING(Worksheet!$N$9*(1+Worksheet!$N$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("O10").Formula = "=CEILING(Worksheet!$O$9*(1+Worksheet!$O$10+Info!$B$14),5)"
    Sheets("Standalone Non Clustered").Range("P10").Formula = "=CEILING(Worksheet!$P$9*(1+Worksheet!$P$10+Info!$B$14),5)"

查看字母表中每个范围从 G 到 P 的变化情况,并针对 G 到 P 列调整每行中的公式。有没有办法为 Range("G10:P10") 设置一行,并根据电子表格中的实际列让公式自行更改?

编辑:

删除 $ 语法解决了问题,但我想出了另一个问题:

假设我将范围设置为一个变量,我想在该范围变量中添加一行并在上面的公式行中使用该变量。我将如何将该变量增加 1。

        Set shownDatabaseRows = Sheets("Standalone Non Clustered").Range("10:10")
Set hiddenDatabaseRows = Sheets("Standalone Non Clustered").Range("11:108")

hiddenDatabaseRows.EntireRow.Hidden = True
shownDatabaseRows.EntireRow.Hidden = False

    Sheets("Standalone Non Clustered").shownDatabaseRows.Formula = "=CEILING(Worksheet!G$9*(1+Worksheet!G$10+Info!$B$14),5)"


For Each cell In rng

    If cell.Value >= 2048 Then


        shownDatabaseRows = shownDatabaseRows.Count + 1

        shownDatabaseRows.EntireRow.Hidden = False

                Sheets("Standalone Non Clustered").shownDatabaseRows.Formula = "=(CEILING(Worksheet!G$9*(1+Worksheet!G$10+Info!$B$14),5))/2"

      ...

我在公式行中遇到错误,所以我认为我设置 shownDatabaseRows 变量的方式有问题。有什么想法吗?

【问题讨论】:

  • 你最好开始另一个问题。 Count 是只读的,不能更改。我真的不明白你想要什么。向显示的DatabaseRows 添加新行? Set shownDatabaseRows = Union(shownDatabaseRows, cell.EntireRow)? Sheets("Standalone Non Clustered").shownDatabaseRows 毫无意义。
  • 我开始了一个新问题:stackoverflow.com/questions/17789077/…

标签: excel vba range cell formula


【解决方案1】:

Sheets("Standalone Non Clustered").Range("G10:P10").Formula = "=CEILING(Worksheet!R9C[0]*(1+Worksheet!R10C[0]+Info!$B$14),5)"

【讨论】:

  • 删除 $ 工作,但范围变量有问题检查我的编辑
【解决方案2】:

在您的情况下,您始终可以为G10:P10 等范围设置公式

Sheets("Standalone Non Clustered").Range("G10:P10").Formula = "=CEILING(Worksheet!G9*(1+Worksheet!G10+Info!$B$14),5)"

只需从应该动态更改的单元格引用中删除$

您也可以关注Set formula to a range of cells 以获得进一步的说明。

【讨论】:

  • 好的,即使删除 $ 将自动更改公式,即使它设置每一行 = 以 G 作为列的公式?
  • 正如我在Set shownDatabaseRows = Sheets("Standalone Non Clustered").Range("10:10") 中看到的,您没有提到该专栏,所以我不确定您将通过Sheets("Standalone Non Clustered").shownDatabaseRows.Formula = "=CEILING(Worksheet!G$9*(1+Worksheet!G$10+Info!$B$14),5)" 实现什么。
【解决方案3】:

类似......

Sheets("Standalone Non Clustered").Range("G10").Formula = "=CEILING(Worksheet!$G$9*(1+Worksheet!$G$10+Info!$B$14),5)"
Sheets("Standalone Non Clustered").Range("G10:P10").FillRight

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多