こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセル セルクリックで行全体を選択するマクロ

住所録を見やすくするために、一つのセルをクリックすることで
行全体の色を変えるマクロをつけようと思っています。

クリックごとにシート全体の色をなくしてアクティブセルの存在する行を選択して、行全体に色をつける、という感じです。

行の選択方法が分からないので教えてください。
よろしくお願いします。

投稿日時 - 2008-11-12 01:05:09

QNo.4471791

暇なときに回答ください

このQ&Aは役に立ちましたか?

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

回答(8)

ANo.8

セルの色を変えるのは、Undoが効かなくなるのでお勧めできないかも。
条件付き書式と名前定義を組み合わせるのもよいかもしれませんが、面倒&重くなるのでボツ。

ってことで、こんな感じがお勧めです。

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

If Target.Count = 1 Then SendKeys "+{ }"
'{ と } の間は半角スペースです

End Sub

追記:
Target.Count=1を条件にしておけば、セルの書式設定等で困りません。
複数セル範囲の設定を行いたければ、マウスでその範囲を選択すればよいですし、一つのセルのみ書式を設定したければ、右クリックで選択すればよいです。

投稿日時 - 2008-11-13 01:32:00

ANo.7

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関数を使う手があることを知った。

投稿日時 - 2008-11-12 17:45:13

ANo.6

(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

投稿日時 - 2008-11-12 14:28:40

ANo.5

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

投稿日時 - 2008-11-12 10:09:10

ANo.4

おはよう御座います
こうゆう事
'-----------------------------------------------------------
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
'-----------------------------------------------------------

適当なシートにコードコピペして
あとはセルをダブルクリックして見てください

また外しましたか、外れた場合はスルーで・・・お願いします

投稿日時 - 2008-11-12 03:13:00

ANo.3

こんばんは。

意外に知られたマクロですが、この種のマクロは、あまり洗練されていないようですね。
条件付き書式は、重くて使えなかった覚えがあります。

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

投稿日時 - 2008-11-12 01:42:28

ANo.2

たまにある要望ですね。

下記のようなやり方がスマート(?)らしいです。

■アクティブセルのある行・列を目立たせる
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
(シートモジュールに記述)

といった感じで、素朴に塗り潰しちゃいますね。

ご参考まで。

投稿日時 - 2008-11-12 01:35:27

ANo.1

行番号をクリックしたことはありますか?
行全体が選択されます

投稿日時 - 2008-11-12 01:07:05

補足

行番号をちまちま選択するのは非常に面倒なので
このマクロを付けたいと思った次第です。

投稿日時 - 2008-11-12 01:17:24

あなたにオススメの質問