質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

11809閲覧

指定範囲で選択されたセルの行を塗りつぶしたい

hirororo

総合スコア72

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/08/16 03:07

編集2018/08/16 03:16

いつもこちらのサイトでは、お世話になっております。

Excelのマクロについて質問させてください。

指定範囲で選択されたセルの行を塗りつぶしたいのですが、
方法はありますでしょうか?

例えば、Range("A4:E9999")の範囲で
選択されたセルの行だけを塗りつぶしたいと思っております。

それ以外の範囲はマクロが適用されないようにしたいと思っております。

以下のコード1で試したところ、
選択されたセルの行全体が塗りつぶされてしまうので、
コード2を試すとコンパイルエラーが出ました。

■コード1

VBA

1Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 2 Dim highlight As Integer 3 highlight = 6 4 5 Cells.Interior.ColorIndex = 0 6 Rows(Target.Row).Interior.ColorIndex = highlight 7 8End Sub

■コード2

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Dim highlight As Integer highlight = 6 Cells.Interior.ColorIndex = 0 If Range("A4:E999999").Select Then Rows(Target.Row).Interior.ColorIndex = highlight End If End Sub

アドバイスいただけると幸いです。
どうぞよろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

今出先なので試せていませんが、下記のような感じでどうですか?

VBA

1Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 2 Dim highlight As Integer 3 highlight = 6 4 5 Cells.Interior.ColorIndex = 0 6 7 Set tr = Intersect(Target.EntireRow, Range("A4:E999999")) 8 If Not tr Is Nothing Then 9 tr.Interior.ColorIndex = highlight 10 End If 11 12End Sub

Intersect は、2つの範囲が共有しているセルを返すメソッドです。
それで、共有部分があれば(Nothingでなければ)その範囲を色付けします。
ちなみに tr は Target Range の略のつもりで、Range型変数です。

投稿2018/08/16 03:36

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirororo

2018/08/16 06:31 編集

素早いご回答ありがとうございます! 作成頂いたプログラムを入力したところ、 指定範囲のセルの行を塗りつぶすことができました。 出先でいらっしゃる中、 的確なアドバイスありがとうございます。 ここで出た問題について、 一つ質問させて頂いてもよろしいでしょうか? 指定範囲以外で塗りつぶしたセルの背景色も デフォルトの白に戻ってしまいますので、 こちらを元に戻らないようにする方法はありますでしょうか? 条件付き書式を試してみたのですが、 デフォルトの白に戻ってしまいます。 アドバイスいただけると幸いです。 どうぞよろしくお願い申し上げます。
pi-chan

2018/08/16 06:40

それはプログラム内で下記のように指定しているからでは? > Cells.Interior.ColorIndex = 0 指定範囲内だけをリセットしたいなら > Range("A4:E999999").Interior.ColorIndex = 0 とすれば良いです。
hirororo

2018/08/16 06:49

ご回答ありがとうございます! おかげさまで無事、解決できました。 的確なアドバイスありがとうございますm(__)m
guest

0

Target.Row で、該当行が取得できますよね?
そして、列はA~Cが対象。

「999999」は意味のある数字でしょうか?
今は特に意識せず進めます。

セル範囲は、RangeとCellsを組み合わせる事でも指定できます。
詳細はご自分で調べてくださいね。
With Me
.Range(.Cells(Target.Row , 1), .Cells(Target.Row , 3)).Interior.ColorIndex = highlight
End With

投稿2018/08/16 04:02

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirororo

2018/08/16 06:14

素早いご回答ありがとうございます! 「999999」は列の下まで指定範囲が届くように、 この数字にさせて頂きました。 RangeとCellsについては詳しく調べて、 作成頂いたコードで試したいと思います。 アドバイスありがとうございますm(__)m
guest

0

選択した選択した範囲を for each 構文で処理してはどうでしょうか。

Range("A4:E999999").Select

Dim r as Range
for each r in Selection
r.Interior.ColorIndex = highlight
next

投稿2018/08/16 03:21

TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ExcelVBAer

2018/08/16 03:59

何の解決にもなっていませんよ。。。 問題の意図は、「選択した行の指定した列範囲を塗り潰したい」、ということかと。
hirororo

2018/08/16 06:17 編集

素早いご回答ありがとうございます! コードを理解するために、ご提案頂いた for each 構文を勉強させて頂きたいと思います。
TanakaHiroaki

2018/08/16 06:26

for each r in Selection は役に立つと思います。 必要なセル範囲が都度変わる場合、事前にセル範囲を 選択しマクロを実行して、処理させることも可能です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問