- ベストアンサー
エクセルの条件分岐についての質問
- エクセルの条件分岐について教えてください。エクセル2003を使用しています。
- A1セルが「空白」「ON」というプルダウンリストになっていて、「ON」を選択するとB1セルに「はじまり」、C1セルに「おわり」と表示したいと考えています。
- 現在、コードを書いているのですが動作しないため、困っています。どなたかご教授いただけると幸いです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 マクロでなければダメなのでしょうか。数式(関数)で出来ますよ。 B1に =IF(A1="ON","はじまり","") C1に =IF(A1="ON","おわり","") と入れればいいです。 マクロの方ですが、このようなことをするときはシートのChangeイベントを使うのがいいと思います。 該当のシートのシートタブを右クリックしてコードの表示を選びます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then If Range("A1").Value = "OK" Then Range("B1").Value = "はじまり" Range("C1").Value = "おわり" Else Range("B1:C1").ClearContents End If End If End Sub と入れます。これでOKを選べば即座に表示され、空白にすれば消えます。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
#3の回答者です。初歩的なことですが、Target セル以外に値が入るなら、イベントが働くのですから、そのままにしたら、A1以外に書き込みされた時に、再び、イベントが働いてしまいます。 今回は、最大2回ですから、大きな問題にはなりませんが、場合によっては、数万回を短い間に繰り返し、Versionやその内容によって無限ループを起します。これは初歩的ですが、Change 型のイベントでは、Target セル以外に書き込みする時には、Event は、オフにしておく習慣をつけたほうがよいです。 Application.EnableEvents = False '実行マクロ Application.EnableEvents = True とします。 なお、ドロップダウンでどのような値が設定されているのか分からないのですから、Trim で囲います。Target は、A1 ですが、Target が、A1と決まったら、Target という変数に置き直しします。 大文字小文字の区別をつけないなら、 If UCase(Trim(Target.Value)) = "ON" Then このようにします。いきなりだと難しいと思いますが、これらが、間違いやすいポイントです。
お礼
親切・丁寧に教えて頂きありがとうございます。 大変勉強になります。 他の要素や使用環境についても大変勉強になりました。 本当にありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
プルダウンリストに、イベントを取り付けるということですね。 イベントとは、直接命令しなくても、自動的に、Excelが反応することです。 以下のようにします。Trim(Target.Value) と、Trim 関数で囲っているのは、プルダウンリストで、どのように設定しているか分からないからです。 「右クリック→コードの表示」で、貼り付けてください。 すでに同じような回答が出ていますが、比べてみてください。 ここのコマンド(メソッド)やプロパティは、ヘルプで調べてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Application.EnableEvents = False If Trim(Target.Value) = "ON" Then Range("B1").Value = "はじまり" Range("C1").Value = "おわり" Else Range("B1:C1").ClearContents End If Application.EnableEvents = True End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
atsuya192さん、おはようございます。 > これをシート部分を「右クリック→コードの表示」で書いてみたのですが動きませんでした。 ということはシートモジュールに書いたということですね? つまり、A1セルのチェンジイベントとして実行させたいのですね? ならば、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "A1" Then If Range("A1").Value = "ON" Then Range("B1").Value = "はじまり" Range("C1").Value = "おわり" Else Range("B1:C1").ClearContents End If End If End Sub でどうでしょう? これでA1がONならばB1C1にご希望の文字が入り、そうでなければ消去されます。
お礼
回答ありがとうございます。 そうです、シートモジュールに書きました。 こちらも希望通りの動作ができました! 教えてくださってありがとうございます。
- parts
- ベストアンサー率62% (6366/10151)
これはそれほど長いスクリプトではないので、良いのですが、一般に質問するときには次の内容を記載しましょう。 マクロを実行するとどういった結果になるのでしょうか? エラーメッセージの内容はどうなりますか? これが、一番重要です。 まず、読む限りで分かるミスは、 ifで始まっていながら、Thenによる条件実行宣言文がないことです。 即ち、書き始めにIfがある場合、Thenを入れなければ、 IF文は成立しません。この場合、文字列ON(ONが文字列ならダブルクォーテーション""で囲みます。それがなければ、ONは関数として機能しますので、マクロをわかりやすくするにはDimによる宣言タイプをし、関数に役割を与える必要があります。)を検出したら、Then以下を実行するというルールを作るわけですから、 Sub 条件分岐 () if Range("A1").value = "ON" Then Range("B1").value = "はじまり" Range("C1").value = "おわり" End if End Sub とすれば意図するようには実行できるようになるはずです。 足りないのは、"ON"の""と Thenです。 尚、これはご存じと思いますが念のために、ONをただ入れただけでは実行できませんよ。 必ず、ツール→マクロ→マクロから[条件分岐]を実行します。 まあ、基礎さえ理解し、エラーがどの段階で出るかを知れば、それほど難しくありません。 マクロをVBエディタで書いた後に、デバッグモードでステップ実行し、どこで引っかかるかを調べていけば、原因箇所は分かるようになるでしょう。
お礼
回答ありがとうございます。 そうですね、どんな結果になったかを書くことが大事ですね。 マクロを実行した時の反応は見られませんでした。 教えて頂いた方法で希望通りの動きが見られました。 ありがとうございます!
お礼
回答ありがとうございます。 IF関数でできるのですね! マクロで行う場合まで教えて頂き大変勉強になりました! ありがとうございます!