• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルにてダブルクッリクしたときの動作)

【Excel】特定のセルをダブルクリックした時に日付を表示する方法

このQ&Aのポイント
  • エクセルにて特定のセルをダブルクリックすると、そのセルに日付が表示されるマクロを作成したいと思っています。
  • 現在のマクロはA1セルを対象にしており、ダブルクリックした際に西暦が入力されるようになっています。
  • 他のセルでも同様の方法で月や日にちを入力させたい場合、マクロをどのように書き換えればよいでしょうか?

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Application.Intersect(Target, Range("A1:C1")) Is Nothing Then Exit Sub With Target Select Case .Address Case "$A$1" .Value = Year(Date) Case "$B$1" .Value = Month(Date) Case Else .Value = Day(Date) End Select End With Cancel = True End Sub こんな感じではどうでしょうか?m(_ _)m

youichi___
質問者

お礼

返答ありがとうございます。 教えていただいた物を参考にtsubuyukiさんの物と組み合わせて作ってみたら上手くいきました。 ネットと参考書を片手に作っているのですが、思った通りの例やコードの組み合わせが見つからなく困っていました。 ありがとうございました。

その他の回答 (5)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.6

こんにちは。お邪魔します。 イベントプロシージャのツボは抜けることにあり、  どんな場合に処理するか、ではなくて、  不要ならプロシージャを抜ける、 という思想で書かれたのが If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub ご提示のコードですが、その点では正しい考え方と思います。 直接的な回答としては以下 ' ============================== Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Application.Intersect(Target, Range("A1:C1")) Is Nothing Then Exit Sub   Cancel = True   Select Case Target.Column   Case 1: Target.Value = Year(Date)   Case 2: Target.Value = Month(Date)   Case 3: Target.Value = Day(Date)   End Select End Sub ' ============================== のようになります。 一方で、イベントプロシージャは 使用頻度の高いユーザーインターフェイスですので ユーザーにとっての扱い易さに重点をおいて書かれるべき、 という考えで、  できるだけ、軽い処理を選ぶ   少なくとも無駄なことはしない といことを、私がVBAを覚えた頃には教えてくれる人がいました。 条件分岐で比較などに使う値についての優先順として  数値 > 文字列値 > オブジェクト とうのがあります。 また、オブジェクトから値を取得する方法についても  備わったプロパティ > 呼び出し後に計算で求めるプロパティ   > 関数の戻り値 > メソッドの戻り値 といのがあります。 この辺の理屈は、今はどうでもいいのですが、  Worksheet_BeforeDoubleClick イベント での条件分岐の基本形、ということですと以下 ' ============================== Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Target.Value <> "" Then Exit Sub   If Target.Row > 1 Then Exit Sub   If Target.Column > 3 Then Exit Sub   Cancel = True   Select Case Target.Column   Case 1: Target.Value = Year(Date)   Case 2: Target.Value = Month(Date)   Case 3: Target.Value = Day(Date)   End Select End Sub ' ============================== のようになります。 ダブルクリックされたセルについて  何か値が設定されていれば、抜ける  1行めでなければ(行位置が1より大きい)、抜ける  3列めより右ならば(列位置が3より大きい)、抜ける  ダブルクリック本来の編集モードへの切替をキャンセル  列位置が  3、なら、年 を値設定  2、なら、月 を値設定  1、なら、日 を値設定 という内容になります。 これが私が教わった(今は教えている)基本形です。 最近は、教えるのも教わるのもラクな方がいいということで (多くは誌面の限られたスペースの都合で) .Address プロパティ や Intersect メソッド を用いる方法が多く紹介されますが、 一応、サンプルを紹介しておいた方がいいかな、と思いました。 /// 話は変わって、 実際に手を動かす時のことを想像して仕様を考えてみたのですが、  A1をダブルクリック  B1をダブルクリック  C1をダブルクリック って3回操作しないといけないのでしょうか?  A1:C3の範囲(の内のどれか)をダブルクリック で、A1:C3に一気に年、月、日を設定、 という例を挙げておきます。 ' ============================== Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Target.Value <> "" Then Exit Sub   If Target.Row > 1 Then Exit Sub   If Target.Column > 3 Then Exit Sub   Cancel = True   Target.EntireRow.Resize(, 3).Value = Array(Year(Date), Month(Date), Day(Date)) End Sub ' ============================== 以上です。       ///Re:.Valueプロパティを省略しているおつもりなのでしょうか

youichi___
質問者

お礼

ありがとうございます。 仕事で作らなければならなくなったのですが、今までVBAなど縁遠くてなかなか上手くいきません(;´Д`A ネットと参考書片手に苦戦しております。 ユーザーインターフェイスは大切ですね。凝った作りにすると思いがけない事されてエラーでますし。 色々と参考になりました、今後使わせていただきます。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.5

何度もすいません。 よく見ると、私のはあまり良くないですね。 ダブルクリックする順番が違う(A1・B1空白でC1をダブルクリックなど)と 何だかよくわからない状態になっちゃいますね。 で、無理矢理やるなら Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target <> "" Then Exit Sub Select Case Target.Address     Case Range("A1").Address         Target = Year(Now())     Case Range("B1").Address         Target = Month(Now())     Case Range("C1").Address         Target = Day(Now()) End Select End Sub こうですね。 コレを見やすくまとめて書かれているのが#2さんのコードです。 思いつきで書いて検証もせずに出すとダメですね(汗)。 大変失礼しました。

youichi___
質問者

お礼

返答ありがとうございます。 試しに使ってみたのですがエラーが出てしまいました。間違って入力したかもですが。。。 でも、tom04さんの物と組み合わせて作ってみたら上手くいきました。 なかなか自分では思いつけないので大変参考になりました。ありがとうございます。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target <> "" Then Exit Sub Select Case Target     Case Range("A1")         Target = Year(Now())     Case Range("B1")         Target = Month(Now())     Case Range("C1")         Target = Day(Now()) End Select End Sub 失礼。一応補足です。 Ifの行を増やすと、ダブルクリックしたセルが空白じゃなかったら (何かが入力されている状態なら)何もせずに終わります。 もちろん、NowじゃなくてDateでも問題ないです。 ここは好みです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! 投稿後に気づきました。 No.1さんとほぼ同じ内容になっていました。 どうも失礼しました。m(_ _)m

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

例えば、 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Select Case Target     Case Range("A1")         Target = Year(Now())     Case Range("B1")         Target = Month(Now())     Case Range("C1")         Target = Day(Now()) End Select End Sub こんな感じでケース分けするとちょっとスッキリでしょうか。 年だけ・月だけ・日だけを別々に持ってきたいなら、Year・Month・Dayが便利ですよ。

関連するQ&A