• ベストアンサー

マクロ質問 コンパイルエラー Elseに対応

Elseに対応するIfがありません。 とエラーが表示されます。 これはどこが間違えていてどう変更したらいいのでしょうか? 他にもelseの後に:が勝手についたのもきになります。 回答を宜しくお願いします。 エクセルはマイクロソフト2016のバージョン2309です。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.5

> Range("B5").Valueのように直接それぞれの条件に入力すればゴールドやシルバーなどのランクが入力されるのですがこれはどうしてでしょうか? ランク = "ゴールド" でRange("B5")に入力されないという事ですね。 Dim ランク As Variant ランク = Range("B5").Value ではランクという変数にB5のデータがはいり、ランクはRange("B5")そのものを指すわけではありませんから ランク = "ゴールド" でランクという変数にゴールドというデータを入れただけになります。 ランク = "ゴールド" Range("B5").Value = ランク とすればB5に代入されますが、今回の場合はあまり意味のあるやり方ではないと思います。 答えにある Range("B5").Value = "ゴールド" はセルそのものにデータを代入してます。 で、ランク = "ゴールド"でB5に代入したい場合は Dim ランク As Range Set ランク = Range("B5") とすればランクはB5とみなされますので ランク.Value = "ゴールド" でB5に代入されます。 この設定でランクは「オブジェクト変数」というものになります。 次回質問することがあればコードは画像ではなくコードそのものを質問内に記載してください。 また、「答え」のコードもリンクじゃなくコードを記載してください。

terabayahi1988
質問者

お礼

ありがとうございました。

その他の回答 (4)

  • emsuja
  • ベストアンサー率50% (1085/2162)
回答No.4

ElseIf 命令を使うと VBA の見通しが悪くなりデバッグがしにくくなります If 条件1 Then  設定1 Else  If 条件2 Then   設定2-1  Else   If 条件3 Then    設定3   設定2-2   End If  設定 1-2 Endif の様に ElseIf を使わない形か Select Case   Case 条件1    設定1   Case 条件2    設定2   Case Else    設定3 End Select の様に Select Case のような形に書き換えたほうがデバッグが楽です

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.3

回答No.1は説明不足だったかもなので追加しておきます If 購入額 >= 100000 Then _ ランク = "ゴールド" は Thenの後に「 _」があるので If 購入額 >= 100000 Then ランク = "ゴールド" と同じことになりこの一行でこのIf文が終わり、次のElseに対応するIfがなくなります。

terabayahi1988
質問者

補足

回答ありがとうございます。コンパイルエラーは解決しました。最後のElse分も改行を挟んでコロンが出なくなりました。 今マクロの勉強をしていて下記のファイルの04syo→L13の04-13を編集して問題を解いていたのですが、B5セルに何も入力されません。 答えのようにランクの変数宣言を外して、Range("B5").Valueのように直接それぞれの条件に入力すればゴールドやシルバーなどのランクが入力されるのですがこれはどうしてでしょうか? https://book.impress.co.jp/support/aftercare/download/500523.zip

回答No.2

あれはいつも分かりにくいね。もう回答がつかなかったら、 最後は、 if ランクがゴールドのときの条件 ランクゴールド処理 endif if ランクがシルバーのときの条件 ランクシルバー処理 endif if ランクがレギュラーのときの条件 ランクレギュラー処理 endif だな。条件をよく見て作れば、動作は確実でしょう。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.1

2か所のThenの後の「 _」がいりません。 Thenの後に「 _」を付けて一行にするとその一行でIf文が終わるのでElseに対応するIfがないことになります。

関連するQ&A