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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

850閲覧

VBA 特定の文字の場合に表の数を合計するマクロを作成したいが、実行時エラーが出てしまっており原因が知りたい

cherishlieben

総合スコア17

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2021/12/14 14:31

表に記載してある「東京都」と「大阪府」の数字(都道府県名はB列、数字はC列に記載)を足し合わせ、最後に「東京都〇,大阪府〇」(〇はそれぞれの合計値)と表示するマクロを作成したいのですが、「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです」と出てしまいます。
どこが間違えているのか、教えて頂けますでしょうか?
なお、表にはB列に東京都や大阪府が下に値が追加された場合でもコードを修正しなくてよいように作成したいです。そのため、For文のiの範囲を2から最終行の値までに設定しているのですが、このあたりのループ分の書き方も合っているか教えて頂けますと幸いです。

VBA

1Sub Count() 2 3 Dim ws As Worksheet 4 5 Set ws = Worksheets("集計") 6 7 Dim i As Long 8 9 Dim TokyoTotal As Long 10 11 Dim OsakaTotl As Long 12 13 14 For i = 2 To 1048576 15 16 TokyoTotal = WorksheetFunction.SumIf(ws.Cells(1, 2), "東京", ws.Cells(i, 3)) 17 18 OsakaTotal = WorksheetFunction.SumIf(ws.Cells(1, 2), "大阪", ws.Cells(i, 3)) 19 20 Next i 21 22 23 If ws.Cells(i, 2).Value = "東京" Or ws.Cells(i, 2).Value = "大阪" Then 24 25 '何もしない 26 Else 27 28 MsgBox "正しく入力してください" 29 30 End If 31 32 33 MsgBox "東京" & TokyoTotal & "," & "大阪" & OsakaTotal 34 35 36End Sub 37

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

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

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

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

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

guest

回答1

0

ベストアンサー

SumIf は範囲を指定して集計するものなので、ループする必要はないです。

入力してある最終行の取得法は検索すればすぐ見つかります。

vba

1Sub Count() 2 3 Dim ws As Worksheet 4 Set ws = Worksheets("集計") 5 6 Dim lastRow As Long 7 lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row '最終行の取得 8 9 Dim TokyoTotal As Long 10 Dim OsakaTotal As Long 11 12 With ws.Cells(1, 2).Resize(lastRow, 1) 13 TokyoTotal = WorksheetFunction.SumIf(.Cells, "東京", .Offset(, 1)) 14 OsakaTotal = WorksheetFunction.SumIf(.Cells, "大阪", .Offset(, 1)) 15 End With 16 17 18 MsgBox "東京" & TokyoTotal & "," & "大阪" & OsakaTotal 19 20End Sub

投稿2021/12/14 15:08

hatena19

総合スコア33795

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問