セルの塗りつぶし色変更時の問題と解決方法

このQ&Aのポイント
  • セルの塗りつぶしを変更する際にカーソルの移動が必要な問題があります。この記事では、セルの塗りつぶし色を変える方法とその問題を解決する方法について説明します。
  • Excelでセルの塗りつぶし色を変更する際、カーソルの移動が必要な問題があります。それにより、変更後の色の確認が困難になります。この記事では、セルの塗りつぶし色を変える方法と、その問題を解決するための方法について解説します。
  • Excelでセルの塗りつぶし色を変更する際に、カーソルの移動が必要な問題が生じます。このため、変更後の色の確認が煩雑になります。本記事では、セルの塗りつぶし色を変える方法と、この問題を解決する方法について詳しく解説します。
回答を見る
  • ベストアンサー

選択している行をハイライト表示する方法・改

http://www.maruko2.com/mw/Excel/%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E8%A1%8C%E3%82%92%E3%83%8F%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%88%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95 セルの塗りつぶしをよく使っているのですが、色を変える時にこのコードを入れると変化したかどうかわかりにくいので、「次の数式を満たす場合に値を書式設定」のところで、 罫線のみを選択したのですが、カーソルで上書きされたような状態になっているんですね。 このやりかただとカーソルが当たった時に、元のセルの状態(セルの色とか)から変える時に変わったかどうか確かめる時に次の行にいちいちカーソルを合わせないといけないのが面倒です 他に方法はないのでしょうか? Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.ScreenUpdating = True End Sub =CELL("ROW")=ROW()

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

私の理解力が足らなかったため、ご質問の意味を把握できずに申し訳ありませんでした。 ご質問の趣旨は、条件付き書式でセルの表示を変更すると、元の書式よりも優先されるので(他の書式を利用してもセルの塗りつぶしは条件付き書式の設定が反映するので)塗りつぶしたセルがわからなくなるということだったのですね。 このケースならVBAで実行すれば、2つの書式を共存させることができます。 たとえば、塗りつぶしではなく、セルの網掛けなど(通常使用していない設定)を利用すれば、元の書式を残したまま行の選択を網掛けで明示することができます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveSheet.Cells.Interior.Pattern = xlSolid ActiveCell.EntireRow.Interior.Pattern = xlGray16 End Sub

KAIJI-000
質問者

お礼

ここに補足すいません、やっぱり良くない点がありまして、セルの背景の線?みたいなのが無くなるんですね? どうしても避けれないんでしょうか?

KAIJI-000
質問者

補足

おおー思い通りの物です。有難うございました!!!!

その他の回答 (5)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

>やっぱり良くない点がありまして、セルの背景の線?みたいなのが無くなるんですね? どうしても避けれないんでしょうか? 枠線のことでしょうか? 枠線はセルの色を塗りつぶしたときと同様に、パターンで塗りつぶしたときも見えなくなります(仕様です)。

KAIJI-000
質問者

お礼

補足への回答有難うございました。

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.5

質問者さんのコードと条件付き書式はそのままという 前提がぬけていました こちらでもコピペで張り付けてみましたが エラーでないで動作しています 説明がわかりずらかったかもしれませんが セルをマウス左ボタンダブルクリックで動作しますよ その場合に1行目に強制的にとばしているので 1行目は非表示にしましょうという説明です クリックしたセルの行のハイライトもとぶので 色の確認ができるようにはなるはずです やってみた中で 他の方法としてはマクロで条件付き書式を追加と削除で いろいろとできることはできますが スクリーンアップデートの更新タイミングがむずかしく 動作が不安定であまりおすすめできるものにはなりませんでした

KAIJI-000
質問者

補足

きっちり入れなおしたら出来ました。大変すいませんでした。ただダブルクリック編集が出来ないのはいたいですね。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

>ではなく、塗りつぶしたら塗りつぶしたままにしたいです。 操作の目的がよくわからないのですが、選択した行を次々に塗りつぶしたいということでしょうか? それなら、単純に「ActiveSheet.Cells.Interior.ColorIndex = xlNone」のコードを削除するだけでよいと思うのですが・・・

KAIJI-000
質問者

補足

>選択した行を次々に塗りつぶしたいということでしょうか? いや、そこを削除してしまうとVBAで設定された色で行すべて塗りつぶされてしまってますよね? そうではなく カーソルを塗りつぶし以外(実質罫線ぐらいしか無いかもしれませんが)で行選択、なおかつその場で特定のセルだけ塗りつぶしが出来るように、さらにわかりやすいようにする ことが目的です。僕の提示しているリンクのやり方ではその場で塗りつぶしたのかどうか・どんな色なのかすぐにわからないので(他の行にカーソルに合わせないといけないので)

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.2

