【问题标题】:Display hard-coded formulas after running macro运行宏后显示硬编码公式
【发布时间】:2015-02-10 04:33:35
【问题描述】:

有没有办法通过单击单元格来显示公式?我在 vba 中编写了多个硬编码公式,运行宏后,我只得到单元格中的值。我想要它,以便在宏运行后,我仍然可以查看单元格中的公式。这些是我目前拥有的公式:

Dim i, lastrow  As Integer
Range("a10").Select
Selection.End(xlDown).Select
lastrow = ActiveCell.Row

For i = 10 To lastrow
Sheets("20140618 Loans").Range("Q" & i) = Application.VLookup(Sheets("20140618 Loans").Range("D" & i), Sheets("20140617 Loans").Range("D:P"), 13, False)

Sheets("20140618 Loans").Range("R" & i) = Sheets("20140618 Loans").Range("P" & i) - Sheets("20140618 Loans").Range("Q" & i)

Sheets("20140618 Loans").Range("S" & i) = Application.VLookup(Sheets("20140618 Loans").Range("D" & i), Sheets("20140617 Loans").Range("D:H"), 5, False)

Sheets("20140618 Loans").Range("T" & i) = Sheets("20140618 Loans").Range("H" & i) - Sheets("20140618 Loans").Range("S" & i)

Sheets("20140618 Loans").Range("U" & i) = Application.VLookup(Sheets("20140618 Loans").Range("D" & i), Sheets("20140617 Loans").Range("D:G"), 4, False)

Sheets("20140618 Loans").Range("V" & i) = Sheets("20140618 Loans").Range("G" & i) - Sheets("20140618 Loans").Range("U" & i)

Sheets("20140618 Loans").Range("W" & i) = WorksheetFunction.SumIf(Sheets("WSO Interest").Range("H:H"), Sheets("20140618 Loans").Range("D" & i), Sheets("WSO Interest").Range("S:S"))

Sheets("20140618 Loans").Range("X" & i) = Application.VLookup(Sheets("20140618 Loans").Range("D" & i), Sheets("20140618 PNL").Range("C:N"), 12, False)

Sheets("20140618 Loans").Range("Y" & i) = Sheets("20140618 Loans").Range("R" & i) - Sheets("20140618 Loans").Range("W" & i) - Sheets("20140618 Loans").Range("T" & i) * (Sheets("20140618 Loans").Range("G" & i) / 100) - Sheets("20140618 Loans").Range("X" & i)

谢谢大家。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您没有在单元格中编写公式。您将值设置为相等运算符右侧的内容。使用具有相等性的范围对象意味着您要设置值,而不是公式。要设置公式,您需要指定 Formula 属性,并且您必须像在 Excel 中一样设置编写公式。

    例如。

    Sheets("20140618 Loans").Range("Q" & i).Formula = _
        "=VLOOKUP('20140618 Loans'!D" & i & ",'20140617 Loans'!D:P, 13, 0)"
    

    另外,这不是您的问题的一部分,但我认为了解With 语句会对您有很大帮助。

    http://msdn.microsoft.com/en-ca/library/wc500chb.aspx

    通过使用 With...End With,您可以在一个 指定对象而不指定对象名称的多个 次。在 With 语句块中,您可以指定 以句点开头的对象,就像 With 语句对象一样 在它之前。

    【讨论】:

    • 非常感谢您的回答!你知道我如何将类似的东西用于 SUMIF 函数吗?我试过Sheets("20140618 Loans").Range("W" & i).Formula = _ "=SUMIF('WSO Interest'!H:H,'20140618 Loans'!D & i &, 'WSO Interest'!S:S)",但这显然是错误的。
    • 当您想使用您在 VBA 中创建的变量时,您需要取消对字符串的引用。所以"...Loans'!D" & i & "..."
    【解决方案2】:

    像这样使用.Formula 方法:

    Sheets("20140618 Loans").Range("Q" & i).Formula = '...your formula here


    注意:您需要添加引号并将其格式化为由工作表而不是 VBA 计算的公式。例如:

    Range("A1").Formula = "=1+2"
    

    【讨论】:

    • 嘿,我刚刚尝试过这样做... sheets("20140618 Loans").range("Q" & i).Formula = 'my formula 但它仍然给了我价值。我可以确认我所做的只是在每个范围后添加.Formula 吗?
    • 不完全是,您还需要格式化每个公式以在单元格中使用。 @alexandreP.levasseur 在他的回答中提供了一个方程式(在 VBA 中)的示例。看看这是否有助于清除它。
    【解决方案3】:

    您必须构建字符串以反映工作公式

    例如 如果您的 A 列值如下

    运行下面的宏

    Sub FillInFormula()
    
    Dim i, lastrow  As Integer
    Range("A1").Select
    Selection.End(xlDown).Select
    lastrow = ActiveCell.Row
    
    For i = 1 To lastrow
    Range("B" & i) = "=sum(A" & i & ":A" & i + 1 & ")"
    Next i
    
    End Sub
    

    类似的东西

    附:使用 ctrl+`(标签上方)一次查看所有公式

    【讨论】:

    • 好吧,这解决了,但我怎么能把它合并到使用 Vlookup 呢?再次感谢。
    • 用 Alexandre P. Levasseur 的建议替换右侧 ("=SUM..)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多