- 締切済み
エクセル セルクリックで行全体を選択するマクロ
住所録を見やすくするために、一つのセルをクリックすることで 行全体の色を変えるマクロをつけようと思っています。 クリックごとにシート全体の色をなくしてアクティブセルの存在する行を選択して、行全体に色をつける、という感じです。 行の選択方法が分からないので教えてください。 よろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- rurusanjo
- ベストアンサー率26% (5/19)
セルの色を変えるのは、Undoが効かなくなるのでお勧めできないかも。 条件付き書式と名前定義を組み合わせるのもよいかもしれませんが、面倒&重くなるのでボツ。 ってことで、こんな感じがお勧めです。 Private Sub Workbook_SheetSelectionChange( _ ByVal Sh As Object, _ ByVal Target As Range) If Target.Count = 1 Then SendKeys "+{ }" '{ と } の間は半角スペースです End Sub 追記: Target.Count=1を条件にしておけば、セルの書式設定等で困りません。 複数セル範囲の設定を行いたければ、マウスでその範囲を選択すればよいですし、一つのセルのみ書式を設定したければ、右クリックで選択すればよいです。
- imogasi
- ベストアンサー率27% (4737/17069)
No.6です。 質問は行全体に色をつける、を小生は列全体に色をつけると見誤ってしまいました。すみません。Column-->Row Columns-->Rowsに訂正してください。 ===== その後も考えて 標準モジュールに(アクチブセルの列を捉える)ユーザー関数を作りました。 Function actc() actc = ActiveCell.Column End Function ーー 操作=条件付き書式 シートで色をつける範囲を範囲指定。 A1がアクチブになっていることを確認。 書式 セル 条件付き書式 「数式が」を選ぶ 式に =COLUMN(A1)=actc() パターン色を淡い色に設定 OK ーーー 以上では画面の変換が、ぎこちない、というかうまく行かない。 先ほどのテスト経験上、わざわざ、シート切り替えして戻ると、色表示転換がうまく行ったのでそれでやっていたが、Application.ScreenUpdating = True があるというヒントでやってみると、色表示転換がスムーズにうまく行った。それで下記を入れる Worksheet_SelectionChangeイベントに Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.ScreenUpdating = True End Sub ーー 上記ではVBAでのセルへの色設定はやっていないので、今まで設定されたセルの色は崩れないようで、私の心配して言ったことも解決できそう。 ーー その後既出回答の紹介のサイトなど見るとCELL関数を使う手があることを知った。
- imogasi
- ベストアンサー率27% (4737/17069)
(1)クリックしたときに、飛んできてくれるイベントの扱い (2)クリックしたセルの列の全セル選択のコード (3)色付けしたセルを消すコード (4)以前の色付けした列を消すコード ただし(3)に関連して、直前の列を覚えておくのが難しい。 が必要。 (1)はわかっているのかな。 ーーー 下記でそれに近い機能になる。 しかし完全ではない。ブックを保存した時の列の色は残ったままとか。 セルに色を設定することを妨げられるとかあって、本質問は思いつき倒れで、主旨をまっとうすることが難しいと思う。 それに初心者・中級には難しい課題と思う。 私も自信はない。Public変数など使っていること、ブックを保存した時の列の色は残ったままとか、普通の目的の為に自由にセルに色を設定することが 出来なくなる(消えてしまう)こととか。 小生の力不足・コードの未熟もあろうが、この質問の仕様を固めることさえ難しい。 VBAレベルでなく、セルのパターン色とは違った、もっと構造的な、別の色をつける仕組みを考えないといけないと思う。 Public mc Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.EnableEvents = False If mc <> 0 Then ActiveSheet.Cells(1, mc).EntireColumn.Select Selection.Interior.ColorIndex = xlNone End If Target.EntireColumn.Select Selection.Interior.ColorIndex = 6 mc = Target.Column Application.EnableEvents = True End Sub
- mitarashi
- ベストアンサー率59% (574/965)
http://okwave.jp/qa4029237.html の、higekumanさんの回答が決定版でしょう。 ただ、ブック全体に設定するとうるさいので、シートモジュールに記載し、動作するセル範囲を下記の様に制限した方が吉かも。 下記コードは、ご質問に添って、行方向のみの着色に改造してあります。(原典は行列反転表示) Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("B2:D10")) Is Nothing Then Exit Sub Application.EnableEvents = False With Target Range(.EntireRow.Address).Select .Activate End With Application.EnableEvents = True End Sub
- hige_082
- ベストアンサー率50% (379/747)
おはよう御座います こうゆう事 '----------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim a As Long a = Target.Row If Target.Interior.ColorIndex <> xlNone Then Rows(a).Interior.ColorIndex = xlNone Else Rows(a).Interior.ColorIndex = 3 End If End Sub '----------------------------------------------------------- それともこれかな '----------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim a As Long a = Target.Row Cells.Interior.ColorIndex = xlNone Rows(a).Interior.ColorIndex = 3 End Sub '----------------------------------------------------------- 適当なシートにコードコピペして あとはセルをダブルクリックして見てください また外しましたか、外れた場合はスルーで・・・お願いします
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 意外に知られたマクロですが、この種のマクロは、あまり洗練されていないようですね。 条件付き書式は、重くて使えなかった覚えがあります。 Dim i As Long Private Sub Worksheet_Activate() '色の残りを、シートのアクティベートの際に消す 'もし、色を消したくないものがあれば、ここで設定する 'Cells はすべてのセル Cells.Interior.ColorIndex = xlColorIndexNone End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If i > 0 Then 'ここで、消す部分の範囲を決める Rows(i).Interior.ColorIndex = xlColorIndexNone End If Rows(Target.Row).Interior.ColorIndex = 34 i = Target.Cells(1).Row End Sub
たまにある要望ですね。 下記のようなやり方がスマート(?)らしいです。 ■アクティブセルのある行・列を目立たせる http://www.relief.jp/itnote/archives/001406.php ■行の自動的ハイライト http://blog.livedoor.jp/andrewj/archives/18035971.html この課題の難点は 「既に塗り潰してあるセルがある場合はどうするのか」という部分ですが、 上記のように条件付書式を使えば、既に塗り潰されているセルは影響を受けません。 ただ、私の個人的な好みで言えば、 「塗り潰しはまず使わない」一方で「条件付書式は多用する」ことが多いので、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cells.Interior.ColorIndex = xlNone Target.EntireRow.Interior.ColorIndex = 34 End Sub (シートモジュールに記述) といった感じで、素朴に塗り潰しちゃいますね。 ご参考まで。
- Cupper
- ベストアンサー率32% (2123/6444)
行番号をクリックしたことはありますか? 行全体が選択されます
補足
行番号をちまちま選択するのは非常に面倒なので このマクロを付けたいと思った次第です。