teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コード追記

2019/10/24 14:19

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  セル範囲をまとめて判断できません。
7
7
  1セルずつ判断しないと。
8
8
 
9
- あと、複数セルを選択したときとか、いろいろな状況を考慮する必要があります。
9
+ あと、複数セルを選択したときとか、複数セルを選択して削除したときとか、いろいろな状況を考慮する必要があります。
10
10
 
11
11
  とりあえずサンプルコードを作成してみましたので、参考にしてください。
12
12
 
@@ -45,4 +45,48 @@
45
45
  End If
46
46
  Next
47
47
  End Sub
48
+ ```
49
+
50
+ ---
51
+ > これを1シートの中に複数セル、入力例をそれぞれ変えて設置したいのですが、
52
+
53
+ これを考慮してコードを修正してみました。
54
+
55
+ シートモジュール
56
+ ```vba
57
+ Option Explicit
58
+
59
+ Private Sub Worksheet_Activate()
60
+ Call Set_Placeholder
61
+ End Sub
62
+
63
+ Private Sub Worksheet_SelectionChange(ByVal Target As Range)
64
+ Call Set_Placeholder
65
+ End Sub
66
+
67
+ Private Sub Set_Placeholder(ParamArray aRng_Placeholder() As Variant)
68
+ Call Rng_Placeholder(Range("D4:F4"), "[入力例]10/9")
69
+ Call Rng_Placeholder(Range("A4"), "[入力例]山田 太郎")
70
+ Call Rng_Placeholder(Range("B4"), "[入力例]ヤマダ タロウ")
71
+ End Sub
72
+
73
+ Private Sub Rng_Placeholder(Rng As Range, Placeholder As String)
74
+ Application.EnableEvents = False
75
+ Dim c As Range
76
+ For Each c In Rng
77
+ If c.Value = "" Then
78
+ c.Value = Placeholder
79
+ c.Font.ColorIndex = 16
80
+ End If
81
+ Next
82
+ If Not Intersect(ActiveCell, Rng) Is Nothing Then
83
+ With ActiveCell
84
+ If .Value = Placeholder Then
85
+ .Value = ""
86
+ .Font.ColorIndex = 0
87
+ End If
88
+ End With
89
+ End If
90
+ Application.EnableEvents = True
91
+ End Sub
48
92
  ```