プロが教えるわが家の防犯対策術!

エクセルで簡単なタスク管理表を作っています。
A列に日付が入るようになっており、自動で日付順にタスクが並び変わるようにしています。


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Cells.Select
Selection.Sort Key1:=Range("A2"), Header:=xlYes
End If
End Sub

別の質問で、上記マクロを見つけてこれを使用しているのですが、これだとVBA実行後にセルが全選択された状態になります。
VBAの知識が全くなく、自分なりに調べて見たのですがうまく行かずこちらで質問するに至りました…( ; ; )
上のマクロのまま、VBA実行後に元々選択していたセルに戻るにはどうしたらいいのでしょうか。

A 回答 (4件)

こんにちは



>元々選択していたセルに戻るにはどうしたらいいのでしょうか。
「元々選択していたセル」の解釈が2通りできます。
ご提示のコードはChangeイベントですが、それが発生する状況でのセル選択は
 ・通常入力でEnterキー等を押した時
  → 選択セルは次のセルに移動
 ・ペーストなどでセル(又はセル範囲)に値を入力した時
  → 選択セルはペーストしたセル範囲のまま(=移動しない)
の2種類があります。

1)選択位置をイベントが発生した状態(=Enterで移動後)にしたいのなら
Selectで選択範囲を移動しなければ良いです。
 >Cells.Select
を削除して
 >Selection.Sort Key1:=Range("A2"), Header:=xlYes
の部分を
 Cells.Sort Key1:=Range("A2"), Header:=xlYes
とすれば、シート上の選択範囲は影響を受かないので、そのままとなります。

2)処理対象のセル(又はセル範囲)が選択された状態にしたいのなら
No3様の回答にあるように
 Target.Select
としておけば良いでしょう。
(Enter入力等の場合には、選択位置が戻った状態になります)
    • good
    • 0
この回答へのお礼

解決しました

確かに2パターン解釈できるなと、投稿後に気づきました(*´-`)
本日実際に事務員間で使用してみて、2つのパターン好きな方を使えたのでとてもありがたかったです。
ありがとうございました!

お礼日時:2024/01/31 16:34

Target.Select ' この行追加


End If
End Sub

で宜しいのでは。
    • good
    • 0
この回答へのお礼

助かりました

思っていた通りのシートになりました!
本当にありがとうございます!

お礼日時:2024/01/31 16:31

動かなかったら6行目


セル位置.select→range(セル位置).select
でお願いします。
    • good
    • 0
この回答へのお礼

ありがとう

2パターン試して見たのですが、私の入れ方がおかしいのか上手くいかず、、
本当に知識がなく申し訳ございません( ; ; )
回答いただいて、ありがとうございました!

お礼日時:2024/01/31 16:30

Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Column = 1 Then
セル位置=selection.address
Cells.Select
Selection.Sort Key1:=Range("A2"), Header:=xlYes
セル位置.select
End If
End Sub

でいかがでしょうか。
動くかは分かりません試して見てください笑
    • good
    • 0
この回答へのお礼

ありがとう

お礼日時:2024/01/31 16:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A