• ベストアンサー

VBAの複数条件の検索について

お世話になります。 VBAでEvaluate("SUMPRODUCT((棚卸!$A$1:$A$300=LEFT(C" & i & ",2))*(ISNUMBER(FIND(LEFT(D$1,3),棚卸!$B$1:$B$300)))*(ISNUMBER(FIND(D$2,棚卸!$C$1:$C$300))),棚卸!$F$1:$F$300)")という構文があります。 現在困っていることは、ISNUMBER(FIND(LEFT(D$1,3)のD$1をE$1、F$1、G$1としたいのですが、どのようにすればよいか分りません。 初歩的な質問で申し訳ありませんが、ご教示のほど宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 仮に、   For i = 1 to 10    ' ご提示の記述を含む記述。   Next i  ということなのだとして、  i の増加に伴って   i = 1 -> D$1   i = 2 -> E$1   i = 3 -> F$1   i = 4 -> G$1     .   .     .   .     .   .  のように参照先を遷移させたい ということでしたらば、一例として  ret = Evaluate("SUMPRODUCT((棚卸!$A$1:$A$300=LEFT(C" & i & ",2))*(ISNUMBER(FIND(LEFT(" & Chr(67 + i) & "$1,3),棚卸!$B$1:$B$300)))*(ISNUMBER(FIND(D$2,棚卸!$C$1:$C$300))),棚卸!$F$1:$F$300)") という形で対処してみるのもアリかと思います。 (変数 i のstart値が 1 ではない場合は、  Chr(67 + i) の 67 を 【68 - start値】で求まる値 に 変えて調節します) 他に、 Evaluateメソッドの引数に充てるExcel数式の一部としてOFFSET()関数を用いて OFFSET()関数の引数をVBA側から指定する方法もアルかと思います。 以上、ご質問の趣旨に即しているか疑問はありますが、直接的な回答です。 (ご提示の記述がどのような条件でどんな結果を返すのか確認はしていません) もう少し全体として、ソース、条件、求める結果などのイメージがわかれば、 また違った方法も提示出来るかとは思うのですが。 ちょっと余談になります。、 私は Evaluateメソッド を使うことに(PCスペックの進化に伴い、今は、) 他に類を見ないほど積極的な人(?)なのですが、 反面、Evaluateメソッド のデメリットにも敏感な性質(?)だったりもします。 今回のように例えばメンテナンスにお困りになるようでしたら、 (すぐにいくつかの回答が得られるような)一般的なVBA記法にしておいた方が 何かと安心なのではないでしょうか? 今回のご質問とは別に、将来的に、ご検討されることをおすすめしておきます。 余計なことでしたら、すみません。

dq03
質問者

お礼

cj_mover 様 ご回答有難うございました。 私が行いたいことはcj_mover様のお答えで解決することができました。 確かにcj_mover様の言われている通り、特殊な記述になっているためメンテナンスができないといったこともあり、これからは一般的なVBA記法に基づいたプログラミングを行うよう努力したいと思っております。 本当に有難うございました。

関連するQ&A