簡體   English   中英

Excel VBA用公式中的字符串求值

[英]Excel VBA Evaluate with String in Formula

我正在嘗試讓VBA在循環中評估公式。 失敗的部分是Evaluate()函數本身,或者至少是我使用的語法。

Worksheets("Sheet2").Range("C2").Offset(All, 0) = _
     Evaluate("((SUMPRODUCT(SUBTOTAL(2,OFFSET(PercentMet!$I$2,ROW(PercentMet!$I$2:$I$27301)-ROW(PercentMet!$H$2),0)),PercentMet!$I$2:$I$27301,PercentMet!$G$2:$G$27301)/SUMPRODUCT(SUBTOTAL(9,OFFSET(PercentMet!$G$2,ROW(PercentMet!$G$2:$G$27301)-ROW(PercentMet!$G$2),0)),--(PercentMet!$I$2:$I$27301<>""NA""))))")

失敗的部分是公式末尾的““ NA””。 使用此公式,每個單元格等於#VALUE!

如果刪除“求值”部分,該公式將按我的要求工作,但是我需要“求值”,因為我要遍歷各種過濾器,並且每個值都是唯一的。

整個代碼如下:

Sub EthFilter()

Application.ScreenUpdating = False

Dim EthName As Range, GradeName As Range, Rate As Variant, Grade As Variant
Dim One As Integer, Zero As Integer, All As Integer

Set EthName = Worksheets("Sheet2").Range("J1")
Set GradeName = Worksheets("Sheet2").Range("K1")

One = 0
All = 0

For Each Raeth In Range("J1:J7")

Zero = 0
Rate = EthName.Offset(One, 0)

    With Worksheets("PercentMet")

        .AutoFilterMode = False

            With .Range("$A$1:$O$27301")
                .AutoFilter Field:=6, Criteria1:=Rate

                For Each Grades In Range("B2:B9")

                    Grade = GradeName.Offset(Zero, 0).Value

                    With Worksheets("PercentMet")

                        With .Range("$A$1:$O$27301")
                            .AutoFilter Field:=5, Criteria1:=Grade
                            Worksheets("Sheet2").Range("C2").Offset(All, 0) = _
                                Evaluate("((SUMPRODUCT(SUBTOTAL(2,OFFSET(PercentMet!$I$2,ROW(PercentMet!$I$2:$I$27301)-ROW(PercentMet!$H$2),0)),PercentMet!$I$2:$I$27301,PercentMet!$G$2:$G$27301)/SUMPRODUCT(SUBTOTAL(9,OFFSET(PercentMet!$G$2,ROW(PercentMet!$G$2:$G$27301)-ROW(PercentMet!$G$2),0)),--(PercentMet!$I$2:$I$27301<>""NA""))))")

                        End With

                    End With

                All = All + 1
                Zero = Zero + 1
                Next Grades

            End With

    End With

One = One + 1

Next Raeth

Application.ScreenUpdating = True

結束子

如果公式的長度是個問題,那么可以代替它(為了清楚起見添加了換行符):

Worksheets("Sheet2").Range("C2").Offset(All, 0) = Evaluate(
"((SUMPRODUCT(SUBTOTAL(2,OFFSET(PercentMet!$I$2,ROW(PercentMet!$I$2:$I$27301)-
ROW(PercentMet!$H$2),0)),PercentMet!$I$2:$I$27301,PercentMet!$G$2:$G$27301)/
SUMPRODUCT(SUBTOTAL(9,OFFSET(PercentMet!$G$2,ROW(PercentMet!$G$2:$G$27301)-
ROW(PercentMet!$G$2),0)),--(PercentMet!$I$2:$I$27301<>""NA""))))")

您可以使用以下形式:

Worksheets("Sheet2").Range("C2").Offset(All, 0) = Worksheets("PercentMet").Evaluate(
"((SUMPRODUCT(SUBTOTAL(2,OFFSET($I$2,ROW($I$2:$I$27301)-
ROW($H$2),0)),$I$2:$I$27301,$G$2:$G$27301)/
SUMPRODUCT(SUBTOTAL(9,OFFSET($G$2,ROW($G$2:$G$27301)-
ROW($G$2),0)),--($I$2:$I$27301<>""NA""))))")

由於所有輸入均來自同一工作表,因此您可以使用該工作表的“ Evaluate方法,並且將在該工作表的上下文中評估公式。

默認的Application.Evaluate版本在執行時使用活動表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM