• ベストアンサー

セルの指定範囲の色付け VBA

初心者です。 エクセル2010を使用しています。 社内のエクセルシートで工事の依頼を物件ごとに記入していきます。(A:N) 工事完了後、(A:N)に色を付けます。 毎回パレットで選んでいます。色番は16777164 マクロで一連の動作を記憶させ、ボタン一つで出来るようには作れたのですが、元々色の付いている箇所だけはそのままの色にしたいのです。 元々色がついてる理由ですが、工事には材料が必要なのですが、仕入れて請求が来るのが月末となります。金額の入力を忘れない為に色を付けています。 そういった場合はどのようなプログラムになるのでしょうか。 ご教示お願い致します。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

> なので、終わった工事の行を選択し、1クリックで塗りつぶすボタンを作りたいのです。 選択した範囲 = Selection 選択した範囲の行 = Selection.EntireRow 選択した範囲の行 の A:N = Range("A:N (" & Selection.EntireRow.Address(0, 0) & ")") Sub Re8762667od() Dim c As Range   If TypeName(Selection) <> "Range" Then Exit Sub   For Each c In Range("A:N (" & Selection.EntireRow.Address(0, 0) & ")")     If c.MergeArea(1).Interior.ColorIndex = xlColorIndexNone Then       c.MergeArea.Interior.Color = 16777164     End If   Next End Sub > なので、終わった工事の行を選択し、1クリックで塗りつぶすボタンを作りたいのです。 > この黄色のセルだけ塗りつぶさず、他のセルを塗りつぶしたいのです。 黄色 = 65535 = vbYellow Sub Re8762667od2() Dim c As Range   If TypeName(Selection) <> "Range" Then Exit Sub   For Each c In Range("A:N (" & Selection.EntireRow.Address(0, 0) & ")")     If c.MergeArea(1).Interior.Color <> vbYellow Then       c.MergeArea.Interior.Color = 16777164     End If   Next End Sub

dododontakos
質問者

お礼

回答も早く、求めていた物を作って頂きましたので、ベストアンサーとさせて頂きます! ありがとうございます。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! >仕入れて請求が来るのが月末となります。金額の入力を忘れない為に色を付けています。 すなわち、請求書が来るとその列に請求額が記入されるわけですね? 条件付き書式を使ってはどうでしょうか? 表の具体的なレイアウトが判らないので、勝手にH列を「請求金額」を記入する列とした場合です。 A~N列すべてを範囲指定 → 条件付き書式 → 新しいルール → 数式を使用して・・・ → 数式欄に =AND($A1<>"",$H1="") として → 書式 → 塗りつぶし → カラーパレットから好みの色を選択(色がなければ「その他の色」から選択)しOK これでA列に何らかのデータが入り、H列が未入力の場合にA~N列に色が付きます。 (H列にデータを入力した段階で色が消えます) ※ 数式内の$A1部分はA列でなくても構いません、A列に通し番号が入っている場合があると思いますので、 Aの部分は「取引先」など必ず何らかのデータを入れる列にします。 当然H列も実際の「請求金額」を入れる列とします。m(_ _)m

dododontakos
質問者

お礼

私の説明不足で少し違う回答が… でも、回答頂きありがとうございます! 更に勉強していきたいと思います。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 普通にVBAらしく書くと、こんな感じでしょうか。 A:N のように列を丸ごと指定するのは、 処理も遅く、ファイルサイズが肥大化しますから、 (↑これはExcelの仕様の問題です) 行数を絞って指定する必要があります。   For Each c In Range("A2:N101") セル範囲は、仮に、A2:N101 にしていますが、 適宜指定し直してください。 行数が一定ではないシートの場合、普通は、 基準となる列(空セルが無い列)を決めておいて、 最下行を取得します。 例えば、A列には空セルが無い、という前提で、 A列の最下行を取得する場合は、   For Each c In Range("A2:N" & Cells(Rows.Count, "A").End(xlUp).Row) のように書換えることになります。 B列には空セルが無い、という場合なら、 "A"を"B"に書き換えるような要領で修正してください。 Sub Re8762667() Dim c As Range   For Each c In Range("A2:N101") ' ← 要指定 セル範囲      If c.MergeArea(1).Interior.ColorIndex = xlColorIndexNone Then       c.MergeArea.Interior.Color = 16777164     End If   Next End Sub

dododontakos
質問者

補足

説明が足らず、申し訳ございません。 A3~N3までは担当者、依頼元、物件名、号室、間取り、入居中か空室か、発注店1、発注店2、発注店3、工事金額、発注金額1、発注金額2、発注金額3、工事金額から発注金額1~3を引いた金額 となっております。 記入方法は一行につきひとつの工事となります。 工事は何件も抱えているのですが、一気に全て終わる訳ではないです。 なので、終わった工事の行を選択し、1クリックで塗りつぶすボタンを作りたいのです。 発注店と発注金額のセルは必ずしも全て埋まる訳ではないです。 この発注店のセルに卸店、発注金額が後で入る事になります。なので、忘れない為にそのセルだけ黄色く塗ってあります。 この黄色のセルだけ塗りつぶさず、他のセルを塗りつぶしたいのです。

