• ベストアンサー

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

クリックしたセルを操作者に目立たせるために、 ActiveCell を交差する形で、行と列の反転表示を試みています。 例:D6セルをクリックすると、D列と6行を同時に範囲選択させる   Range("D:D,6:6").Select クリックしたセル番地は、 ActiveCell.Column ActiveCell.Row で求まると思うのですが、それから先の処理方法が思い浮かびません。 よろしくお願い致します。

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

  • ベストアンサー
  • higekuman
  • ベストアンサー率19% (195/979)
回答No.3

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

tomoyochan
質問者

お礼

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

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.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

tomoyochan
質問者

お礼

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.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 ーーー 浅学のためか、小生の苦労・試行錯誤が詰まってます。

tomoyochan
質問者

お礼

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

関連するQ&A

  • Excelのセル選択範囲の指定について

    Excelのセル選択範囲の指定について d = Range("A65536").End(xlUp).Row Range("A1:K" & d).Select これでやると A1からk列のデータの最後の(データの入っている行)までを選択しますが このk列というところを n = ActiveSheet.Range("A1").End(xlToRight).Columnを使いKでなくデータのある列nを使った表現に変えたい。どうすればいいか。

  • Excel Macro セル範囲の設定方法

    コラムFGに予め数式を入れておき、コラムFHから右横にスクロールしていって数式のはいっているセルを見つけたら、1セル分だけ左側に戻し、FHからその1セル分左側に戻ったセル番地を範囲とし、その範囲内にあるセル(この範囲内にあるセルは全て空白セル)にFGの数式をコピーしたく、以下のようなマクロを書いてみました。 Range("FG" & ROWNUM).Select Selection.Copy Range("FG" & ROWNUM).End(xlToRight).Select ActiveCell.Offset(0, -1).Select LEFTCELL = Range("FH" & ROWNUM).Address RIGHTCELL = ActiveCell.Address Range("LEFTCELL" & ":" & "RIGHTCELL").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False (ROWNUMは行数の変数で、これをLOOPさせ、複数行に同じ処理をする) これで大体やりたいことはわかって頂けると思うのですが 多分Range("LEFTCELL" & ":" & "RIGHTCELL").Select のところがどうもまずいようでうまく動いてくれません。どうすればよいか教えてください。 ちなみになぜこういうことやろうとしているというと、右側にスクロールした時に数式のはいっているセルの列位置が行によって違うからです(でも起点列はいつも同じ)。 よろしくお願いいたします。

  • エクセルマクロで、選択しているセルから印刷範囲を設定する方法を教えて下さい。

    こんにちは。いつもお世話になっています。 エクセルで、データーベースを作成しました。 これから日を増すごとに、データ行がどんどん増えていきます。 アクティブにしたセルから、列右へ9行、行下へ15行の範囲を印刷させたいのです。 Dim r As Integer r = ActiveCell.Column Dim d As Integer d = ActiveCell.Row Dim h As Integer h = Cells(r.g).Offset(15, 9) ActiveSheet.Range("rd:h").PrintOut , preview:=True このように書いてみたのですが、動きません。 すみませんが、どうしたら良いか教えて下さい。 よろしくお願いします。

  • エクセルVBAで範囲の指定をしたいです(初心者)

    エクセルVBAで範囲の指定をしたいです(初心者) 列AからJがデータが入る範囲です。 列AとBとCには必ず数値等が何かしら入ります。 列Dは常に空白です。 列E以降は何か入ることも入らないこともあります。 7行目までデータがある場合、 A1セルからこの場合はJ7セルまでを範囲指定したいのですが 行数は未定なので、 Range("A1").Select Range(Selection,Selection.End(xlDown)).Select でA列のデータ最終行まで下がり、そこから9つ右の列までを 範囲指定するというのがよくわかりません。 自動記録で絶対参照と相対参照を切り替えてやってみたのですが、 どうしても Range(Selection, Selection.End(xlDown)).Select ActiveCell.Range("A1:J7").Select と常にA1からJ7が指定になってしまいます。 バージョンは2003です。 つたない質問文で申し訳ありませんが、 どなたか宜しくお願いいたします。

  • VBAアクティブセル行で列範囲選択

    マクロ A1をアクティブセルにして A:H列の行を選択するにはどう書けばいいのでしょうか? この場合A1:H1が選択されればいいのですが range("A:H " & activecell.row).select みたいな感じだとエラーになってしまいます。

  • EXCEL VBA セルの選択範囲を変化させたい。

    いつもお世話になっております。 Range("E3:E5").Select のようなプロパティで選択するセルの範囲を列、行共に変数で与えたいのですが、 できますでしょうか?

  • セルを選択するマクロ(エクセル)

    Sub test() x = ActiveCell.Row y = ActiveCell.End(xlToLeft).Column z = ActiveCell.End(xlToRight).Column Range(Cells(x, y), Cells(x, z)).Select End Sub アクティブセルが含まれている行のみで、データが入力されている連続したセルを選択状態にするマクロとして、上記を考えました。 上記を違った形でもっと簡潔に表すことは可能でしょうか?

  • rangeに変数代入でエラー

    VBA初心者です。お願いします。 下記のように最終セルのアドレスを取得し、セル範囲を選択したいのですがたのですが、エラーが出てしまいます。どなたか助けてください。 ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate l = ActiveCell.Column 'アクティブセルの列番号 d = ActiveCell.Row 'アクティブセルの行番号 ad = ActiveCell.Address 'アクティブセルのアドレス Range("A1:ad").Select

  • インデックスが有効範囲にありませんとは!??

    FNameのファイルをひらきA列(数字)とB列(日付)最終行まで配列で取り込み F1Nameのファイルをひらき日付を検索し同じ日付のセルを見つけ3列右側に移動した 位置に数字を入力しその隣に 異常無しを書き込むマクロですが Cells.Find(What:=serch_date(z2), ActiveCell.Value = No_data(z2) の2か所でインデックスが有効範囲にありませんで止まってしまいます・・・ 原因がわかりませんので、ご存知の方お教えいただけないでしょうか? Windows(FName).Activate Range("B1").Select '選択しているセルのアドレスの取得 serch_u = ActiveCell.Address '最終行検索(エクセルの機能) Selection.End(xlDown).Select '選択しているセルの行番号の取得(データの最終行) end_row = ActiveCell.Row '選択しているセルのアドレスの取得 serch_d = ActiveCell.Address '最大値検索対象区間の選択(データの開始位置からデータの最終行) Range(serch_u, serch_d).Select serch_date = Range(serch_u, serch_d) Range("A1").Select '選択しているセルのアドレスの取得 serch_u1 = ActiveCell.Address '最終行検索(エクセルの機能) Selection.End(xlDown).Select '選択しているセルの行番号の取得(データの最終行) end_row1 = ActiveCell.Row '選択しているセルのアドレスの取得 serch_d1 = ActiveCell.Address '最大値検索対象区間の選択(データの開始位置からデータの最終行) Range(serch_u1, serch_d1).Select No_data = Range(serch_u1, serch_d1) Windows(F1Name).Activate For z2 = LBound(serch_date) To UBound(serch_date) Cells.Find(What:=serch_date(z2), After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False).Activate Dim FoundCell As Range ''またはバリアント型(Variant)とする Set FoundCell = Range("A1").CurrentRegion.Find(What:=serch_date(z2)) If FoundCell Is Nothing Then MsgBox "検索に失敗しました" Else FoundCell.Select End If ActiveCell.Offset(0, オフセット値).Activate ActiveCell.Value = No_data(z2) ActiveCell.Offset(0, 1).Activate ActiveCell.FormulaR1C1 = "異常無し"         Next z2

  • エクセルVBAで範囲内での位置取得(行&列)

    Sub test() Set Rng = Range("B2:E7") Rng.Cells(2, 2).Select End Sub これで、範囲Rng内では2行/2列目となるC3セルが選択されます。 では、C3セルが、範囲Rng内で何行/何列目であるかを取得するにはどのように記述すればよいのでしょうか? Rng.Cells(2, 2).Rowは、当たり前ですが、3になってしまいます。

専門家に質問してみよう