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

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

ただいまの
回答率

91.25%

  • VBA

    1180questions

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

  • Excel

    1015questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 57

MitMc

score 6

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

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

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

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

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

Sub tenki()
 Worksheets("元帳").Activate
 lastrow = Worksheets("元帳").Cells(Rows.Count, 1).End(xlUp).Row

 Worksheets("松").Cells.Clear
 Worksheets("竹").Cells.Clear
 Worksheets("梅").Cells.Clear


 j = 2
 For i = 2 To lastrow


 '元帳の日付(1列目)と注文者(2列目)に記入がある場合、各材料シートに転記する

 If Worksheets("元帳").Cells(i, 1) <> "" And Worksheets("元帳").Cells(i, 1) <> "" Then

 '元帳の日付(1列目)と注文者(2列目)に記入がある場合、各材料シートに転記する

 If Worksheets("元帳").Cells(i, 3) = "梅" Then

  '元帳の種類が「梅」の場合に下記数量を各シートに転記

 Worksheets("ごぼう").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("ごぼう").Cells(j, 2) = 1

 Worksheets("ちくわ").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("ちくわ").Cells(j, 2) = 2

 Worksheets("しゅうまい").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("しゅうまい").Cells(j, 2) = 3



 If Worksheets("元帳").Cells(i, 3) = "竹" Then

  '元帳の種類が「竹」の場合に下記数量を各シートに転記

 Worksheets("ごぼう").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("ごぼう").Cells(j, 2) = 2

 Worksheets("ちくわ").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("ちくわ").Cells(j, 2) = 3

 Worksheets("しゅうまい").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("しゅうまい").Cells(j, 2) = 4



  If Worksheets("元帳").Cells(i, 3) = "松" Then

  '元帳の種類が「松」の場合に下記数量を各シートに転記

 Worksheets("ごぼう").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("ごぼう").Cells(j, 2) = 3

 Worksheets("ちくわ").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("ちくわ").Cells(j, 2) = 4

 Worksheets("しゅうまい").Cells(j, 1) = Worksheets("元帳").Cells(i, 1).Value
 Worksheets("しゅうまい").Cells(j, 2) = 5


  j = j + 1

 End If
 End If

 Next
End Sub
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

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

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

インデントの例として

Dim i As long
For i = 1 to 10
    If i < 5 Then
        If i = 2 Then
            処理
        End If 
        If i = 3 Then
            処理
        End If 
        If i = 4 Then
            処理
        End If 
    End If
Next

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/10 19:43

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

    キャンセル

  • 2018/01/10 23:40

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

    キャンセル

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

ただいまの回答率

91.25%

関連した質問

  • 解決済

    VBA A,B,C…列方向へ検索値を移動したい

    お世話になっております。 下記、コードについて教えてください。 Sub 水平変位データ() Dim kensakuA As Range '検索する値 Dim

  • 解決済

    VBA エクセル

    いつもお世話になっていおります。 うまく動かないのでご教示ねがいます。 確認用転記シート↓ 入力用シート↓ 入力シートの内容を、確認用転記シートに転記していきた

  • 解決済

    【内容追記】あるExcelの複数のシートから、特定の値を持つ「行」のみ別のExcelへ抽出したい

    Excelでのマンションの売上管理を行うこととなりました。 今までは1シート1マンションという形で管理しており、全体の数字や予定等を見る際に手間がかかっていました。 これを期に

  • 解決済

    [VBA]マクロをコンパクトに短くまとめたい

    質問内容が大きく変わったので修正です。 C列には都道府県名、I列にはURLが記入されています。 以下のコードは、 「C列に"東京"とあるがI列のURLには"tokyo"と

  • 解決済

    シートのコピー

    vbaにて開いたexcelのシートをマクロ等を実行しているexcelのSheet1にコピーしたいのですが、どのように記述したらよいでしょうか。 Sheet1が既に存在した場合Sh

  • 解決済

    VBAの配列の質問

    VBAの配列で教えてほしい事があります。 同一ブック内に2つのsheetがあります。 ”集計結果”と”一時保管”です。 ”一時保管”はA~D列にデータが入っています。

  • 解決済

    2つのシートの値を隙間なく連結させたい。

    前提・実現したいこと ここに質問したいことを詳細に書いてください ExcelVBAで各シートの値を一つのシートに繋げるシステムを作っています。 発生している問題・エラーメッセー

  • 受付中

    VBAで別のブックのシートに記録する

    前提・実現したいこと 複数の月ごとになっているシートにデータが2列同行数記録されています。その2列のデータを用いてある計算をして、別ブックの月ごとのシートに計算結果を次々に記録して

同じタグがついた質問を見る

  • VBA

    1180questions

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

  • Excel

    1015questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。