| 
    
     |  | ▼隼 さん: 
 こんにちは
 
 アップされたコードを解説しますね。
 (隼さんのエクセルの設定が標準設定のまま、エンターキーの
 後カーソルが下に行くようになっているという前提で)
 
 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
 
 |  |