• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Changeイベントに指示を加えたい)

Changeイベントに指示を加えたい

このQ&Aのポイント
  • 3行目以降のC列のセルに何か入力すると、そのとなりのD列のセルに日付と時間が返され、且つ、3行目以降のE列のセルに 'chcl' とすると、B列のセルに '機能回復' と自動入力される、というシートが欲しい。
  • 上記マクロは、それぞれ単発だと機能するが、一緒に作動させる方法を教えてください。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

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関数を行う意味がないので 単純に"機能回復"だけで良いかと思います。

lark-7
質問者

お礼

回答ありがとうございました。 実はまだ勉強中で、いろいろなマクロを切り貼りしているレベルです。 初心者ですね。 本回答は、まさに自分が欲しかったものでした。 解説もわかりやすく、今後の参考にさせていただきます。 Case文を増やして対応できることも感動です。 本当にありがとうございました。

その他の回答 (2)

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

うまく行かないとはなに? C列でもE列でも値が変化したら、ここ(このイベントプロシ)へ飛んでくるから、はじめに C列の場合 質問に記述のコード E列の場合 >"chcl" とするとTargetがchcl"ならばーー>B列のセルに "機能回復(同行だよね) にIFステートメントで分ければ良いだけでしょう。 ーー C列が変化したか、E列が変化したか判別するコードがわからないわけでなかろう。 c = Target.Column は数字で返るから3か4かを見れば仕舞い。 何を悩んでいるのか。

lark-7
質問者

お礼

回答ありがとうございます。 実はまだ、参考にできるマクロを切り貼りしているレベルでして、初心者同様です。 さらに勉強してゆきますね。 今回は失礼な質問だったかと思いますが、今後も見守ってやって下さい。 ありがとうございます。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

少しコードを整理してみましょう 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 で試してみてください。 シンプルなコードにしましたのでわかりやすいかと。

lark-7
質問者

お礼

回答ありがとうございました。 このようなコードなど思いもつきませんでした。すごいです。 参考にさせていただきます。 シンプルで非常にわかりやすいものでした。 まだ初心者なもので、失礼な質問だったと思いますが、丁寧な回答本当にありがとうございました。

関連するQ&A