|
▼隼 さん:
こんにちは
アップされたコードを解説しますね。
(隼さんのエクセルの設定が標準設定のまま、エンターキーの
後カーソルが下に行くようになっているという前提で)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
まず、、これは、「入力されたとき」ではなく「選択されたセルの場所が変わったとき」に発生します。
つまり、A1に入力してエンター。するとカーソルはA2にきますね。この時に動きます。
ですから、この時の Target は A2 になっています。
Target = Range("A1")
このコードは、省略しないで書くと
Target.Value = Range("A1").Value ということなんです。
で、TargetはA2になっていますので、
Range("A2").Value = Range("A1").Value と同じことになります。
これで、A1の値がA2に記入されるわけがおわかりですね?
で、その後
If IsEmpty(Range("B1")) Then
Range("B1") = Target
End If
がありますので、B1が空白の場合、B1にも書かれるというわけです。
SelectionChange のコードをすべて削除して以下にしてください。
Private Sub Worksheet_Change(ByVal Target As Range)
'A1に入力された場合のみ対応
If Not Intersect(Target, Range("A1")) Is Nothing Then
'以降の処理でシートに値が書き込まれたときにChangeイベントが
'発生すると、また、このルーティンに連鎖して入ってくるので
'それを抑止
Application.EnableEvents = False
If IsEmpty(Range("B1").Value) Then Range("B1").Value = Range("A1").Value
'このプロシジャ内でのシートへの書き込みが終わったので
'イベントの発生を再開する。
Application.EnableEvents = True
End If
End Sub
|
|