- ベストアンサー
Changeイベントに指示を加えたい
- 3行目以降のC列のセルに何か入力すると、そのとなりのD列のセルに日付と時間が返され、且つ、3行目以降のE列のセルに 'chcl' とすると、B列のセルに '機能回復' と自動入力される、というシートが欲しい。
- 上記マクロは、それぞれ単発だと機能するが、一緒に作動させる方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
lark-7さん はじめまして。 整理すると以下のようになります。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case False Case Intersect(Target, Range("C3:C" & Rows.Count)) Is Nothing Cells(Target.Row, "D") = IIf(Target = "", "", Format(Now, "yyyy/m/d h:mm")) Case Intersect(Target, Range("E3:E" & Rows.Count)) Is Nothing Cells(Target.Row, "B") = IIf(Target = "chcl", "機能回復", "") End Select End Sub 【ちょっと解説】 1.Tagetのセルを場合分けしています。 Intersect(Target, Range("C3:C" & Rows.Count)) Is Nothing ※TargetがC3:C65535(EXCEL2003の場合)に入っているか? Intersect(Target, Range("C3:C" & Rows.Count)) Is Nothing ※TargetがE3:E65535(EXCEL2003の場合)に入っているか? 2.入力値のよる2者択一 IIf(Target = "", "", Format(Now, "yyyy/m/d h:mm")) ※Targetの値が""の時は"",そうではない場合は今日の日付 IIf(Target = "chcl", "機能回復", "") ※Targetの値が"chcl"の時は"機能回復",そうではない場合は"" のようにしてます。 今後別の列で判断をしたい場合、Case文を増やすことで対応できるかと思います。 また、Format("機能回復")は特にエラーにはなりませんが、Format関数を行う意味がないので 単純に"機能回復"だけで良いかと思います。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
うまく行かないとはなに? C列でもE列でも値が変化したら、ここ(このイベントプロシ)へ飛んでくるから、はじめに C列の場合 質問に記述のコード E列の場合 >"chcl" とするとTargetがchcl"ならばーー>B列のセルに "機能回復(同行だよね) にIFステートメントで分ければ良いだけでしょう。 ーー C列が変化したか、E列が変化したか判別するコードがわからないわけでなかろう。 c = Target.Column は数字で返るから3か4かを見れば仕舞い。 何を悩んでいるのか。
お礼
回答ありがとうございます。 実はまだ、参考にできるマクロを切り貼りしているレベルでして、初心者同様です。 さらに勉強してゆきますね。 今回は失礼な質問だったかと思いますが、今後も見守ってやって下さい。 ありがとうございます。
- hallo-2007
- ベストアンサー率41% (888/2115)
少しコードを整理してみましょう If c < 3 Or c > 3 Or r < 3 Then End を If c =3 Then 実行したいコード End If If c =5 Then 実行したいコード End If で考えませんか? Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Integer, c As Integer r = Target.Row c = Target.Column If c = 3 Then Range("D" & r).Value = Now End If If c = 5 And Target.Value = "chcl" Then Range("B" & r).Value = "機能回復" End If End Sub で試してみてください。 シンプルなコードにしましたのでわかりやすいかと。
お礼
回答ありがとうございました。 このようなコードなど思いもつきませんでした。すごいです。 参考にさせていただきます。 シンプルで非常にわかりやすいものでした。 まだ初心者なもので、失礼な質問だったと思いますが、丁寧な回答本当にありがとうございました。
お礼
回答ありがとうございました。 実はまだ勉強中で、いろいろなマクロを切り貼りしているレベルです。 初心者ですね。 本回答は、まさに自分が欲しかったものでした。 解説もわかりやすく、今後の参考にさせていただきます。 Case文を増やして対応できることも感動です。 本当にありがとうございました。