【问题标题】:Don't show the formula in a cell不要在单元格中显示公式
【发布时间】:2022-01-21 19:55:48
【问题描述】:

我有以下对我很有效的公式,但我不希望显示完整的公式。我只想显示 result。我该怎么做?

这是我的代码,运行良好:

Dim LastR As Integer

With Worksheets("DashBoard")
    LastR = .Cells(Rows.Count, "C").End(xlUp).Row
    .Range("D9").FormulaArray = "=SUM(IF(StoreData!$A$2:$A$10000=$E$3,IF(YEAR(StoreData!$C$2:$C$10000)=C9,StoreData!$B$2:$B$10000)))"
    .Range("D9").AutoFill Destination:=.Range("D9:D" & LastR)
End With

我制作了这个其他代码,以便它只显示公式的结果,但是当我运行它时,所有单元格都有相同的值。

Dim Hjs As Worksheet
Set Hjs = ActiveSheet

With Hjs.Range("D9:D" & Hjs.Cells(Rows.Count, "C").End(xlUp).Row)
    .FormulaArray = "=SUM(IF(StoreData!$A$2:$A$10000=$E$3,IF(YEAR(StoreData!$C$2:$C$10000)=C9,StoreData!$B$2:$B$10000)))"
    .Value = .Value
End With

我只想显示公式的结果。

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    试试这个。设置数组公式时使用R1C1 引用样式而不是A1 引用样式。让您的生活更轻松。

    Option Explicit
    
    Sub Sample()
        Dim Hjs As Worksheet
        Dim lRow As Long
        
        Set Hjs = ActiveSheet
        
        With Hjs
            lRow = .Range("C" & .Rows.Count).End(xlUp).Row
            
            With .Range("D9:D" & lRow)
                .Formula = "=SUM(IF(StoreData!$A$2:$A$10000=$E$3,IF(YEAR(StoreData!$C$2:$C$10000)=C9,StoreData!$B$2:$B$10000)))"
                .FormulaArray = .FormulaR1C1
                .Value = .Value
            End With
        End With
    End Sub
    

    【讨论】:

    • 好东西.FormulaArray = .FormulaR1C1。不知道。
    【解决方案2】:

    自动填充数组公式 (VBA)

    Option Explicit
    
    Sub AutoFillArrayFormula()
    
        Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
        Dim sLast As Long
        With wb.Worksheets("StoreData")
            sLast = .Cells(.Rows.Count, "A").End(xlUp).Row
        End With
        
        Dim dLast As Long
        Dim dFormula As String
        
        With wb.Worksheets("DashBoard")
            dLast = .Cells(.Rows.Count, "C").End(xlUp).Row
            dFormula = "=SUM(IF(StoreData!A$2:A$" & sLast _
                & "=$E$3,IF(YEAR(StoreData!C$2:C$" & sLast _
                & ")=C9,StoreData!B$2:B$" & sLast & ")))"
            With .Range("D9:D" & dLast)
                .Cells(1).FormulaArray = dFormula
                .Cells(1).AutoFill Destination:=.Offset
                .Value = .Value
            End With
        End With
    
    End Sub
    

    【讨论】:

    • {VBasic2008} --- 出色的解决方案,感谢您的支持,感谢您为我正在寻找的内容添加了一个额外的解决方案,在这种情况下,它在我的代码中变得非常有用。
    • .Cells(1).AutoFill Destination:=.Offset”附近的语法看起来很奇怪。它应该做什么?
    • .Offset (.Offset(0, 0)) 是引用wb.Worksheets("DashBoard").Range("D9:D" & dLast) 的一种方式。类似Range("A1").AutoFill Destination:=Range("A1:A10")
    猜你喜欢
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多