Excel VBA質問箱 IV

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

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


7888 / 13644 ツリー ←次へ | 前へ→

【36255】SelectionChangeイベントで直前のセル情報の取得 トナカイ 06/3/26(日) 20:27 質問[未読]
【36256】Re:SelectionChangeイベントで直前のセル情... Kein 06/3/26(日) 21:01 回答[未読]
【36259】Re:SelectionChangeイベントで直前のセル情... トナカイ 06/3/27(月) 1:18 お礼[未読]

【36255】SelectionChangeイベントで直前のセル情...
質問  トナカイ  - 06/3/26(日) 20:27 -

引用なし
パスワード
   Worksheet_SelectionChange(ByVal Target As Range)
でセルのフォーカスが移動したら計算することしています。
けっこう重い計算をしているのでセルの移動が遅くて困っています。
再計算をする必要の無いセルの移動の時には、無駄な計算をしないようにしたいです。
Targetは移動後のセルになると思いますが、移動前のセルの情報をどのように取得すればいいでしょうか?

B5からBX31のセル範囲で、選択されたセルの行が変わったら計算をしたいと思っています。
現在は、SelectionChangeでTargetがB5:BX31の範囲内なら計算という方法をとっています。
これを移動前と移動後で行が変わっていたら計算という方法に変更したいのですが、移動前のセルをどのように取得していいかが分かりません。

【36256】Re:SelectionChangeイベントで直前のセル...
回答  Kein  - 06/3/26(日) 21:01 -

引用なし
パスワード
   直前から4つ前までに選択していたセルは、PreviousSelectionsプロパティを使えば
取得できますが、もっと分かりやすくグローバル変数を使って

Private PreR As Long

Private Sub Worksheet_Activate()
  PreR = ActiveCell.Row
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Intersect(Target, Range("B5:BX31")) Is Nothing Then Exit Sub
  If Target.Row <> PreR Then
   MsgBox "前 : " & PreR & vbLf & "現在 : " & Target.Row
   PreR = Target.Row
  End If
End Sub

というようなマクロで良いでしょう。
>重い計算をしているのでセルの移動が遅くて困っています。
ダブルクリックイベントなどに、変更したらどうでしょーか ?

【36259】Re:SelectionChangeイベントで直前のセル...
お礼  トナカイ  - 06/3/27(月) 1:18 -

引用なし
パスワード
   Kein様ありがとうございました。
PreviousSelectionsプロパティはヘルプで調べてみましたがいまいち理解できませんでした。
グローバル変数を使用して、SelectionChangeイベントの中で変数にTarget.Rowを入れてあげることで、現在のTarget.Rowと比較して思ったとおり動きました。
ありがとうございました。

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