(VBA) ●Evaluateが通りません (エラー2029 #Name) どのように引数を書けば宜しいでしょうか? >
(VBA) ●Evaluateが通りません (エラー2029 #Name) どのように引数を書けば宜しいでしょうか? > 本件は下記の継続に当たります XL97でSUMIFS形式の代用関数(ユーザー関数)作成中 (未完)... http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10114976755 ------- Evaluate行でエラー2029 (又は2015)が出て通りません(類似ケースを教わった直後情けない(- -); 具体的には下記式で発生 ●C = C - Evaluate(C1 & COMP & C2) 式の意味は SUMIFS97というユーザー関数で E10:=SUMIFS97(E2:E8,C2:C8,"東京*") と入力すれば,C2:C8が "東京"で始まるE2:E8行の合計が 算出されます。画像では \18,000です いわゆるSUMIFSで検索条件にワイルドカードを設定した場合です ワイルドカード判定を LIKE演算子を使ってます ●行で検索条件範囲データC1と検索条件値C2 を 比較演算子COMPで比較し,一致していれば Cに+1する ------- 現在コード ' 'SUMIFS(97対応) 条件数は不定 Public Function SUMIFS97(Z, ParamArray Zn()) As Long Dim U(),IX,JX,C,C1,C2,C3,ZnN Dim COMP As String '比較演算子格納 ReDim U(5) U(0) = "<>": U(1) = ">=": U(2) = "<=": U(3) = ">": U(4) = "<": U(5) = "=" '演算子切出し Dim ZnN: ZnN = Int(UBound(Zn) / 2): ReDim S(ZnN) For JX = 0 To ZnN For Each C In U S(JX) = IIf(InStr(Zn(JX * 2 + 1), C) > 0, C, "") If S(JX) <> "" Then Exit For Next C Next JX 'Zn(JX)(IX):データサイド配列, Zn(JX+1):検索条件データ, S(JX/2) 演算子データ For IX = 1 To Z.Count C = 0 For JX = 0 To UBound(Zn) Step 2 C1 = IIf(IsNumeric(Zn(JX)(IX)), Val(Zn(JX)(IX)), Zn(JX)(IX)) If IsDate(C1) Then C1 = CDate(C1) C1 = """" & C1 & """" ' C2 = Mid(Zn(JX + 1), Len(S(JX / 2)) + 1) C3 = IIf(InStr(C2, "*") > 0, "Like", S(JX / 2)) C2 = IIf(IsNumeric(C2), Val(C2), C2) If IsDate(C2) Then C2 = CDate(C2) C2 = """" & C2 & """" COMP = IIf(C3 = "", "=", C3) C = C - Evaluate(C1 & COMP & C2) '● Next JX SUMIFS97 = SUMIFS97 + IIf(C = (UBound(Zn) + 1) / 2, Z(IX), 0) Next IX End Function ------- 現時点でSUMIFS97は,文字列及び日付で比較演算子6個については 一応OKです ロジックは 検索条件から比較演算子を切出し,次に検索条件値が数値か否かを判断し,数値ならValを、 文字列なら日付変換OKか、Isdate判断,適宜Cdateで変換 さらに条件値に(*)が有れば,演算子をLIKEに切り替える です システムは windows xp sp3 XL97VBA
●緊急 現状コードで S() 定義記入を忘れました Dim S() as String と追加願います
Windows 10・549閲覧・25
ベストアンサー
sunshellsalohaさん 難しくて理解出来てませんが、、、 If COMP = "Like" Then C = C - (C1 Like C2) Else C = C - Evaluate(C1 & COMP & C2) '● End If としたら例題通りの表で 18000 って出ましたよ。
質問者からのお礼コメント
●私も併行的に検討をしましたが, vcx000xcvさま案をbaと思い、採用させて頂きます ありがとうございました
お礼日時:2013/10/20 19:50