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

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

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

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

Q&A

解決済

1回答

3510閲覧

VBA 条件分岐させた転記が上手くいきません。

MitMc

総合スコア34

VBA

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

0グッド

0クリップ

投稿2018/01/10 10:34

条件分岐させた転記が上手くいきません。
If文にIF文を入れ子させるやり方が間違っているのかもしれませんが、修正が出来ません。

・達成したいこと
「元帳」に入力した内容を種類(松、竹、梅)に応じて各材料シートに転記したいです。

ex. 種類が「梅」であれば、「ごぼう」シートの使用数列に1,「ちくわ」シートの使用数列に2,「しゅうまい」シートの使用数列に3を入力。
種類が「竹」であれば、「ごぼう」シートの使用数列に2,「ちくわ」シートの使用数列に3,「しゅうまい」シートの使用数列に4を入力。
種類が「松」であれば、「ごぼう」シートの使用数列に3,「ちくわ」シートの使用数列に4,「しゅうまい」シートの使用数列に5を入力。>

・エラーメッセージ
「Nextに対応するForがありません。」

ファイルリンク
エクセルファイル

VBA

1Sub tenki() 2 Worksheets("元帳").Activate 3 lastrow = Worksheets("元帳").Cells(Rows.Count, 1).End(xlUp).Row 4 5 Worksheets("松").Cells.Clear 6 Worksheets("竹").Cells.Clear 7 Worksheets("梅").Cells.Clear 8 9 10 j = 2 11 For i = 2 To lastrow 12 13 14 '元帳の日付(1列目)と注文者(2列目)に記入がある場合、各材料シートに転記する 15 16 If Worksheets("元帳").Cells(i, 1) <> "" And Worksheets("元帳").Cells(i, 1) <> "" Then 17 18 '元帳の日付(1列目)と注文者(2列目)に記入がある場合、各材料シートに転記する 19 20 If Worksheets("元帳").Cells(i, 3) = "梅" Then 21 22 '元帳の種類が「梅」の場合に下記数量を各シートに転記 23 24 Worksheets("ごぼう").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 25 Worksheets("ごぼう").Cells(j, 2) = 1 26 27 Worksheets("ちくわ").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 28 Worksheets("ちくわ").Cells(j, 2) = 2 29 30 Worksheets("しゅうまい").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 31 Worksheets("しゅうまい").Cells(j, 2) = 3 32 33 34 35 If Worksheets("元帳").Cells(i, 3) = "竹" Then 36 37 '元帳の種類が「竹」の場合に下記数量を各シートに転記 38 39 Worksheets("ごぼう").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 40 Worksheets("ごぼう").Cells(j, 2) = 2 41 42 Worksheets("ちくわ").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 43 Worksheets("ちくわ").Cells(j, 2) = 3 44 45 Worksheets("しゅうまい").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 46 Worksheets("しゅうまい").Cells(j, 2) = 4 47 48 49 50 If Worksheets("元帳").Cells(i, 3) = "松" Then 51 52 '元帳の種類が「松」の場合に下記数量を各シートに転記 53 54 Worksheets("ごぼう").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 55 Worksheets("ごぼう").Cells(j, 2) = 3 56 57 Worksheets("ちくわ").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 58 Worksheets("ちくわ").Cells(j, 2) = 4 59 60 Worksheets("しゅうまい").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value 61 Worksheets("しゅうまい").Cells(j, 2) = 5 62 63 64 j = j + 1 65 66 End If 67 End If 68 69 Next 70End Sub 71

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

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

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

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

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

guest

回答1

0

ベストアンサー

よくあるデバッグケースです。

何が悪いかって、エラーメッセージが間違っている場合が多い。。。

If に対応する End If が過不足ないか、チェックしてください。

その為には、For-Next、If-End If で
インデントを付けるようにすると、
間違いにくくなります
※Tabキー、Shift+Tabでインデントを調整します

インデントの例として

VBA

1Dim i As long 2For i = 1 to 10 3 If i < 5 Then 4 If i = 2 Then 5 処理 6 End If 7 If i = 3 Then 8 処理 9 End If 10 If i = 4 Then 11 処理 12 End If 13 End If 14Next

投稿2018/01/10 10:40

編集2018/01/10 10:44
ExcelVBAer

総合スコア1175

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

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

ExcelVBAer

2018/01/10 10:43

インデントが無いので分かりにくいですが、 恐らく3か所 End If が足りてませんね。 頑張って探してみてください。
MitMc

2018/01/10 14:40

ありがとうございます。 確かにEnd If を加えたら動作しました。 インデントのつけ方について、とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問