「.MargeArea」や「.MargeCells」は関係ないですね。
セル範囲をまとめて判断できません。
1セルずつ判断しないと。
あと、複数セルを選択したときとか、複数セルを選択して削除したときとか、いろいろな状況を考慮する必要があります。
とりあえずサンプルコードを作成してみましたので、参考にしてください。
vba
1Option Explicit
2
3Const cell_D4 As String = "[入力例]10/9"
4
5Private Sub Worksheet_Activate()
6 Call cell_D4_Hint
7End Sub
8
9Private Sub Worksheet_SelectionChange(ByVal Target As Range)
10
11 Call cell_D4_Hint
12
13 Dim r As Range
14 Set r = Intersect(Target, Range("D4:F4"))
15 If Not r Is Nothing Then
16 With ActiveCell
17 If .Value = cell_D4 Then
18 .Value = ""
19 .Font.ColorIndex = 0
20 End If
21 End With
22 End If
23End Sub
24
25Public Sub cell_D4_Hint()
26 Dim c As Range
27 For Each c In Range("D4:F4")
28 If c.Value = "" Then
29 c.Value = cell_D4
30 c.Font.ColorIndex = 16
31 End If
32 Next
33End Sub
これを1シートの中に複数セル、入力例をそれぞれ変えて設置したいのですが、
これを考慮してコードを修正してみました。
シートモジュール
vba
1Option Explicit
2
3Private Sub Worksheet_Activate()
4 Call Set_Placeholder
5End Sub
6
7Private Sub Worksheet_SelectionChange(ByVal Target As Range)
8 Call Set_Placeholder
9End Sub
10
11Private Sub Set_Placeholder(ParamArray aRng_Placeholder() As Variant)
12 Call Rng_Placeholder(Range("D4:F4"), "[入力例]10/9")
13 Call Rng_Placeholder(Range("A4"), "[入力例]山田 太郎")
14 Call Rng_Placeholder(Range("B4"), "[入力例]ヤマダ タロウ")
15End Sub
16
17Private Sub Rng_Placeholder(Rng As Range, Placeholder As String)
18 Application.EnableEvents = False
19 Dim c As Range
20 For Each c In Rng
21 If c.Value = "" Then
22 c.Value = Placeholder
23 c.Font.ColorIndex = 16
24 End If
25 Next
26 If Not Intersect(ActiveCell, Rng) Is Nothing Then
27 With ActiveCell
28 If .Value = Placeholder Then
29 .Value = ""
30 .Font.ColorIndex = 0
31 End If
32 End With
33 End If
34 Application.EnableEvents = True
35End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/10/25 01:54