質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

4972閲覧

VBでsumif関数を使いたい。

kuekueee--ww

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/02/21 16:11

前提・実現したいこと

以下のソースでコンパイルエラーが解決出来ません。ご存知の方がいましたらご教授お願い致します。イメージ説明イメージ説明

発生している問題・エラーメッセージ

コンパイルエラー  構文エラー

該当のソースコード

ソースコード Sub pv_sum() Dim sum1 As Long sum1 = SumIf(データセット1!A2:A11," / "&カテゴリ!B3&" * ",データセット1!B2:B11) End Sub

試したこと

上記コードを実行すると、どうしてもsumif関数の行で止まってしまいます。

補足情報(FW/ツールのバージョンなど)

VBAバージョン7.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/02/21 16:16

タイトルとタグだけ見た時に「ん?」となります。 言語名など決まっている名前はなるべく正確に記載願います。
kuekueee--ww

2019/02/21 16:26

失礼しました。 VBAのコードで、sumif関数のコンパイルエラーが解決できません。 というタイトルのほうが良かったでしょうか?
m.ts10806

2019/02/21 16:28

タグにある内容は含めなくてもつながるのでSumIf関数のことだけを書いてもいいかもしれません(既に回答はしていますが) 質問は編集できますので適宜ご対応ください。
jawa

2019/02/22 02:10

VBとVBAは似て非なるものですので、VBAタグなのにタイトルがVBだと「ん?」となる、ということです。 言語がVBAであることはタグや質問本文でわかることなので、それを含めるかどうかは質問者さんの自由というか、わかりやすければどちらでもいいのですが、「VB」はちょっと違うかな?とういことですね。
guest

回答3

0

VBAはセル関数の書式そのままで使えるわけではありません。

VBAでセル関数を使うには、WorkSheetFunctionオブジェクトのメンバーとして呼ぶ必要がありますし、各関数の引数もセル(範囲)を指定する場合は、セル範囲を示す文字列ではなく、Rangeオブジェクトで渡さなければなりません。

セルの指定は、通常はBook.Sheet.Rangeのように指定した方が良いですが、今回は元のコードにあまり手を入れずに(手抜きとも言う)、セルの指定方法はシート名まで込みにしています。

VBA

1WorksheetFunction.SumIf(Range("データセット1!A2:A11"), " / " & Range("データセット2!B3") & " * ", Range("データセット1!B2:B11"))

投稿2019/02/21 16:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/02/21 22:32

その手がありましたね。 Rangeって便利ですね…
退会済みユーザー

退会済みユーザー

2019/02/22 00:12

いつも勉強させてもらってます。 本当に融通が利いて良いですよね。 実は回答を書いている間に、入れ違いで回答されているのには気がついていたんですが、この使い方をしているのはあまり見たことがないので、これのナレッジ的な意味を兼ねてしれっと重複回答してみました。
m.ts10806

2019/02/22 00:14

こちらこそ勉強になりました。
jawa

2019/02/22 02:34

Excelのシート上で使える関数は、正しくはワークシート関数ですね。 ゆえにVBAから使う場合は`WorkSheetFunction`クラスを利用します。 セル関数というと、ワークシート関数の1つであるCell関数(セルの情報を取得する関数)を先に想像してしまいそうですので。 ※意味は十分伝わっているので、重箱の隅をつつくような指摘で本当にスミマセン。。 >セルの指定は、通常はBook.Sheet.Rangeのように指定した方が良い ちなみに私もこっち派です。さらに変数に格納する派です。 `"ワークシート!"`とか`WorkSheets("ワークシート")`を何度も書くのが面倒なので、私なら ``` Dim shtDS1 As Worksheet Set shtDS1 = Worksheets("データセット1") Dim shtCT As Worksheet Set shtCT = Worksheets("カテゴリ") ``` としたうえで `WorksheetFunction.SumIf(shtDS1.Range("A2:A11"), " / " & shtCT.Range("B3") & " * ", shtDS1.Range("B2:B11"))` と書いて「きれいになった~」と自己満足します。 1回しか使わないものも変数化するので資源の無駄使いとか、かえって面倒とか言われそうですが・・ここらへんはもう好みの問題でもありますね(^-^;
m.ts10806

2019/02/22 02:38

jawaさん > さらに変数に格納する派です。 私の手抜きがバレてしまった・・・
退会済みユーザー

退会済みユーザー

2019/02/22 03:10

あ…他人の用語の誤用に文句ばかり言いまくってたのにこれは恥ずかしい; アンチウィルスソフトをウィルスソフトと呼んだり、シェルスクリプトを書いてるのにシェルを作ったと言うような職場に長いこといると、頭が腐ってきます…。
kuekueee--ww

2019/02/27 16:19

皆様、ありがとうございました。これからVBAに慣れていきたいと思います。また機会がありましたら宜しくお願い致しますm(_ _)m
guest

0

ベストアンサー

SumIfの結果の是非はともかく、範囲の指定の仕方を間違っていると思います。

エラーなくすだけならこんな感じかなと。

vba

1sum1 = WorksheetFunction.SumIf(Worksheets("データセット1").Range("A2:A11"), " / " & Worksheets("カテゴリ").Range("B3") & " * ", Worksheets("データセット1").Range("B2:B11")) 2

WorksheetFunction.SumIfにする必要があります
標準関数であれば予測変換的に候補が出てくるはずなので、それもヒントになるはずです。
(あと実行前に行全体赤字になってませんでしたか?その時点で文法エラーです)

投稿2019/02/21 16:25

編集2019/02/21 16:36
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuekueee--ww

2019/02/27 16:08

ありがとうございました。おかげさまでやりたいことができました。
guest

0

解決済ですが、単純に文字列に"=sumif"を埋め込むやり方もあります。こうすればEXCELワークシート上で関数と認識してくれます。

投稿2019/03/08 03:44

FKM

総合スコア3633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問