2つの条件に合致する数量の合計を出したい為、sumproduct関数を使って計算結果を算出しようと考えています。
sumproduct関数を使った例をwebからいくつも見て下記モジュールを書きましたが、「ans」(sumproduct関数での計算結果部分)でローカルウィンドウに「エラー2015」が表示され結果が出ません。
(試しにセル上に直接、sumproduct関数を使って計算結果が出るか確認したところ、結果表示されます。)
「"」や「&」の付け方に問題があるかと思い、いろいろなパターンで試しましたが同様です。
修正記述がお分かりの方がいらっしゃいましたら、お言葉をいただけると幸いです。
宜しくお願いいたします。
------------------------
Sub culiturate()
Dim str1, str2, str3 As Range
Rows("2:2").Select
cate = Selection.Find(what:="分類", lookat:=xlWhole).Column
SP = Selection.Find(what:="特記", lookat:=xlWhole).Column
kazu = Selection.Find(what:="数量", lookat:=xlWhole).Column
saigo = Cells(Rows.Count, cate).End(xlUp).Row
Set str1 = Range(Cells(3, cate), Cells(saigo, cate))
Set str2 = Range(Cells(3, SP), Cells(saigo, SP))
Set str3 = Range(Cells(3, kazu), Cells(saigo, unit))
ans = Evaluate("sumProduct((" & str1.Address & "=" & "2BB" & ") * (" & str2.Address & "=" & "7RR" & ")," & str3.Address & ")") '←ここでエラー2015になる
End Sub
No.2ベストアンサー
- 回答日時:
>「"」や「&」の付け方に問題があるかと思い、いろいろなパターンで試しましたが同様です。
そのとおりです、「"」の付け方に問題がありました
>ans = Evaluate("sumProduct((" & str1.Address & "=" & "2BB" & ") * (" & str2.Address & "=" & "7RR" & ")," & str3.Address & ")") '←ここでエラー2015になる
の
"sumProduct((" & str1.Address & "=" & "2BB" & ") * (" & str2.Address & "=" & "7RR" & ")," & str3.Address & ")"
の、部分を文字列で出力すると
sumProduct(($A$3:$A$5=2BB) * ($B$3:$B$5=7RR),$C$3:$C$5)
の様になり、エラー個所が見やすいと思います
sumProduct(($A$3:$A$5="2BB") * ($B$3:$B$5="7RR"),$C$3:$C$5)
とするためには
ans = Evaluate("sumProduct((" & str1.Address & "=" & """2BB""" & ") * (" & str2.Address & "=" & """7RR""" & ")," & str3.Address & ")")
と修正してください
他も修正してみたので、試してみて
Sub culiturate()
Dim str1 As String, str2 As String, str3 As String
Dim cate As Integer, SP As Integer, kazu As Integer, unit As Integer
Dim saigo As Long
Dim ans As Variant
cate = Rows("2:2").Find(what:="分類", lookat:=xlWhole).Column
SP = Rows("2:2").Find(what:="特記", lookat:=xlWhole).Column
kazu = Rows("2:2").Find(what:="数量", lookat:=xlWhole).Column
saigo = Cells(Rows.Count, cate).End(xlUp).Row
str1 = Range(Cells(3, cate), Cells(saigo, cate)).Address
str2 = Range(Cells(3, SP), Cells(saigo, SP)).Address
str3 = Range(Cells(3, kazu), Cells(saigo, unit)).Address
ans = Evaluate("sumProduct((" & str1 & "=""2BB"") * (" & str2 & "=""7RR"")," & str3 & ")") '←ここでエラー2015になる
MsgBox ans
End Sub
基本的な処理は変更していないので、これでエラーが出る場合は他に原因があると思います
変数str3をrangeからstringに変更してますが
次のEvaluate式を短くするために行っただけで
深い意味はありません
以上参考まで
hige_082様
回答ありがとうございます。
今回の原因は、範囲の変数の定義を各変数にしなかったことのようです。
(hige_082様が書いて下さったデバッグが起こる箇所の記述は、webで書込みをした記述以外で試したものでした。)
私が記述したもので、文字列にした場合の確認の仕方までふれて下さり、誤りが明確に分かりました。
アドバイスありがとうございます。
感謝します。
No.3
- 回答日時:
こんばんは。
#1で書いた、
「本当は、そのような数式を使わずに、セルひとつずつにループして計算するようにしたほうがよいです」
のコードを出して置きます。多少、スピードには難点がありますが、VBAらしさを求めても良いと思います。書き方によっては、もう少しスピードは上がります。
'-------------------------------------------
Sub Test2()
Dim rng As Range
Dim c As Range
Dim dbSum As Double
Const ARG1 As String = "2BB"
Const ARG2 As String = "7RR"
With ActiveSheet
Set rng = .Range("B3", .Range("B65536"))
End With
Application.ScreenUpdating = False
For Each c In rng
If c.Value = Trim(ARG1) And _
c.Offset(, 2).Value = Trim(ARG2) Then
dbSum = dbSum + c.Offset(, 3).Value
End If
Next c
Application.ScreenUpdating = True
MsgBox dbSum
End Sub
No.1
- 回答日時:
こんばんは。
VBAのプロシージャで、Evaluate の中では、配列も同じですから、SUMで良いのです。ただ、VBAの数式の配列を使うというのは、上級のレベルになりますから、本当は、そのような数式を使わずに、セルひとつずつにループして計算するようにしたほうがよいです。
× Set str3 = Range(Cells(3, kazu), Cells(saigo, unit)) 配列数式なのに、別の範囲を入れたらエラーが発生します。
Set str3 = Range(Cells(3, kazu), Cells(saigo, kazu))
本来は、Set str3 = Cells(3, kazu).Resize(saigo - 2) のように、Resize を利用したほうが確かです。
ans = Evaluate("SUM((" & str1.Address & "=""2BB"")*(" & str2.Address & "=""7RR"")*(" & str3.Address & "))")
Wendy02様
回答ありがとうございます。
誤りご指摘のstr3ですが、変数を誤って書いていました。
(「unit」を「kazu」に書き換えていたのですが、webでの投稿時に書き換えモレをしてしまいました。)
範囲の変数を省略せずに、各変数ごとに「as Range」と定義し、ansの「&」記述箇所を訂正したところ、計算結果が出るようになりました。
Wendy02様が案を出して下さったsum関数を使った式も、大変参考になるので有り難く思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) マクロで特定日より1日前の日を求めたい 6 2022/05/08 09:23
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) 日付を重複させずに数えたい 4 2022/12/04 16:26
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) findメソッドの変数について 6 2023/06/23 08:01
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
VBA Evaluate関数 型が一致しません
Excel(エクセル)
-
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
-
4
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
5
Evaluateを使ってマクロに記述した関数に変数を使う方法
Excel(エクセル)
-
6
VBAでのExecuteExcel4Macroの値取得でエラー
Excel(エクセル)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
ブック名、シート名を他のモジュールからも参照可能にする方法
Access(アクセス)
-
10
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
11
VBAの再計算が反映されない件につきまして
Visual Basic(VBA)
-
12
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
13
全ての変数を一気にリセットする方法はありますか?
PowerPoint(パワーポイント)
-
14
VBA ExecuteExcel4Macro 型が一致しません
Excel(エクセル)
-
15
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
16
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
17
Excelの入力規則で2列表示したい
Excel(エクセル)
-
18
【excelVBA】Findメソッドで検索対象を複数列
Excel(エクセル)
-
19
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
20
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
outlookのメールが固まってしま...
-
【Excel VBA】PDFを作成して,...
-
エクセルでXLOOKUP関数...
-
eXCEL同じブックの中の何枚もシ...
-
英数字のみ全角から半角に変換
-
大学のレポート A4で1枚レポー...
-
マクロ自動コピペ 貼り付ける場...
-
Microsoft Formsの「個人情報や...
-
エクセル:一定間隔で平均値を...
-
Officeを開くたびの「再起動メ...
-
Office 2021 Professional Plus...
-
Excel テーブル内の空白行の削除
-
エクセルで英文字に入れた下線...
-
会社PCのメールが更新されない
-
Outlook で宛先が複数の場合の人数
-
Microsoft入力サインインできま...
-
office365って抵抗感ないですか?
-
teams設定教えて下さい。 ①ビデ...
-
MicrosoftOfficeの1ユーザー2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
Microsoft Officeを2台目のPCに...
-
会社PCのメールが更新されない
-
エクセル マクロVBAについて教...
-
【Excel VBA】PDFを作成して,...
-
outlookのメールが固まってしま...
-
エクセルにて横に月の行があり...
-
エクセルで自動的にQRを表示さ...
-
大学のレポート A4で1枚レポー...
-
Microsoft Formsの「個人情報や...
-
エクセルやパワポファイルの保...
-
エクセルでXLOOKUP関数...
-
マクロ自動コピペ 貼り付ける場...
-
Excelファイルで毎月各支店から...
-
エクセル:一定間隔で平均値を...
-
outlookに追加したアカウントの...
-
office365のファイルで「Office...
-
Microsoftを使用している方
-
teams設定教えて下さい。 ①ビデ...
-
Outlook で宛先が複数の場合の人数
おすすめ情報