• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル マクロ If then を作っていますが、エラーがでてしまいます。)

エクセルマクロでエラーが発生する問題の解決方法

このQ&Aのポイント
  • エクセルのマクロでIf thenを作成していますが、エラーが発生してしまいます。初心者であり、解決法がわかりません。以下の表のC列にGroupのコード数字に対応する製品名を入れるマクロを作成していますが、エラーが出てしまいます。基本的な間違いがあるのだと思いますが、どうすればいいでしょうか。
  • エクセルのマクロでIf thenを使用する際にエラーが出てしまいます。初心者であり、解決方法がわかりません。以下の表のC列にGroupのコード数字に対応する製品名を入れるマクロを作成しているのですが、エラーが発生してしまいます。基本的なミスがあると思いますが、どのような対処法があるでしょうか。
  • 初心者がエクセルのマクロでIf thenを使用していますが、エラーが発生してしまいます。以下の表のC列にGroupのコード数字に対応する製品名を入れるマクロを作成しているのですが、エラーが出てしまいます。基本的なミスがあるのでしょうが、どのように修正すればよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

同じところをループしてるようですね 以下のようにしてはいかがでしょう。 Sub Product_Group() With ActiveSheet .Range("C2").Select Do Until ActiveCell.Offset(0, -1).Value = "" With ActiveCell If .Offset(0, -1).Value = 100 Then .Value = "部品A" ElseIf .Offset(0, -1).Value = 200 Then .Value = "部品B" ElseIf .Offset(0, -1).Value = 300 Then .Value = "部品C" End If End With ActiveCell.Offset(1, 0).Activate 'この行を追加 Loop End With End Sub

その他の回答 (5)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.6

> 本当に基本的な事なのでしょうが、 > ”ElseIf .Offset(0, -1).Value = 200 Then”で > 「修正候補:ステートメントの最後」 > と出てしまいます。 当方では出ないのですが… すべてコピーしてご利用されたのですよね。 何か追加しましたか?

nomamaco
質問者

お礼

kmetuさん 本当にすみません。そしてありがとうございました。 文字のチェックはしたつもりでしたが、なにか違う所があったようです。 全てコピーして、セル位置を直したら動きました。 お手数をおかけし、本当にすみません。 ありがとうございます。 お恥ずかしい話ですが初めてのマクロ作成で、一人ではどうしようもない状態になっていました。 マクロが動いたとき、本当にうれしかったです。 ありがとうございました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.5

途中に空白行がある場合は以下のほうがいいと思います。 Sub Product_Group() Dim i As Integer Range("C2").Select For i = 2 To Range("B65536").End(xlUp).Row With ActiveCell If .Offset(0, -1).Value = 100 Then .Value = "部品A" ElseIf .Offset(0, -1).Value = 200 Then .Value = "部品B" ElseIf .Offset(0, -1).Value = 300 Then .Value = "部品C" End If End With ActiveCell.Offset(1, 0).Activate Next i End Sub

nomamaco
質問者

お礼

kmetuさん 重ねての早速のご回答ありがとうございます。 追加行入れてみようと思うのですが、別のところでコンパイルエラーが出てしまいます。 本当に基本的な事なのでしょうが、 ”ElseIf .Offset(0, -1).Value = 200 Then”で 「修正候補:ステートメントの最後」 と出てしまいます。 申し訳ありませんが、エラーの解決法ご教示お願いできませんでしょうか?

  • pentium100
  • ベストアンサー率45% (689/1517)
回答No.3

Vlookupを使って関数で処理した方が速いのではないですか? マクロを組む理由が分かりません。 別のシートでも何でもいいので以下の表を作ります。 コード 製品名 100 A 200 B 300 C 上の表がSheet2のA1:B4にあるとします。 B2セルにコード番号が「100」とありますのでこれを検索してみましょう。 C3セルに次の式を入れます =VLOOKUP(B2,Sheet2!A2:B4,2,FALSE) 部品名「A」が返ってきませんか? それともあくまで「VBAで処理するのが目的」でしょうか。

nomamaco
質問者

お礼

早速のご回答ありがとうございました。 Vlookupで試してみます。 マクロで組もうと思ったのはコードだけで20程あり、過去のファイル(シート数12)も見る必要があるため、一旦作ってしまえば楽に出来るのではないかと思った為です。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

IF文でEndIf までのブロックで、行分け(改行)には守らなければならない決まりが在ると思う。 If .Offset(0, -1).Value = 100 Then .Value = "部品A" elself .Offset(0, -1).Value = 200 then .Value = "部品B" elself .Offset(0, -1).Value = 300 then .Value = "部品C" End If 参考 http://excelvba.pc-users.net/fol6/6_1.html Thenのあとに続けて書けるのは 処理が1行で書ける場合で、該当しない場合は何もしないとき。 この点を修正してエラーが出るようだったら(見当ハズレなので、すみません)補足してください。 === 他にCASE文の利用があり、すっきりしてわかりやすいので、Googleでも「VB CASE文」で照会して勉強してください。

nomamaco
質問者

お礼

早速のご回答ありがとうございました。 改行なのですが、「elself .Offset(0, -1).Value = 200 then 」のところで、なぜか"then"がハイライトされ、「コンパイルエラー 修正候補:ステートメントの最後」と出てしまいます。 大変申し訳ありませんが、もし解決方法あるようでしたらご教示お願いします。

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.1

こんにちは  もしかして、Offsetの座標が全く変わっていないのでは? Sub Product Group()   With ActiveSheet     .Range("C2").Select     Do Until ActiveCell.Offset(0, -1).Value = ""       With ActiveCell         If .Offset(0, -1).Value = 100 Then .Value = "部品A"         elself .Offset(0, -1).Value = 200 then .Value = "部品B"         elself .Offset(0, -1).Value = 300 then .Value = "部品C"       End With     Loop   End With End Sub

nomamaco
質問者

お礼

A88No8さん 早速のご回答ありがとうございました。

関連するQ&A