エクセル:VBAで範囲選択について

解決済みの質問

エクセル:VBAで範囲選択について

クリックしたセルを操作者に目立たせるために、
ActiveCell を交差する形で、行と列の反転表示を試みています。

例:D6セルをクリックすると、D列と6行を同時に範囲選択させる
  Range("D:D,6:6").Select

クリックしたセル番地は、
ActiveCell.Column
ActiveCell.Row
で求まると思うのですが、それから先の処理方法が思い浮かびません。
よろしくお願い致します。

投稿日時 - 2008-05-17 16:39:45

連想キーワード:

QNo.4029237

困ってます

質問者が選んだベストアンサー

ThisWorkbook モジュールに、

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Application.EnableEvents = False

With Target
Range(.EntireColumn.Address & "," & .EntireRow.Address).Select
.Activate
End With

Application.EnableEvents = True

End Sub

投稿日時 - 2008-05-17 21:29:55

お礼

スマートな回答ありがとうございます。
まさに私が実現したかった内容です。
お陰でスッキリしました。

投稿日時 - 2008-05-18 06:44:33

ANo.3

6人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

ANo.2

反転表示も大変そうなので、ANo.1さんの色表示で正解と思いますが、直前のセル座標を保存するのに、セルにIDという属性があって、値を保存できる事を思い出して使ってみました。A1セルを削除してしまうと、誤動作しますが、出来合の表で、一番端の列・行をいじることは少ないかなと考えます。ご参考まで。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lastAddress As String

'行列ごと選択とか、複数セル選択は対象外としたが、お好みにより変更下さい。
If Target.Cells.Count > 1 Then Exit Sub
lastAddress = ActiveSheet.Range("A1").ID
If lastAddress <> "" Then
ActiveSheet.Range(lastAddress).EntireColumn.Interior.ColorIndex = xlNone
ActiveSheet.Range(lastAddress).EntireRow.Interior.ColorIndex = xlNone
End If
Target.EntireColumn.Interior.ColorIndex = 15
Target.EntireRow.Interior.ColorIndex = 15
ActiveSheet.Range("A1").ID = Target.Address
End Sub

投稿日時 - 2008-05-17 21:22:13

お礼

回答ありがとうございます。
今後の参考にさせて頂きます

投稿日時 - 2008-05-18 06:45:52

ANo.1

質問を見て、かっても同様質問があって、納得のいくように、行かなかった点を思出だした(下記(2))。
この質問では2つ問題を思いました。
(1)列行は全列・全行を色づけるのか?
   どちらでもコード上は余り差が無いが。
(2)直前の色づけたものを解除することのやり方。
Targetでは直前の選択セル番地が捉えられない。
次回のクリックまで、その前回情報を引き継がないといけない。
ほかには適当な仕掛けはなさそうだし。PUBLIC変数でもと思ったが。
下記はStaticで下記はこなした。
ーー
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
Static t
Static rm
Static cm
If t = 0 Then
Else
Rows(rm).Interior.ColorIndex = xlNone
Columns(cm).Interior.ColorIndex = xlNone
End If
t = t + 1
r = Target.Row
c = Target.Column
Rows(r & ":" & r).Interior.ColorIndex = 6
Columns(c).Interior.ColorIndex = 6
rm = r
cm = c
Application.EnableEvents = True
End Sub
ーーー
浅学のためか、小生の苦労・試行錯誤が詰まってます。

投稿日時 - 2008-05-17 19:54:45

お礼

早速の回答ありがとうございます。
反転表示ばかり考えて、色変更とは思い付きませんでした。
参考にさせて頂きます。

投稿日時 - 2008-05-18 06:42:00

あわせてチェックしたい
  • 「Row」と「horizontal」、「Column」と「vertical」 ...
  • columnでのアルファベットの取得 ...
  • 自身のセル番地を取得する関数の自作 ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら