Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10576 / 76734 ←次へ | 前へ→

【71704】Re:なぜでしょうか
回答  UO3  - 12/3/31(土) 16:01 -

引用なし
パスワード
   ▼隼 さん:

こんにちは

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

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

4 hits

【71700】なぜでしょうか 12/3/31(土) 11:26 質問
【71704】Re:なぜでしょうか UO3 12/3/31(土) 16:01 回答
【71708】Re:なぜでしょうか 12/4/1(日) 6:29 お礼
【71710】Re:なぜでしょうか UO3 12/4/1(日) 7:39 発言
【71711】Re:なぜでしょうか 12/4/1(日) 8:07 お礼

10576 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free