- ベストアンサー
エクセルマクロでエラーが発生する問題の解決方法
- エクセルのマクロでIf thenを作成していますが、エラーが発生してしまいます。初心者であり、解決法がわかりません。以下の表のC列にGroupのコード数字に対応する製品名を入れるマクロを作成していますが、エラーが出てしまいます。基本的な間違いがあるのだと思いますが、どうすればいいでしょうか。
- エクセルのマクロでIf thenを使用する際にエラーが出てしまいます。初心者であり、解決方法がわかりません。以下の表のC列にGroupのコード数字に対応する製品名を入れるマクロを作成しているのですが、エラーが発生してしまいます。基本的なミスがあると思いますが、どのような対処法があるでしょうか。
- 初心者がエクセルのマクロでIf thenを使用していますが、エラーが発生してしまいます。以下の表のC列にGroupのコード数字に対応する製品名を入れるマクロを作成しているのですが、エラーが出てしまいます。基本的なミスがあるのでしょうが、どのように修正すればよいでしょうか。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
同じところをループしてるようですね 以下のようにしてはいかがでしょう。 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)
> 本当に基本的な事なのでしょうが、 > ”ElseIf .Offset(0, -1).Value = 200 Then”で > 「修正候補:ステートメントの最後」 > と出てしまいます。 当方では出ないのですが… すべてコピーしてご利用されたのですよね。 何か追加しましたか?
- kmetu
- ベストアンサー率41% (562/1346)
途中に空白行がある場合は以下のほうがいいと思います。 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
お礼
kmetuさん 重ねての早速のご回答ありがとうございます。 追加行入れてみようと思うのですが、別のところでコンパイルエラーが出てしまいます。 本当に基本的な事なのでしょうが、 ”ElseIf .Offset(0, -1).Value = 200 Then”で 「修正候補:ステートメントの最後」 と出てしまいます。 申し訳ありませんが、エラーの解決法ご教示お願いできませんでしょうか?
- pentium100
- ベストアンサー率45% (689/1517)
Vlookupを使って関数で処理した方が速いのではないですか? マクロを組む理由が分かりません。 別のシートでも何でもいいので以下の表を作ります。 コード 製品名 100 A 200 B 300 C 上の表がSheet2のA1:B4にあるとします。 B2セルにコード番号が「100」とありますのでこれを検索してみましょう。 C3セルに次の式を入れます =VLOOKUP(B2,Sheet2!A2:B4,2,FALSE) 部品名「A」が返ってきませんか? それともあくまで「VBAで処理するのが目的」でしょうか。
お礼
早速のご回答ありがとうございました。 Vlookupで試してみます。 マクロで組もうと思ったのはコードだけで20程あり、過去のファイル(シート数12)も見る必要があるため、一旦作ってしまえば楽に出来るのではないかと思った為です。
- imogasi
- ベストアンサー率27% (4737/17069)
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文」で照会して勉強してください。
お礼
早速のご回答ありがとうございました。 改行なのですが、「elself .Offset(0, -1).Value = 200 then 」のところで、なぜか"then"がハイライトされ、「コンパイルエラー 修正候補:ステートメントの最後」と出てしまいます。 大変申し訳ありませんが、もし解決方法あるようでしたらご教示お願いします。
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは もしかして、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
お礼
A88No8さん 早速のご回答ありがとうございました。
お礼
kmetuさん 本当にすみません。そしてありがとうございました。 文字のチェックはしたつもりでしたが、なにか違う所があったようです。 全てコピーして、セル位置を直したら動きました。 お手数をおかけし、本当にすみません。 ありがとうございます。 お恥ずかしい話ですが初めてのマクロ作成で、一人ではどうしようもない状態になっていました。 マクロが動いたとき、本当にうれしかったです。 ありがとうございました。