ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュのsumproduct について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
会社の経費管理を自動化しようと思って、VBAに初挑戦しています。

ところが、SumProductにひっかかってしまって進みません〜〜(泣)
いくらやっても「#VALLUE」と返ってくるだけ・・・

どなたか、何が間違っているか教えてくださいふらふら

【支払い実績一覧】(シート名)

   E列・・・・H列・・・・・・X列
 (支払月) (稟議書No)  (支払総額)
  2010/04   A-1      100,000
  2010/05   B-1       5,000

【支払いまとめ】(シート名)

   E列     F列    G列    H列・・・
8        2010/04  2010/05  2010/06
9  A-1
10  支払い実績(計算結果)(計算結果)(計算結果)
11  B-1 
12  支払い実績(計算結果)(計算結果)(計算結果)

For i = 6 To 18
Worksheets("支払いまとめ").Cells(i2 + 1, i).Value =_
Evaluate("SumProduct((Worksheets(支払い実績一覧).Range(C3:C20000)_
= Worksheets(支払いまとめ).cells(2," & i & "))_
* (Worksheets(支払い実績一覧).Range(H3:H20000) =_
Worksheets(支払いまとめ).cells(" & i2 & "+1,5))_
, (Worksheets(支払い実績一覧).Range(X3:X20000)))")
Next i

このステートメントを含む大きなステートメントでFor〜Nextがあり、そっちで
i2=9
と変数は定義しています

こんな説明で理解できるでしょうか?

初心者なもんで、なにとぞ解説も簡単によろしくお願いします。

コメント(8)

Excelを開いて確認したわけではないのでどうか分かりませんが
Evaluateを使うなら中の式はセルに書くときと同じようにしたと思います
例えば
Msgbox Evaluate("SUM(Sheet1!A1:A" & i & ")")
>マリ男さん

そぉなんですかぁ〜・・・・・
たらーっ(汗)けっこう考えなおさないとダメですね
>けっこう考えなおさないとダメですね
そんなこともないと思いますが

単純に Worksheets(支払い実績一覧).Range(C3:C20000) となっているものを
支払い実績一覧!C3:C20000 のように書き直していけばよいのではないでしょうか
Cellsで書いてあるものはAddressを取得するように書けば問題ないと思いますよ
>マリ男さん

ありがとうございます。
明日、やってみます!
記述の仕方に問題ありますよね。

単純に
>Worksheets(支払い実績一覧)
→Worksheets("支払い実績一覧")

>Range(H3:H20000)
→Range("H3:H20000")

ですよね。で、それらの式を文字列で作るには
→"Worksheets(" & """支払い実績一覧""" & ")"
→"Range(" & """H3:H20000""" & ")"

という感じになるのでは?


>takecさん

ありがとうございます。

どっかのサイトに、先頭と最後を""で囲んだら、この数式に関しては途中の""はいらないって書いてあったので、抜かしてみました。

そんなにいっぱい""いるんですか・・?
昨日、マリ男さんから教えていただいたことで何とかなりそうです!

ありがとうございましたわーい(嬉しい顔)
もし、「Worksheets("支払い実績一覧").Range("H3:H20000")」
という表記で問題ないのであれば
"Worksheets(""支払い実績一覧"").Range(""H3:H20000"")"
というような記述でも「Worksheets("支払い実績一覧").Range("H3:H20000")」
という文字列を取得できますね

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。