[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『アクティブセルを目立たせるマクロで質問です。』(名無し)
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim highlight As Integer highlight = 35 '黄色にする
Cells.Interior.ColorIndex = 0 Rows(Target.Row).Interior.ColorIndex = highlight Columns(Target.Column).Interior.ColorIndex = highlight End Sub
セルの行、列に色を付けるマクロをネットから探してきたのですが、
このマクロで元からセルに付いている色を消したくない場合はどうしたら良いでしょうか。
印刷時もこの行、列に色がついたままでしょうか?
< 使用 Excel:Excel2016、使用 OS:Windows10 >
名前定義+条件付き書式を使う方法もあります。
https://hamachan.info/win7/Excel/active.html
メリット
・「元に戻す」機能が使えなくならない。
・(たぶん)こっちのが軽い
・塗りつぶし色情報を消さずに表示を上書きできる。
デメリット
・切り取り・貼り付けで条件付き書式が壊れる。
・あちこちの機能を使うので設定が面倒
・複数行のとき一行目しか着色出来ない。
あとRelaxTool(フリーのアドイン)の中にオートシェイプを使って目立たせる機能が付いてたような・・・。
どの方法も色が付いたままだと思うので、Workbook_BeforePrintイベントでゴニョゴニョする必要がありそう。
(名無し) 2018/09/18(火) 09:42
Cells.Interior.ColorIndex = 0 これを消して、
Rows(Target.Row).Interior.ColorIndex = highlight Columns(Target.Column).Interior.ColorIndex = highlight これを「もともと色が付いて無かったら」というIF文の中に入れればOKです。
(TAKA) 2018/09/18(火) 09:45
成る程、選択中の行列でも前の色を残したまま表示したいという解釈も出来ますね・・
> Cells.Interior.ColorIndex = 0 これを消して、
それだと直前に選択していた行列の塗りつぶしが解除されなくなりません?
> これを「もともと色が付いて無かったら」というIF文の中に入れればOKです。
それだと1セルづつ判定が必要になりますよね?
表が小さければ良いのですが、大きな表になると重くなりそうなのでちょっと心配です。
(私も検証してないので違ったら申し訳ございません。)
(名無し) 2018/09/18(火) 09:57
エクセルって最初から選んだところ色変わりません?? (TAKA) 2018/09/18(火) 10:01
条件付き書式の方は以前使っていたのですが、毎回使うシートに条件付き書式の入力が必要なのが使いずらかったのでこちらを検索しました。
まさしくデメリットで書いて頂いた通りです。
Workbook_BeforePrintイベントでゴニョゴニョ・・
やはりマクロ理解していないと設定は難しそうですよね。。
TAKAさん
試してみたいのですが、
Rows(Target.Row).Interior.ColorIndex = highlight Columns(Target.Column).Interior.ColorIndex = highlight これを「もともと色が付いて無かったら」というIF文の中に入れればOKです。 はマクロの中のどこに入れたら良いでしょうか?
(名無し) 2018/09/18(火) 10:44
Dim R As Long Dim C As Long
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Const COPYSHEET = "Sheet1 (2)" Const highlight = 35
Application.ScreenUpdating = False If 0 < R Then Application.EnableEvents = False Sheets(COPYSHEET).Rows(R).Copy Rows(R).PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Sheets(COPYSHEET).Columns(C).Copy Columns(C).PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Target.Select Application.EnableEvents = True End If R = Target.Row C = Target.Column Rows(R).Interior.ColorIndex = highlight Columns(C).Interior.ColorIndex = highlight Application.ScreenUpdating = True End Sub (???) 2018/09/18(火) 10:54
>はマクロの中のどこに入れたら良いでしょうか?
いや、、忘れてください、、 行の中で色が付いてるセルと色が付いてないセルを判定するので そんな単純じゃなかったです。 (TAKA) 2018/09/18(火) 10:59
ThisWorkbookのWorkbook_SheetSelectionChangeにコードを書くと、全シートで色替えしてしまうので、シートのバックアップ案ではコピー先もクリックで色が壊れてしまいます。 なので、THisWorkbookではなく、シートモジュール(例えばSheet1)の Worksheet_SelectionChangeに書くことで、シートを1つにできます。
(???) 2018/09/18(火) 11:01
別案のシートコピーで試してみます!
わかりました、ワークシートモジュールに書いてみます。
ありがとうございます!
TAKAさん
そうなんですね、わかりました。
ご思考いただきありがとうございました!
(名無し) 2018/09/18(火) 11:44
列、行単位で選択できなくなるけど。 更に、Shift、Ctrlキーを併用したセルの選択ができなくなる。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Acadd = ActiveCell.Address Application.EnableEvents = False Union(Target.EntireRow, Target.EntireColumn).Select Range(Acadd).Activate Application.EnableEvents = True End Sub
>・複数行のとき一行目しか着色出来ない。
アクティブセルは、1つしかないけど?? (BJ) 2018/09/18(火) 11:59
あと質問者と同じ名前を使っていたようでみなさんを混乱させて申し訳ございません。私は一旦撤退します。
(名無し) 2018/09/18(火) 12:06
シートコピーでうまくいきました!
後で書いてくれた BJ さんの方法がシート増やさず楽なので使わせていただくことにしましたが、そういう方法もある事を今後覚えておきます、ありがとうございました。
BJさん
印刷にも支障なく目立つようになりました、ありがとうございます!
できれば解説を簡単にでも良いのでお願いできないでしょうか。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)'セルの選択範囲を変更したときに実行する処理 Acadd = ActiveCell.Address'アクティブなセルの位置を取得 Application.EnableEvents = False'イベントを??? Union(Target.EntireRow, Target.EntireColumn).Select Range(Acadd).Activate'セルをアクティブにする Application.EnableEvents = True’イベントを???
部分ずつネットで調べただけなので意味もわかっておらずすみません。
名無しさん
ニックネームが被ってしまっていたのですね、すみません!
思考ありがとうございました。
(名無し) 2018/09/18(火) 13:46
ロジックは、縦1列+横1行をまとめて選択状態にしているだけです。 Application.EnableEvents は、その選択によって更にSelectionChangeイベントが発生してしまう事を抑止しています。
(???) 2018/09/18(火) 13:57
【シートモジュール】
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If GetKeyState(VK_CONTROL) = 1 Then '←追加 Dim acadd As String acadd = ActiveCell.Address Application.EnableEvents = False Union(Target.EntireRow, Target.EntireColumn).Select Range(acadd).Activate Application.EnableEvents = True End If '←追加 End Sub
【Module1】
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Const VK_CONTROL = &H11
これでデメリット解消ではないでしょうか!
(名無し@回答者) 2018/09/18(火) 14:21
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cells.FormatConditions.Delete
With ActiveCell .FormatConditions.Add Type:=xlExpression, Formula1:="=TRUE"
'実行環境で「ColorIndex」の35が黄色なのか要確認 .FormatConditions(1).Interior.ColorIndex = 35 End With
End Sub
みたいな感じでいけちゃいませんか?
(もこな2) 2018/09/19(水) 12:58
例えばF10セルを選択した場合、F列のセルおよび10行のセル(十字になる)に色を付けたい(もともと色がついている場合は そのことがわかるように)だと思うが。 (ねむねむ) 2018/09/19(水) 13:18
もこな2さん案を十字に適用したとして、実際に塗ってしまう私の案よりはマシだけど、全く塗らない案には敵わない、という感じでしょうか。 他に条件付き書式を使っていると駄目、という欠点もありますし。
そして、BJさん案の欠点である、セルの編集ができなくなってしまう点は、デザインモードにしてマクロを動かなくした状態にするだけで良いのではないかなぁ、と思います。
(???) 2018/09/19(水) 13:31
要は、今のエクセルでも行と列の見出し?の部分が色が変わってくれるけど、もっとみやすく、昔のlotus 1-2-3みたいな感じで表示してほしいってことでしたか。
そうなると、行列まるごと選択状態にする案って妙手ですね。
今度、同僚に、私が考えたって教えよう(違っ
蛇足ですが、スイッチ追加案は、操作(プレゼン?)してるうちにどっちのモードか忘れそうなので、シート見出しの色を変えるとか、トグルボタンを設置するとか視覚的にわかるようにしたほうがいいかもなんて思いました。
(もこな2) 2018/09/19(水) 20:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.