関連するQ&A

  • エクセルのマクロで範囲指定をセルに番号を入れて、範囲指定したセルの字の

    エクセルのマクロで範囲指定をセルに番号を入れて、範囲指定したセルの字の色を白にして消したいのですが、番号を入れるマクロがわかりません。マクロに記録でA2からB12までのセル内の字の色を白 にする方法は Sub 字を消す() ' ' 字を消す Macro ' ' Range("A2:B11").Select With Selection.Font .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 End With End SubでできるのですがD3に開始番号、E3に終了番号を指定する方法がわかりません。ご教授お願いします

  • VBA セルの色を変更する

    VBA(エクセル2007使用)で、セルの背景色を変更する場合についての質問です。 マクロを実行する度に、セルの背景色を変更するマクロを作成しました。 オレンジ→水色→緑→灰色→無色  という風に変わっていくところまでは できたのですが、これだとマクロを実行するのにセルの状態が無色か、指定した カラーコードで塗りつぶされていないと実行できません。 下記、コードの一番最初の Case で ”背景色がどんな色の場合でも”という条件に したいのですが、どのように記載したらわからずにいます。。。 ---------------------------- Sub 色チェンジ() n0 = ActiveCell.Interior.ColorIndex Select Case n0 Case xlNone   ’ここを”どんな色の場合でも、、、という条件にしたいです。。” Selection.Interior.ColorIndex = 40 Case 40 Selection.Interior.ColorIndex = 34 Case 34 Selection.Interior.ColorIndex = 35 Case 35 Selection.Interior.ColorIndex = 15 Case 15 Selection.Interior.ColorIndex = xlNone End Select End Sub -----------------------------------

  • 【VBA】特定の範囲で同じ値を含むセルの色を変える

    Excelのマクロに関して質問です。 特定の範囲(複数行と複数列)内で重複した値(セル内の最初の4文字が同じもの)を含むセルの色を変えたいです。 さらに、重複した値ごとに色分けをしたいです。例えば重複した値[1111]と重複した値[1112]の時では、前者が赤色で後者は青色、更に他の重複する値はまた別の色でというように、 要は、どのセルとセルが重複しているか色分けをして一目瞭然にしたいです。 ※なお特定の範囲は以下の変数を利用します。 dataRow = Workbooks(booksName).Worksheets(sheetsName).Range("A2").End(xlDown).Row 'データの入っている最終行を取得 dataColum = Workbooks(booksName).Worksheets(sheetsName).Range("A1").End(xlToRight).Column 'データの入っている最終列を取得 どなたか知恵をお貸し下さい。よろしくお願いします。

  • 【VBA】特定の範囲で同じ値を含むセルの色を変える

    Excelのマクロに関して質問です。 特定の範囲(複数行と複数列)内で重複した値(セル内の最初の4文字が同じもの)を含むセルの色を変えたいです。 さらに、重複した値ごとに色分けをしたいです。例えば重複した値[1111]と重複した値[1112]の時では、前者が赤色で後者は青色、更に他の重複する値はまた別の色でというように、 要は、どのセルとセルが重複しているか色分けをして一目瞭然にしたいです。 ※なお特定の範囲は以下の変数を利用します。 dataRow = Workbooks(booksName).Worksheets(sheetsName).Range("A2").End(xlDown).Row 'データの入っている最終行を取得 dataColum = Workbooks(booksName).Worksheets(sheetsName).Range("A1").End(xlToRight).Column 'データの入っている最終列を取得 どなたか知恵をお貸し下さい。よろしくお願いします。.

  • 【VBA】特定の範囲で同じ値を含むセルの色を変える

    Excelのマクロに関して質問です。 特定の範囲(複数行と複数列)内で重複した値(セル内の最初の4文字が同じもの)を含むセルに色をたいです。 さらに、重複した値ごとに色分けをしたいです。例えば重複した値[1111]と重複した値[1112]の時では、前者が赤色で後者は青色、更に他の重複する値はまた他の色でというように、 要どのセルとセルが重複しているか色分けをして一目瞭然にしたいです。 ※なお特定の範囲は以下の変数を利用します。 dataRow = Workbooks(booksName).Worksheets(sheetsName).Range("A2").End(xlDown).Row 'データの入っている最終行を取得 dataColum = Workbooks(booksName).Worksheets(sheetsName).Range("A1").End(xlToRight).Column 'データの入っている最終列を取得 どなたか知恵をお貸し下さい。よろしくお願いします。

  • エクセルのVBAについて教えてください

    初めまして、いきなり質問で申し訳有りませんが、 今、エクセルを使って、 「複数のセルの中から(例えばa2からf6まで)の中の数字の最高の値のフォントの色を変える」 と言うマクロを組みたいとやってるんですが、 出来ないんです。 どのようなマクロになるのか、 教えていただけないでしょうか。 使ってるヴァージョンはエクセル95です。 すいませんがよろしくお願いします m(__)mペコリ            triton

  • セルに数字を入れると色を変えたい

    エクセルの質問です。 A1に数字を入力したら、B1:E1までの色を赤色に、 A1に数字を入力しなければ、B1:E1までの色を青色に変えたいのですが できるのでしょうか? 関数で出来るのか、マクロで出来るのかも分かりません。 どうか宜しくお願いします。

  • エクセルVBAで出来ますか??

    はじめまして。 私の質問を読んで下さりありがとうございます。 上司にエクセルで少々複雑な?仕組みを作るように指示されたのですが、私自身はエクセルに詳しくはなく、社内にも詳しい人がいなくて困っています。 「Excel VBA パーフェクトマスター」という本を購入して勉強を始めたのですが、あまりに情報が多すぎてどこを参考にすればよいのかすら分かりません・・・。 来週末までに作らないといけないため休日返上でお仕事しながら勉強していますが、さっぱり分からなくて泣きそうです・・。 エクセルVBAに詳しくて親切な方がいらっしゃいましたら、無理のない範囲で構いませんので、どうか教えて頂けないでしょうか。宜しくお願い致します。 前置きが長くなってしまいましたが、具体的には以下のような処理はどうすれば良いのかが分かりません。 (1) 「Sheet1」のセル[A2]をダブルクリックすると「Sheet3」が表示される。 (2) 「Sheet3」のセル[D5]をダブルクリックすると「Sheet2」のセル[C2]の値(文字か数字)が「Sheet1」のセル[A2]と「Sheet4」のセル[B5]に表示され、更に「Sheet5」のセル[F10]の数値が「Sheet1」のセル[N5]に表示される。 (3) 上記の一連の処理が完了すると「Sheet1」が表示される。(「Sheet1の画面に戻る) 以上のような処理を複数組み合わせればできそうなのですが、このような事はエクセルVBAで出来るでしょうか? (私には出来るのか出来ないのかすら分かりません。命令した上司も分かってないと思います。) 出来るか出来ないかだけでも結構なので、どうか教えてください。 もし可能なら、具体的なアドバイスを頂けると、とても助かります。 どうか宜しくお願い致します。

  • エクセルでつないだセルの結果を先頭のセルにもってこれるのでしょうか?

    エクセル上でなのですが、 例えば、A1に『おれたちは』A2に『天使じゃ』A3に『ない』と それぞれ入力してあるセルがあるとして、それらをつないだ結果を 先頭の“A1”に表示することは可能でしょうか? (A1が『おれたちは天使じゃない』となり、A2とA3は空にしたいのです) 別セルに&やらCON…なんとかで結果を出しておいてそれをA1に 形式を選択してペースト…その後A2とA3のセルの内容を削除すればいいのですが、()の作業をする回数があまりに多くいので… しかも、その一連の作業をワンクリックでやりたいのです。 バージョンは2008なのですが、マクロは使えないとのうわさ(?)も 聞いており、結構泣き入っています。 なんとかなりますか?

  • 指定した時刻になるとセルに色がつくようにしたい

    初心者です。エクセルのVBAで設定した時刻になったらセルに色がつくようにしたいです。 例えば、17:00時にA1セル、18:00にA2セルに色を自動でつくようにしたいと思っています。 OnTimeを使ったらよいと思っていろいろ試しましたが、設定した時刻になってもなにも起こりません。 標準モジュールに以下の内容を記述して、パソコンの時計を変更して確認しています。 できたらクリックしないでファイルオープンしてなにもせずに設定時刻に実行されるようにしたいです。 最初の3秒でB1に現在の時間を取得。 セルA1とA2をクリアしてから設定時間に色をつけるようにしたつもりです。 下記が記述内容です。 Sub 指定時間にマクロを開始() Dim stime As Date Range("A1") = "" Range("A2") = "" Range("B1").Select stime = Now + TimeValue("00:00:03") Application.OnTime TimeValue(stime), "マクロ実行内容", TimeValue("00:05:00") End Sub Sub 時刻の設定1() Application.OnTime EarliestTime:=TimeValue("17:00:00"), Procedure:="Test" End Sub Sub Procedure() Range("A1").Interior.ColorIndex = 8 End Sub Sub 時刻の設定2() Application.OnTime EarliestTime:=TimeValue("18:00:00"), Procedure:="Test" End Sub Sub Procedure2() Range("A2").Interior.ColorIndex = 9 End Sub 実行マクロは有効にしています。 ご教授よろしくお願いします。

専門家に質問してみよう