1つの方法として 1行目を使わないつもりで 行の高さを3くらいにして非表示にする ThisWorkbookに下のコードを追加 Private Sub Workbook_SheetBeforeDoubleClick _ (ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Cells(1, 1).Select End Sub ダブルクリックで非表示行に セル選択をとばすという方法ならできますが この方法をとった場合は セルをダブルクリックしての編集ができなくなります そのかわりハイライトも非表示行になるので セルの色確認はできます なかなか万能な方法はないようですね

KAIJI-000
質問者

お礼

回答有難うございました。

KAIJI-000
質問者

補足

ThisWorkbook(VBA画面左上のウインドウ1番下?)におっしゃったコードを貼り付けましたが何の変化もありません。間違ってませんか?

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

イベントマクロを使用するなら、そのシートのシート名部分を右クリックして「コードの表示」で以下のコードをコピー貼り付けしてみてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveSheet.Cells.Interior.ColorIndex = xlNone ActiveCell.EntireRow.Interior.ColorIndex = 4 End Sub

KAIJI-000
質問者

補足

教えていただいたコードをWorkseetに貼り付けてみたところ、色は変わりましたがカーソルが次の行に行くと変えたはずの塗りつぶしが無くなっています。そういうコードでしょうか? ではなく、塗りつぶしたら塗りつぶしたままにしたいです。

関連するQ&A

  • excel VBAの構文の内容を訳してくださいませ!

    すいません、まったくマクロやVBA関係は、だめで、、 上司が、どこかのサイトで見つけた操作をやってみようと思ったら 下記の内容をVisual Basic Editorを開いて、 ThisWorkbookに下記のコードを入力して、さらに条件付書式をすると セルを選択すると、その行が自動的にハイライトになるしく。。 私には、よくわからない世界になってきたような。。 すんません、またまたお願いします! 『入力するコード内容』 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Application.ScreenUpdating = True End Sub そして、条件付書式より ”数式が”を選択して=CELL("row")=ROW()を入力します。 ⇒ごめんなさいです。  どこで、探してきたのか、わかりませんが、詳細をテキストにして  送付されてきました。すみません。  内容を説明できないでいます。  

  • エクルで選択した行に色をつけて見易くしたい

    エクセルで選択した行に色をつけて見易くしたいと思い、以下のVBAを見つけて実行してみましたが、元のセルに色がついているとエラーが出てしまいます。 解決方法はないものでしょうか? Private m_ROW As Long '変更前の行番号 Private m_IRO As Long '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Private Sub Worksheet_SelectionChange(ByVal Target As Range) '選択した行に色を付ける If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If m_ROW <> 0 Then Rows(m_ROW).Interior.ColorIndex = m_IRO End If '変更前の行番号と色を記憶 m_ROW = Target.Row m_IRO = Rows(Target.Row).Interior.ColorIndex '色を変更 Rows(Target.Row).Interior.ColorIndex = MYCOLOR End If End Sub どなたかお助けください、、宜しくお願い致します。

  • 選択セルに計算結果を表示

    エクセルVBAで選択セルに計算結果を表示したいのですが、教えてください。 A列には、ID B・C列には値が入力されています。 下記の構文ですと、行のどこをダブルクリックしても、D列に合計が表示されます。 D列以降のどの行をダブルクリックしても、アクティブなセルに合計を表示したいです。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cells(Target.Row, 4) = Cells(Target.Row, 2) + Cells(Target.Row, 3) End Sub

  • DataGridViewで1行全てを選択状態にするには

    VB.NETのDataGridViewについての質問です。 DataGridViewでセルを選択した時に、そのセルの行を全て選択したいのですが、その方法がわからず困っています。 単純な方法を試してみたのですが Private Sub DataGridView_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView.CellClick DataGridView.CurrentCell = DataGridView.Rows(e.RowIndex).Cells(-1) End Sub この方法ですと、Cells(-1)の所で境界外となって上手くいかないようです。 何か良い方法がありましたら、ご教授願います

  • 選択セルの行全体の色付け

    仕事でエクセルを使う事が多く、特に列、行がたくさんある一覧を表を日常業務で使っています。そこで選択セルの行全体が色付けされるような仕組みを作りたく。(イメージ的には、今触っているセルがどの行なのか目で追い易くする感じです)このようなマクロを作りました。ただ、これでは元々色が付いているセルの色が、色無しに変化してしまう為、使えません。使っている表の元々の色を変化させずに、色で簡単に行全体を目で追えるようにするにはどうしたら良いでしょうか?本当に申し訳ないですが、わかる方いらっしゃいましたら、ご教授お願い致します。 Public m Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If m <> 0 Then   Range(Cells(m, 1), Cells(m, 256)).Interior.ColorIndex = xlNone  End If  Range(Cells(Target.Row, 1), Cells(Target.Row, 256)).Interior.ColorIndex = 6  m = Target.Row End Sub

  • マクロでシート名を変更を変更したい

    A1セルの値をシート名にするマクロは以下のとおりだと思います。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then Sh.Name = Target.Range("A1").Value End Sub では、E6セルの値をシート名にすることは可能でしょうか? よろしくお願いします。

  • エクセルで選択中の列や行を見やすくしたい

    タイトルのとおり、選択中の列や行の色が一列全部変るように したいと思い調べ、以下のVBEコードを見つけたんですが Public m Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If m <> 0 Then   Range(Cells(m, 1), Cells(m, 256)).Interior.ColorIndex = xlNone  End If  Range(Cells(Target.Row, 1), Cells(Target.Row, 256)).Interior.ColorIndex = 6  m = Target.Row End Sub 確かに色は変るんですが、もともとついている箇所の色が 消えていってしまいます。 色が消えずに同じことは出来ないでしょうか。 ご存知の方いらっしゃいましたら教えてください。 よろしくお願いします。

  • Excelでシート名と最終更新日を自動表示したい

    Excelを使って (1)セルA1に入れた名目をシート名にし (2)セルH1には、最終更新日を自動で入れたいです。 調べた結果、 シート名を右クリックして「コードの表示」から (1)は Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub を入れてうまくいきましたが、 (2)は Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub を入れてみましたが(←調べましたもの) うまくいきませんでした。 単純に、 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub とつなげて入れるのではだめなんでしょうか? それとも、(2)の何かが間違っていますか? ご教授願います。

  • セルの選択でその行に色を付けたい

    横に長いデータがあり、その1つのセルを選択するとその行全体に色が付くようにしたいのです。過去の質問で以下のようなものを見つけましたが、問題はその場合、通常のコピー→貼り付けができない点です。 その辺を問題なく行える方法はないでしょうか? よろしくお願いいたします。 Public m, n Private Sub Worksheet_SelectionChange(ByVal Target As Range) If m <> 0 Then Range(Cells(m, 1), Cells(m, 256)).Interior.ColorIndex = n End If m = Target.Row n = Target.Interior.ColorIndex Range(Cells(Target.Row, 1), Cells(Target.Row, 256)).Interior.ColorIndex = 6 End Sub

  • Excel VBA 2007: 選択されているセルを含む行を処理?

    いつもお世話になります。 以下の問題について何かわかりましたらご教示ください。 複数のセルが選択されているとします。 選択されているセルを■、されていないセルを□とします。 問題は「選択されているセルを含む行のE列にマークをしろ」です。 (例題1) \ABCDE 1□□□□□ 2□□■□□ 3□□■□□ 4□□■□□ 5□□□□□ 今、C2、C3、C4が選択されています。 影響のある行は2,3,4行目ですので、以下のようになります。 (マークを*で示します) \ABCDE 1□□□□□ 2□□■□* 3□□■□* 4□□■□* 5□□□□□ 以下、前と後で例題を示します。 (例題2) \ABCDE 1□□□□□ 2■■□□□ 3□□□□□ 4□□□□□ 5□□□□□ => \ABCDE 1□□□□□ 2■■□□* 3□□□□□ 4□□□□□ 5□□□□□ (例題3) \ABCDE 1□□□□□ 2□□□□□ 3□□□□□ 4□□□■□ 5□□■■□ => \ABCDE 1□□□□□ 2□□□□□ 3□□□□□ 4□□□■* 5□□■■* (例題4) \ABCDE 1■□□□□ 2□■□□□ 3□□□□□ 4□□□■□ 5□□□□□ => \ABCDE 1■□□□* 2□■□□* 3□□□□□ 4□□□■* 5□□□□□ 以下のようにやればわかっているんですが、この場合は縦方向だけでなく横方向にも処理するので、同じ行について何回も処理が発生してしまいます。 実際には縦にも横にもすごく広いので、避けたいところです。 Sub test() Dim cell As Range For Each cell In Selection Cells(cell.row, 5).Value = "*" Next cell End Sub 以下のようにすれば必ず縦方向優先ですが、同じ理由で避けたいです。 Sub test() Dim myRow as long Dim myCol as long For myRow = 1 to 65536 For myCol = 1 to 4 If Cells(myRow, myCol).Selected Then Cells(myRow, 5).Value = "*" Exit For End If Next myCol Next myRow End Sub もっといい方法があればご教示ください。 よろしくお願いします!

専門家に質問してみよう