[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『選択したセル範囲の色づけ』(たなしん)
すみません。教えてください
セルの選択するとその選択された範囲に色が付き
ユーザーフォームに作ったボタンを押すと
その処理が適用されて色が元に戻る(白)
っというのはVBAで可能でょうか?
よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:unknown >
可能です。マクロの記録をしてみたらどうでしょう。 (tou) 2020/06/06(土) 19:37
VBEと条件付き書式でセルを選択した瞬間にセルや行を色で協調することはできたのですが
シフトキーやコントロールキーで
A2、D6, I23など
ランダムにセルを選択していった時にそれらが全て色がついた状態のまま保持
というのは調べてもなかなか出てこなくて、なかなか難しいでしょうか。
(たなしん) 2020/06/07(日) 02:48
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = True
End Sub
(たなしん) 2020/06/07(日) 14:02
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Interior.Color = RGB(200, 200, 200)
End Sub
(Marvie) 2020/06/07(日) 16:20
・自分の作った表の中で選択した行をカーソルでまとめて選択したり
違う行を選んだりしたものを全て色付けしてピックアップしたい
・選択を解除すれば色も消える
という事をやろうとして色々調べました。
その表の範囲を選んで条件付き書式→数式を使用して書式設定をするセルを決定
=CELL("ROW")=ROW() をいれて自分の任意の塗りつぶしの色を設定
VBAを起動してThisWorkBookに
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = True
End Sub
を入力しました。
ただこれだと最初に選択した行は色がついて表示されるけど
ドラッグしたりして複数行を選んでも最初の行しか色付けがされず。 というところであきらめました。
アクティブセル(行)というより選択セル(行)全てに色がつく
やめると元のデフォルト色に戻る
というのはちょっと自分には敷居が高すぎました。
(たなしん) 2020/06/07(日) 17:34
■1
提示されたコードだと「Application.ScreenUpdating = True」だけ実行しているので、実質なにもしてないのは理解してますか?
■2
多分言っているようなことはこのようなことではないでしょうか?
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Cells.Interior.Color = xlNone Selection.Interior.Color = RGB(255, 0, 0) End Sub
■3
>ユーザーフォームに作ったボタンを押すとその処理が適用されて色が元に戻る(白)
そのようにしたければ、【別途】塗りつぶし色を無しにしてあげないとダメですよね?
(もこな2 ) 2020/06/07(日) 19:46
■1
提示されたコードだと「Application.ScreenUpdating = True」だけ実行しているので、実質なにもしてないのは理解してますか?
・セルの書式や関数はある程度やっていたのですがマクロはまだ初心者でして申し訳ありません。
■2
多分言っているようなことはこのようなことではないでしょうか?
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Cells.Interior.Color = xlNone Selection.Interior.Color = RGB(255, 0, 0) End Sub
・これを適用してみたらかなり理想に近い挙動になりました。
これを選択セルの中の特定の列全てに制御することは可能でしょうか?
A13セルを選択してもE〜M列の13行目が塗りつぶされる B4:E8を範囲選択しても E〜M列の4行目〜8行目が塗りつぶされる
と、列を気にせずとも選んだ行の特定の列を色で全てピックアップできないかと思っておりました。
なので調べてたら上記の方法がヒットしたので実行してみた次第です。
■3
>ユーザーフォームに作ったボタンを押すとその処理が適用されて色が元に戻る(白)
そのようにしたければ、【別途】塗りつぶし色を無しにしてあげないとダメですよね?
・すみません、こちらについては都合上やめることにしました。申し訳ありません。
【どのように自由に範囲選択しようが選択されたE〜M列の行が塗りつぶされる 選択をやめると元に戻る】
という事をできないか調べてやったのが小生の知識の限界でした。
(たなしん) 2020/06/07(日) 20:27
という挙動が自分の理想でした。
塗りつぶしっだとだめですね。
マクロを使わずにそういう機能が元々エクセルにないか調べてみます。
(たなしん) 2020/06/07(日) 20:41
>マクロを使わずにそういう機能が元々エクセルにないか調べてみます。 そういう機能はありません。
(馬鹿な人) 2020/06/07(日) 21:00
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Stop 'ブレークポイントの代わり
Sh.Range("E:M").Interior.Color = xlNone If Intersect(Sh.Range("E:M"), Target) Is Nothing Then Exit Sub Else Intersect(Selection.EntireRow, Sh.Range("E:M")).Interior.Color = RGB(255, 0, 0) End If End Sub
■5
>上記の方法がヒットしたので実行してみた
適当に書いてもダメですから、ちゃんと理解してから記述すべきです。
「ScreenUpdating」について、もう一度ちゃんと調べてみてください。
やりたいこととは全く関係ないと思いますよ。
http://officetanaka.net/excel/vba/speed/s1.htm
■6
コードの意味を理解するには、ステップ実行をして一行ずつ実行しながら観察するのが有効なアプローチだと思います。
よって「■4」のコードをステップ実行してみてください。
https://www.239-programing.com/excel-vba/basic/basic023.html
http://plus1excel.web.fc2.com/learning/l301/t405.html
(もこな2 ) 2020/06/07(日) 21:23
■4
・凄すぎです。・・・完全に完成です。
■5
■6
・わざわざ参考になる。URLありがとうございます。
基礎も意味もわからずインターネットで検索して拾ってくるやり方じゃダメですね。
基礎からしっかりと意味を理解して勉強していこうと思います。 本当にありがとうございました。
(たなしん) 2020/06/07(日) 21:58
回答ではなく、余談です。
ああ、これは"アンドリューの方法"と一部で?呼ばれる、割と有名なやりかたですね。 https://www.relief.jp/docs/001406.html
Application.ScreenUpdating = True にはそれなりの意味があると思います。 それを再描画のトリガーにしている、仕掛けのキモでもあります。
既にご案内のように、CELL("ROW")が選択領域の左上単一セルの行番号を返すという 仕様のため、複数セルを選択した場合には対応できないわけです。
「カーソル位置(行、列、交差する単一セルなど)を目立たせたい」という話題で、 私が唯一推奨できる方法です。 他の方法(セルの背景色を変更する)では、カーソルを動かしたときに、 過去いたところの色を復元する必要があるわけですが、元々のセルが色を多用していた場合、 その保存復元が高コストになってしまうからですね。
今回のテーマは、そもそも"Excelの既定の複数セル選択表示が判別しにくい"という 認識から出発しています。 それはチャレンジとしてありうると思うのですが、 それほどまずい状況なのかなとも思います。
大多数の人はそれを前提として使っているわけで、特定目的(プレゼンテーションなど)で 無い限り、普通のことは普通にしておくのがよいのではないか、という気持ちが正直します。
(γ) 2020/06/08(月) 02:44
質問者さんの「条件付き書式〜」の部分を全く読んでませんでした・・・
お目汚し失礼しました。
(もこな2 ) 2020/06/08(月) 03:05
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cells.FormatConditions.Delete
If Intersect(Selection, Range("D:BC")) Is Nothing Then Exit Sub With Intersect(Selection.EntireRow, Range("D:BC")) .FormatConditions.Add Type:=xlExpression, Formula1:="=TRUE" With .FormatConditions(1).Interior .Pattern = xlGray50 .PatternColor = vbYellow End With End With End Sub
(もこな2 ) 2020/06/08(月) 12:24
もこな2さん
・昨日はありがとうございました。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Stop 'ブレークポイントの代わり Sh.Range("E:M").Interior.Color = xlNone If Intersect(Sh.Range("E:M"), Target) Is Nothing Then Exit Sub Else Intersect(Selection.EntireRow, Sh.Range("E:M")).Interior.Color = RGB(255, 0, 0) End If End Sub
この頂いたプロシージャに1行目から7行目は色付けの適用外になるように
という条件を追加しようと思って今度は頑張って調べています。
・本日はPCに触れる環境ではなくスマホから書き込んでいるので実行できないのですが
もこな2さんが新たに自作したものと昨日頂いたものの違いは仕様が大きく違うものなのでしょうか?
そちらの方が使い勝手が良ければそちらをパク…再度頂いて使用させて頂こうかと思っております。
(たなしん) 2020/06/08(月) 17:52
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Stop 'ブレークポイントの代わり If Target.Row >= 8 Then '追加 Sh.Range("E:M").Interior.Color = xlNone If Intersect(Sh.Range("E:M"), Target) Is Nothing Then Exit Sub Else Intersect(Selection.EntireRow, Sh.Range("E:M")).Interior.Color = RGB(255, 0, 0) End If End If '追加 End Sub
課題・5行目〜11行目を一気に選んだりすると色が適用されてくれない。
・選択を1行目に戻すと一つ前に選択していた該当の行の色が残りっぱなし
やってみた事その2
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Stop 'ブレークポイントの代わり Sh.Range("E:M").Interior.Color = xlNone If Intersect(Sh.Range("E8:M5000"), Target) Is Nothing Then '追加。最終行は適当で… Exit Sub Else Intersect(Selection.EntireRow, Sh.Range("E:M")).Interior.Color = RGB(255, 0, 0) End If End Sub
課題・5行目〜11行目など一気に選ぶと567行目も色付けされてしまうが自分の理想には近づいたかも
理想・例えば3行目〜14行目を一気に選んだとしても8行目からしか色付けされず、1行目などを選べば全部色が消える。
頑張ります。色々弄ってると挙動が違ってきますね。
(たなしん) 2020/06/08(月) 20:55
5行目〜11行目を選択 → 5が返り → 5 >= 8 → 「偽」なので処理されない 1行目を選択 → 1が返り → 1 >= 8 → 「偽」なので処理されない
となっているためですね
■8
>5行目〜11行目など一気に選ぶと567行目も色付けされてしまう
567行目のセルも選択していたんじゃないでしょうか?
こちらも繰り返しになりますが、理解せずに適当に書いてもダメです。
先に「Intersectメソッド」と「EntireRowプロパティ」について調べてみてください。
■9
>仕様が大きく違うものなのでしょうか?
見慣れない命令は、ご自身で調べたほうが理解できると思いますが、
Rangeオブジェクト.Interior.Color ・・・・セルの塗りつぶし色を設定 Rangeオブジェクト.FormatConditions ・・・セルの条件付き書式をあれやこれやする命令
なので、私にとっては大きく違いましたね。
(もこな2 ) 2020/06/09(火) 00:56
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.