|
>If Target.Cells.Count <> 1 Then
> If Target.MergeCells = False Then
> Exit Sub
> End If
>End If
>の意味がよくわかりません。
>なぜ必要なのでしょうか?
必要なのでしょうか?ってA1:A3までセル結合してあるって事ですから...。
新規シートに下記コードを書いて、
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
MsgBox Target.Value
End Sub
結合セルに何か入力してください。
エラーになります。
また、セルを複数選択して同時入力させて見てください。
エラーになります。
※同時入力
例えば、複数のセルを選択後に「1」入力後、Ctrl + Ent で同時入力できます。
それで、結合セルは、複数セル選択と同じ扱いになるみたいでしたので、複数セルの同時入力は全て拒否するけど結合セルは、判定させるようにしました。
厳密に言うと、もっと単純でよかったのかもしれませんが、後で操作性の悪さに気づいて、これこれこうしたいですと、細かく追加されるのも嫌なので、独断でこれぐらいはあった方が良いかも程度に追加しました。
操作方法の詳細が解りませんけど、更に細かい使い方に対応させようとすると、もっとコードが更に複雑になります。
因みに複数同時入力が出来ないように作ってはありますが、複数のセルを選択したとき入力セルが左、もしくは上にないと反応しません。
結合セルが入力セルであるためにこうなってしまったんですが....。
チビッと修正?版
Private Sub Worksheet_Change(ByVal Target As Range)
'MsgBox Target.Areas.Count
If Target.Column = 1 And Target.Row <= 5 Or _
Target.Column = 4 And Target.Row >= 3 And Target.Row <= 8 Or _
Target.Column = 6 And Target.Row >= 5 And Target.Row <= 6 Then
If Not (Target.Count > 1 And Target.MergeCells = False Or Target.Areas.Count > 1) Then
If Val(Target.Cells(1).Value) >= 1 And Val(Target.Cells(1).Value) <= 4 Or _
Target.Cells(1).Value = "" Then
Exit Sub
End If
End If
MsgBox "NG"
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub
|
|