- 締切済み
コンパイルエラー 属性が違う?
はじめて、質問させていただきます。 マクロの勉強を始めたばかりの初心者ですが、こちらの質問や回答を拝見し、勉強させて頂いております。 早速ですが過去の質問で『選択行のセルの色を変更する』というマクロ(下記のコード)があったのですが、私にとっては実用的で魅力のあるコードでしたので活用させて頂いております。現在シートに、このコードを記録してシートがアクティブになった時に実行させているのですが、これを単純にマクロ(1)とマクロ(2)にコードを記載してマクロの実行で、有効と無効に出来るようにしたいのですが、『コンパイルエラー 属性が適切ではありません』というエラーになります。 現在、私のスキルはマクロの記録で覚えさせたコードを組み合わせる位のレベルです。 初歩的でお恥ずかしい質問ですが、ご指導下さい。 ----------コード---------- Private m_ROW As Range '変更前の行番号 Private m_IRO As Variant '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Sub test() '選択した行に色を付ける Dim Target As Range Dim i As Integer Dim 処理対象セル As Range Dim 処理対象セル色 As String Set Target = Selection If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If Not m_ROW Is Nothing Then i = 0 For Each 処理対象セル In m_ROW 処理対象セル.Interior.ColorIndex = CInt(m_IRO(i)) i = i + 1 Next Set m_ROW = Nothing m_IRO = "" Else '変更前の行番号と色を記憶 Set m_ROW = Target For Each 処理対象セル In m_ROW m_IRO = m_IRO & " " & 処理対象セル.Interior.ColorIndex Next m_IRO = Split(Trim(m_IRO)) '色を変更 Target.Interior.ColorIndex = MYCOLOR End If End Sub
- yonkuma
- お礼率0% (0/5)
- Visual Basic
- 回答数5
- ありがとう数0
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- myRange
- ベストアンサー率71% (339/472)
有効、無効の切替をしたいということですが、 マクロTestを実行しなければ、それが、即ち、無効ということになるのではありませんか? 無効の意図するところがいまいちピントきません。 も少し具体的に補足したらどうでしょうか。 ま、それはそうとして、以下のコードをちょと試してみてください。 (コードの説明) ●「有効」マクロ これを実行後、マクロTestがちゃんと実行される ●「無効」マクロ これを実行後に、マクロTestを実行しても無反応。 見た目、マクロTestが無効になる。 '------ 全て標準モジュール ----------------- Option Explicit Private m_ROW As Range '変更前の行番号 Private m_IRO As Variant '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Private 有効フラグ As Boolean '●有効無効の判断用 '--------------------------------------- Sub 有効() 有効フラグ = True Call Test End Sub '-------------------------------- Sub 無効() 有効フラグ = False m_IRO = Empty Set m_ROW = Nothing End Sub '-------------------------------- Sub test() If 有効フラグ = False Then Exit Sub ==以下、質問者提示のコード== End Sub '------------------------------------------- 有効フラグで、マクロtestを実行するかどうか判断してます。 それから、最初の質問に >シートがアクティブになった時に実行させている とありますが、これは削除しておくこと。 以上です。
- imogasi
- ベストアンサー率27% (4737/17068)
コードを読者に読み解かすのでなく 何がしたいのか、 文章で、質問文の始めに明記のこと。 前置き文などは適当にすべきです。 >選択行のセルの色を変更する というのがテーマなのかな。 >マクロ(1)とマクロ(2) は質問文のどこにある?無いのでは?では。書かないほうがよい。自分の経験・思考過程など、普通は書く必要なし。書くなら最後に注記程度にすべき。 >シートがアクティブになった時に実行させているのですが 例えばSheet2に限り「選択行のセルの色を変更する」のか? >マクロの実行で、有効と無効に出来るようにしたいのですが これはどういう意味?。 ーー 初心者が条件付き書式の真似事のようなことを、VBA(特に素人VBA)でやるのは無理があると経験している。 VBAは操作でも出来ることは、人手によらず早く出来るもので、人手では出来にくい物は苦手。 セルを選択したとき、Selection_Change イベントがあるが、他の用途に考えられている場合とか、その働きを やめるキッカケを仕組むのが難しいと思う。 下記のように、過去に、エクセルを良くわかった人が、見つけた方法でもやらないとIF文でやっているようでは難しいと思う。 これをつかわせてもらうしか無いようにおもう。 VBAの勉強は、他のデータ処理の課題(セルの値を扱う)がいくらでも在るのでそちらでやること。 参考 http://okwave.jp/qa2692513.htmlの#1 そこに載っている http://blog.livedoor.jp/andrewj/archives/18035971.html の方法 ーーー 微妙な点があって、WEB記載どおりでは目的の通りにならないかもしれないので、今私がテスト済みの下記でやってみてください。 ー Sheet1のタブで右クリック(Sheet1だけの発動となる) 「コードの表示」を選択 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub のイベントを選択 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'MsgBox Target.Address Application.ScreenUpdating = True DoEvents End Sub のようにコードを入れる。 Sheet1にもどって この効力を発揮してほしい、セル範囲を指定する。(全セル範囲指定でも出来るかもしれない。) 書式ー条件付書式ー数式が 式に =CELL("row")=ROW() <==非常に技巧的なところ セルのパターン色の書式に淡い色を指定 OK ー これでSheet1の指定範囲のセルをクリックするその行に、色がつき、その直前に指定していた行の色は消える。
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
Sub Macro1() ← これは不要 Private m_ROW As Range '変更前の行番号 Private m_IRO As Variant '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 指摘した行を削除すればエラーは発生しません。希望通りの動作かどうかは不明ですが。 > このマクロを無効にする エクセルのメニューで「ツール」→「マクロ」→「セキュリティ」を開き、セキュリティレベルを「最高」にすればマクロは動かなくなります。 # コードからマクロの無効化ができるかと思い、この動作を記録マクロでやってみましたが何も記録されませんでした。アプリケーションレベルの設定だからかな?
- A88No8
- ベストアンサー率52% (834/1602)
こんにちは #1です。 ENDIFを足して実行したらエラーは出ないようですね(^^;?
- A88No8
- ベストアンサー率52% (834/1602)
こんにちは まず、IF文の処理ブロックの終わりを明示するENDIFが足りないようです。 どこに置きますか? ----------コード---------- Private m_ROW As Range '変更前の行番号 Private m_IRO As Variant '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Sub test() '選択した行に色を付ける Dim Target As Range Dim i As Integer Dim 処理対象セル As Range Dim 処理対象セル色 As String Set Target = Selection If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If Not m_ROW Is Nothing Then Let i = 0 For Each 処理対象セル In m_ROW 処理対象セル.Interior.ColorIndex = CInt(m_IRO(i)) Let i = i + 1 Next Set m_ROW = Nothing Let m_IRO = "" Else '変更前の行番号と色を記憶 Set m_ROW = Target For Each 処理対象セル In m_ROW Let m_IRO = m_IRO & " " & 処理対象セル.Interior.ColorIndex Next Let m_IRO = Split(Trim(m_IRO)) '色を変更 Let Target.Interior.ColorIndex = MYCOLOR End If End Sub
補足
A88No8さん おはようございます。 早速の対応ありがとうございます。 ご指摘のENDIFですが 最後に付けたいと思いますが・・ ----------コード---------- Private m_ROW As Range '変更前の行番号 Private m_IRO As Variant '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Sub test() '選択した行に色を付ける Dim Target As Range Dim i As Integer Dim 処理対象セル As Range Dim 処理対象セル色 As String Set Target = Selection If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If Not m_ROW Is Nothing Then i = 0 For Each 処理対象セル In m_ROW 処理対象セル.Interior.ColorIndex = CInt(m_IRO(i)) i = i + 1 Next Set m_ROW = Nothing m_IRO = "" Else '変更前の行番号と色を記憶 Set m_ROW = Target For Each 処理対象セル In m_ROW m_IRO = m_IRO & " " & 処理対象セル.Interior.ColorIndex Next m_IRO = Split(Trim(m_IRO)) '色を変更 Target.Interior.ColorIndex = MYCOLOR End If End If '←ここに追記しました。 End Sub
関連するQ&A
- エクルで選択した行に色をつけて見易くしたい
エクセルで選択した行に色をつけて見易くしたいと思い、以下の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 どなたかお助けください、、宜しくお願い致します。
- 締切済み
- Visual Basic
- エクセルのアクティブセルの色を変えるには
エクセルについて質問させて頂きます。 エクセルのアクティブになったセルの色を変えたいのですが 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 上記の表記で行単位の変更は出来たのですが、セル単位での変更方法が分かりません。 変更の条件として、 ・アクティブなセルの色のみを変える ・アクティブからノンアクティブになった場合、前回指定されていた色へ戻す。 といった風にする事は可能でしょうか? 可能であればぜひご教授お願いいたします。
- 締切済み
- オフィス系ソフト
- Excel VBA ユーザー定義関数をイベントマクロで使用する
Excel VBA ユーザー定義関数をイベントマクロで使用する Excel2003を使用しています。 あるセルと同色に塗りつぶされたセルの値を合計したく、下記1のユーザー定義関数を作成しました。 このユーザー定義関数を下記2のイベントプロシージャ内で呼び出して使用したいのですが、可能でしょうか? 可能であれば、どのようにコードを書いたらいいでしょうか? Call を使用するのかな?と思い、コードを追加してみましたが、引数の型が一致しないといった内容のエラーメッセージが表示されてしまいました。 よろしくお願いします。 ------------------------------------------------------------- 1.ユーザー定義関数(同色セルの合計) Function SumColor(hanni As Range, iro As Range) As Double Dim myrng As Range SumColor = 0 For Each myrng In hanni If myrng.Interior.ColorIndex = iro.Interior.ColorIndex Then SumColor = SumColor + myrng.Value End If Next myrng End Function 2.イベントマクロ(C列3行目以下ダブルクリックで塗りつぶし) Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 3 And Target.Row >= 34 Then Range(Cells(Target.Row, 3), Cells(Target.Row + 1, 38)).Interior.ColorIndex = 36 End If End Sub
- ベストアンサー
- オフィス系ソフト
- エクセル:シートを切り替えずに別シート上の操作をする
タイトルが正しいかどうか疑問ですが。 シート[Sheet1]にて値を入力したアドレス(の行番号と列番号)を取得し、 その周囲のセルの罫線の色を赤(3)から灰色(15)に置換するコードを作っています。 Sheet1のコードには、 Private Sub Worksheet_Change(ByVal Target As Range) AAA Target End Sub とだけ書き、入力があったらプロシージャAAAへTargetを持って飛びます。 Sub AAA(ByVal Target As Range) Dim M_Row As Integer Dim M_Clm As Integer Dim Y As Range M_Row = Target.Row M_Clm = Target.Column For Each Y In Worksheets("Sheet1").Range(Cells(M_Row - 2, M_Clm), Cells(M_Row + 1, M_Clm + 5)) With Y If .Borders(xlEdgeTop).ColorIndex = 3 Then .Borders(xlEdgeTop).ColorIndex = 15 If .Borders(xlEdgeLeft).ColorIndex = 3 Then .Borders(xlEdgeLeft).ColorIndex = 15 If .Borders(xlEdgeBottom).ColorIndex = 3 Then .Borders(xlEdgeBottom).ColorIndex = 15 End With Next End Sub ここまでは正常に動きます。 この後に、アクティブでないシート[Sheet2]の同じセル範囲にある罫線の色も同じように置換したいので、 上記コードに続けて、以下のように書きました。 Sub AAA(ByVal Target As Range) Dim M_Row As Integer Dim M_Clm As Integer Dim Y As Range M_Row = Target.Row M_Clm = Target.Column For Each Y In Worksheets("Sheet1").Range(Cells(M_Row - 2, M_Clm), Cells(M_Row + 1, M_Clm + 5)) With Y If .Borders(xlEdgeTop).ColorIndex = 3 Then .Borders(xlEdgeTop).ColorIndex = 15 If .Borders(xlEdgeLeft).ColorIndex = 3 Then .Borders(xlEdgeLeft).ColorIndex = 15 If .Borders(xlEdgeBottom).ColorIndex = 3 Then .Borders(xlEdgeBottom).ColorIndex = 15 End With Next For Each Y In Worksheets("Sheet2").Range(Cells(M_Row - 2, M_Clm), Cells(M_Row + 1, M_Clm + 5)) With Y If .Borders(xlEdgeTop).ColorIndex = 3 Then .Borders(xlEdgeTop).ColorIndex = 15 If .Borders(xlEdgeLeft).ColorIndex = 3 Then .Borders(xlEdgeLeft).ColorIndex = 15 If .Borders(xlEdgeBottom).ColorIndex = 3 Then .Borders(xlEdgeBottom).ColorIndex = 15 End With Next End Sub これだと、 For Each Y In Worksheets("Sheet2").Range(Cells(M_Row - 2, M_Clm), Cells(M_Row + 1, M_Clm + 5)) の部分で失敗します。 この1行前に、 Sheets("Sheet2").Select と入れてやると正常に動作するのですが、 シートを切り替えずにやりたいと思っています。 可能でしょうか? 以下のように、 実行後にSheet1に戻し、 それらを Application.ScreenUpdating = False Application.ScreenUpdating = True で挟むことで、見た目はシートを切り替えずに実行できるのですが、 実際にこのコードを組み込んでいるシートはシート上にあるデータが多いためか(600行×100列程度)、 全く同じコードを実行しても一瞬画面がチラついてしまいます。 (新規Bookで同じコードを組み込んで、何行かに罫線を引いただけのシートだと全くチラつかなかったので、 シート上のデータが多いせいじゃないかと思いました) Sub AAA(ByVal Target As Range) Dim M_Row As Integer Dim M_Clm As Integer Dim Y As Range M_Row = Target.Row M_Clm = Target.Column For Each Y In Worksheets("Sheet1").Range(Cells(M_Row - 2, M_Clm), Cells(M_Row + 1, M_Clm + 5)) With Y If .Borders(xlEdgeTop).ColorIndex = 3 Then .Borders(xlEdgeTop).ColorIndex = 15 If .Borders(xlEdgeLeft).ColorIndex = 3 Then .Borders(xlEdgeLeft).ColorIndex = 15 If .Borders(xlEdgeBottom).ColorIndex = 3 Then .Borders(xlEdgeBottom).ColorIndex = 15 End With Next Application.ScreenUpdating = False Sheets("Sheet2").Select For Each Y In Worksheets("Sheet2").Range(Cells(M_Row - 2, M_Clm), Cells(M_Row + 1, M_Clm + 5)) With Y If .Borders(xlEdgeTop).ColorIndex = 3 Then .Borders(xlEdgeTop).ColorIndex = 15 If .Borders(xlEdgeLeft).ColorIndex = 3 Then .Borders(xlEdgeLeft).ColorIndex = 15 If .Borders(xlEdgeBottom).ColorIndex = 3 Then .Borders(xlEdgeBottom).ColorIndex = 15 End With Next Sheets("Sheet1").Select Application.ScreenUpdating = True End Sub よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 選択セルの行全体の色付け
仕事でエクセルを使う事が多く、特に列、行がたくさんある一覧を表を日常業務で使っています。そこで選択セルの行全体が色付けされるような仕組みを作りたく。(イメージ的には、今触っているセルがどの行なのか目で追い易くする感じです)このようなマクロを作りました。ただ、これでは元々色が付いているセルの色が、色無しに変化してしまう為、使えません。使っている表の元々の色を変化させずに、色で簡単に行全体を目で追えるようにするにはどうしたら良いでしょうか?本当に申し訳ないですが、わかる方いらっしゃいましたら、ご教授お願い致します。 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
- ベストアンサー
- Visual Basic
- EXCELで4色の色をつけるVBA(既存)を最後のシートまで実行するには?
エクセルのVBAで質問です。 現在、下記のVBAにて、エクセルに4色の色をつけています。 内容 ・処理範囲内(D5:AI50)の列の値が、 ・指定した行(4行目)の値から見て、 ・+5、+10、-5、-10の場合、それぞれ指定した色をつけています ・ただしC列の値が30未満の行は色付けなし 現状では、このマクロはアクティブシートのみで使えるため、 100シートあれば、それぞれのシートにおいて そのつどマクロを実行しています。 これを、一度の実行で最終シートまで実行できるようにしたいのです。 VBA初心者のため、見よう見まねでループを試してみたものの、 どうもうまく動きませんでした。 なにとぞご教授のほど、お願いいます。 ●以下、現在使用しているVBA Sub 条件付4色の標本数1() Dim 処理範囲 As Range Dim 先頭の行番号 As Long Dim 全体の行数 As Long Dim 各セル As Range Dim 差分 As Single Dim 標本数 As Single Set 処理範囲 = Range("D5:AI50") For Each 各セル In 処理範囲 標本数 = Cells(各セル.Row, "C").Value If 標本数 >= 30 Then 差分 = 各セル.Value - Cells(4, 各セル.Column).Value Select Case 差分 Case Is <= -10 各セル.Interior.ColorIndex = 37 'ペールブルー 各セル.Font.ColorIndex = 1 Case Is <= -5 各セル.Interior.ColorIndex = 34 '薄い水色 各セル.Font.ColorIndex = 1 Case Is >= 10 各セル.Interior.ColorIndex = 6 '黄37 各セル.Font.ColorIndex = 1 Case Is >= 5 各セル.Interior.ColorIndex = 19 '薄い黄 各セル.Font.ColorIndex = 1 Case Else 各セル.Interior.ColorIndex = xlNone '無色 End Select End If Next End Sub
- 締切済み
- オフィス系ソフト
- エクセルで選択中の列や行を見やすくしたい
タイトルのとおり、選択中の列や行の色が一列全部変るように したいと思い調べ、以下の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 確かに色は変るんですが、もともとついている箇所の色が 消えていってしまいます。 色が消えずに同じことは出来ないでしょうか。 ご存知の方いらっしゃいましたら教えてください。 よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- セルの選択でその行に色を付けたい
横に長いデータがあり、その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
- ベストアンサー
- その他MS Office製品
- マクロセルの値によってセルの色を消す
エクセル2013です。 セルの値が0又は空白の場合でそのセルが色塗りされていたら色を消す というマクロをを作成しました。 ただ700行55列では処理が遅いです。 Sub 色消() '成功 Dim 最終行 Dim 最終列 Dim 対象セル As Range 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) If 対象セル.Value = 0 Or 対象セル = "" Then 対象セル.Interior.ColorIndex = 0 End If Next 対象セル End Sub 対象範囲から対象セルを全部見つけて一括処理すれば早いのではと 以下のマクロを作成してみましたが Set 対象範囲 = Cells.Find(What:=0 Or "", LookIn:=xlValues, LookAt:=xlWhole) で構文ERRです。 どこを直せばいいのでしょうか? よろしくお願いします。 Sub 色消2() '2014/8/4 '失敗 Dim 対象範囲 Dim 最終行 Dim 最終列 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 対象範囲 = Range(Cells(10, 17), Cells(最終行, 最終列)) Set 対象範囲 = Cells.Find(What:=0 Or "", LookIn:=xlValues, LookAt:=xlWhole) If Not 対象範囲 Is Nothing Then 対象範囲.Interior.ColorIndex = 0 End If End Sub
- ベストアンサー
- Excel(エクセル)
- vba 指定した日付範囲でセルの色を塗る
急遽、エクセルVBAを組んでくれと頼まれたのでわかる方、教えていただけますか? 開始日時(A行)と終了日時(B行)があり、 開始と終了の範囲でC以降日付になっており 指定の範囲内でセルの色が塗られるいうものなのですが なにせ急ぎとVBAがほとんどわからないのでなるべくわかりやすく 教えていただけるとありがたいです。 ちなみにsheetにコードを記入するのとmoduleにコードを記入するのでは どう違うのですか?わからないまでも一応、色が塗られるところまでは できたのですがどうやってセルの時間を取得して範囲を指定すれば 良いのかなどがわかりませんどうかよろしくお願い致します。 下記は作成途中ですが・・・ Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim row As Integer Dim line As Integer row = 5 line = 9 Set objR = Range("A1").Resize(1, 4).Offset(1, 2) objR.Interior.ColorIndex = 8 End Sub
- ベストアンサー
- Visual Basic
補足
A88No8さん 度々すみません、私の質問の仕方が悪いためご理解頂けなかったと思うのですが、ENDIFが漏れていたのは私の書き込みの際の手落ちでありました。 実は、このコードをマクロの記録で作成したものに下記のように追記してコンパイラーエラーが出るのを修正したいのです。 ※あともうひとつ、このマクロを無効にするものもご伝授いただきたいのですが。 以上 宜しくお願いいたします。 --------------コード---------- Sub Macro1() Private m_ROW As Range '変更前の行番号 Private m_IRO As Variant '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Sub test() '選択した行に色を付ける Dim Target As Range Dim i As Integer Dim 処理対象セル As Range Dim 処理対象セル色 As String Set Target = Selection If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If Not m_ROW Is Nothing Then i = 0 For Each 処理対象セル In m_ROW 処理対象セル.Interior.ColorIndex = CInt(m_IRO(i)) i = i + 1 Next Set m_ROW = Nothing m_IRO = "" Else '変更前の行番号と色を記憶 Set m_ROW = Target For Each 処理対象セル In m_ROW m_IRO = m_IRO & " " & 処理対象セル.Interior.ColorIndex Next m_IRO = Split(Trim(m_IRO)) '色を変更 Target.Interior.ColorIndex = MYCOLOR End If End If End Sub