Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7991 / 13644 ツリー ←次へ | 前へ→

【35663】SUMPRODUCT よし 06/3/9(木) 16:50 質問[未読]
【35667】Re:SUMPRODUCT ichinose 06/3/9(木) 18:55 発言[未読]
【35668】Re:SUMPRODUCT kobasan 06/3/9(木) 19:01 発言[未読]

【35663】SUMPRODUCT
質問  よし  - 06/3/9(木) 16:50 -

引用なし
パスワード
   検索値 = Cells(1, 3)
結果 = WorksheetFunction.SumProduct((Columns(1) = 検索値) * 1)
とすると「実行時エラー13の型が一致しません」となるのですが
どうしてでしょうか?

【35667】Re:SUMPRODUCT
発言  ichinose  - 06/3/9(木) 18:55 -

引用なし
パスワード
   ▼よし さん:
こんばんは。

>検索値 = Cells(1, 3)
>結果 = WorksheetFunction.SumProduct((Columns(1) = 検索値) * 1)
>とすると「実行時エラー13の型が一致しません」となるのですが

問題がふたつあります。

一つは・・・、
VBAで

Columns(1) = 検索値

という式が配列として評価されないこと。


二つ目は・・・、

Sumproduct関数は列全体を指定出来ないこと。
セルに

「=Sumproduct((A:A=1)*1)」

と指定してもエラーになりますよ!!

'================================
Sub test()
 dim ans as variant
 Dim rng As Range
 Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
 ans = Evaluate("sumproduct((" & rng.Address & "=" & Cells(1, 3).Value & ")*1)")
 MsgBox ans

End Sub

Evaluateを使用してみてください。

【35668】Re:SUMPRODUCT
発言  kobasan  - 06/3/9(木) 19:01 -

引用なし
パスワード
   今晩は。

すでにichinoseさんが解答されているのと同じようなものなんですが
考えたので、のせてみます。

(Columns(1) = 検索値が配列だからためなんだと思います。

  'WorksheetFunction.SumProduct((Columns(1) = 検索値) * 1)

  MsgBox Application.Evaluate("SUMPRODUCT((A:A=3)*1)") 'エラー
  
  'MsgBox Application.Evaluate("SUMPRODUCT((A1:A65536=3)*1)") 'エラー

A1:A65535のように65536より小さい数値を指定しないとダメみたいです。

以下だとOKです。

  'MsgBox Application.Evaluate("SUMPRODUCT((A1:A65535=3)*1)") 'OK
 
  'MsgBox Application.Evaluate("SUMPRODUCT((A1:A9=3)*1)")   'OK


【34570】Re:Sumproductについて

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=34570;id=excel
も参考にしてください。

7991 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free