エクセルの条件付き書式を使用して、色のついた場所に赤線を引く方法

このQ&Aのポイント
  • エクセルの条件付き書式を使用して、特定の条件(土日祝)が満たされた場所に色を付ける設定を行っています。
  • マクロを使用して、色のついた場所に赤い直線を引くことは可能です。
  • 名簿の人数が変動する場合でも、赤い直線を引く範囲を動的に調整することができます。
回答を見る
  • ベストアンサー

色のついた場所に赤線を引く

お世話になります。データの縦の列に名簿、横の列に日付があるデータがあります。 (例)   A B C D E F          1      1  2  3  4  5 ・・・・・・・・・ 28 29 30 31 2      土  日 月 火 水 金  土 日 月 3 Aさん 4 Bさん 5 Cさん 6  ・   ・   ・ Nさん  Oさん エクセルの条件付き書式のルールで土日祝は縦方向(1が土曜であれば、"土"の下からデータがある範囲まで)に色がつくように設定してあります。 マクロを使って色がついたところ(土日祝)に曜日の下から名簿のデータの最後まで(例でいうと1(土)の時"土"の下からOさんまで)赤い直線を引きたいと思うのですがそういうことは可能でしょうか。 名簿の人数は一定ではなく変動します。 よろしくお願いいたします。

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

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

こんばんは! VBAになりますが、一例です。 元データはSheet1にあり、Sheet1の1行目はシリアル値になっているとします。 そして祝日データはSheet2に作成してあるという前提です。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub 赤ライン() Dim lastRow As Long, j As Long, c As Range, r As Range, myRange As Range, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") .Lines.Delete lastRow = .Cells(Rows.Count, "A").End(xlUp).Row For j = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column Set myRange = wS.Cells.Find(what:=.Cells(1, j), LookIn:=xlValues, lookat:=xlWhole) If Not myRange Is Nothing Or WorksheetFunction.Weekday(.Cells(1, j), 2) > 5 Then Set c = .Cells(3, j) Set r = .Cells(lastRow, j) With .Shapes.AddLine(c.Left + c.Width / 2, c.Top, r.Left + r.Width / 2, r.Top + r.Height).Line .ForeColor.RGB = vbRed .Weight = 3 End With End If Next j End With End Sub ※ データ変更があるたびにマクロを実行する必要があります。 尚、お使いのバージョンがExcel2010以降の場合は、条件付き書式でセルに色がついている場合の判断が可能です。 もしExcel2010以降の場合は↓のコードでも大丈夫だと思います。 (この場合祝日データは参照する必要はなく、Sheet1の3行目に色がついている場合に赤線が表示されます) Sub Excel2010以降の場合() Dim lastRow As Long, j As Long, c As Range, r As Range, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") .Lines.Delete lastRow = .Cells(Rows.Count, "A").End(xlUp).Row For j = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column If .Cells(3, j).DisplayFormat.Interior.ColorIndex <> xlNone Then Set c = Cells(3, j) Set r = Cells(lastRow, j) With .Shapes.AddLine(c.Left + c.Width / 2, c.Top, r.Left + r.Width / 2, r.Top + r.Height).Line .ForeColor.RGB = vbRed .Weight = 3 End With End If Next j End With End Sub こんな感じではどうでしょうか?m(_ _)m

AkB373
質問者

お礼

ありがとうございました。 コードを参考にさせていただき、無事解決することができました。

関連するQ&A

  • 特定の文字に色をつけたいんですが・・・

    エクセルで予定表のようなものを作っています。A列に日にち,B列に曜日を入れます。     A    B    C  1  5/1   金  2  5/2   土  3  5/3   日 土日の文字を赤くしたいのですが、毎月毎月、土日だけ選択して文字の色を変えるのが面倒なのです。B列に土または日と入力されたら日付と曜日の文字が赤くなるようにするにはどうしたらいいのか教えてください。祝祭日までとは言いませんので。  

  • ワードの表 休日に色をつけたい(毎月)

    毎月ワードで日付と土日の曜日のある列に色をつける作業をしています。 縦に項目、横に日付と曜日があります。 (例) 日付 1  2  3     曜日 土  日  月 項目 A      色有 色有 色無    B      色有 色有 色無    C      色有 色有 色無    毎月大量に色をつける作業を繰り返しているため、マクロ?とか 何か便利な技があれば、教えていただけませんか。 ちなみに私はマクロとかできませんが、なんとか覚えたいです。

  • エクセル 縦長のデータを横並びにしたい

    A列1行目から500行目まで 縦に500のデータがあり、 その後も空欄が2行入って その下に500個のデータが並ぶという 500個のデータが固まり(固定)のデータが 縦にずっと並んでいるものを 横に並べたいのですが どのようにしたら簡単に 並べかえられるか教えてください! 例 A1 FF A2 FF A3 FF A4 GG ・ ・ ・ A503 GG A504 GG A506 FF ・ ・ ・ というものをA503から500個をB1からB列に その後の500個のかたまりをC1からC列に といった具合です。 よろしくお願いいたします。

  • エクセル(excel)の計算式(関数)について

    エクセル(excel)の計算式(関数)でよいアイディアがありましたら教えてください。 1行目は項目行です。 セルA1から右に15列=セルO1まで、 a | b | c | d | e | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 と入っています。 2行目からデータとして、 セルA2から右に5列=セルE2まで、 4 | 2 | 2 | 1 | 1 と入力したとします。(データ例(1)) あるいは、 セルA3から右にセルE3まで、 6 | 3 | 0 | 0 | 0 と入力したとします。(データ例(2)) 1つのデータの5個の数字のルールは2つで、 「合計で10以下である。」 「左から順に小さくなるか、同じ数字となる。」 です。 (目的は、) このとき、F列からO列にかけて、 データ例(1)のケースでは、 a | a | a | a | b | b | c | c | d | e データ例(2)のケースでは、 a | a | a | a | a | a | b | b | b | と表示されるように、 つまり、項目行の下にある数だけ、その列の1行目の記号を 1(F列)から右に向かって順に埋めていくような、 F列からO列までの2行目以下に入れる適当な計算式(関数)は ないでしょうか。 拙い説明で申し訳ありません。どなたかよい考えをお持ちの方がいらっしゃいましたらと存じます。 どうぞよろしくお願い致します。

  • オートフィルで数式をコピー出来ない

    例えばA列にデータが縦に1列    B列に別のデータが縦に1列    C列でAをBで割って達成率を出したい。 C1のセルが「=A1/B1」となるような式で C1のセルをオートフィルでコピーしたら 思っていたのと違う式でコピーされた。 オートフィルで下が C1=A1/B1 , C2=A2/B2 , C3=A3/B3・・・・のようにその行ごとに計算できる様にするにはどうすればいいでしょう? 設定みたいなものが必要でしたら教えてください。

  • 関数で経過日数を算出したい。

    基準日を1/9とします。   A   B   C   日付 データ  経過日数 ←土日祝を含みます。 1  1/1   な   8日 2  1/4   や   5日 3  1/5   む   4日 A、B列のデータからC列に経過日数を算出する関数をつくりたいのですが、調べたところWORKDAY関数で出来るようですがアドインしないと使えないようです。でも残念なことにインストールCDがありません(オフィス2000)。 なので、もし別の関数で出来るのであればご助言頂きたいです。 よろしくお願いします。

  • エクセルでA列とB列の差分を抽出

    エクセルでA列にはあるがB列にはない項目を抽出するにはどうしたらよいでしょうか。 下の例だと、C列あたりに、山本、川田を抽出したいのですが…… A列にはB列のデータがすべて含まれています。 A列は10月と11月のデータで、B列は10月のデータです。 A列   B列 山田  山田 山本  川上 川田 川上

  • エクセルで指定曜日の縦の列のセルに色をつける

    いつもお世話になっています。エクセルに関して質問いたします。 前回の質問(見ていない方は申し訳ありません)で管理表で横列に曜日と日付を自動で 出力させたいの件はおかげさまで解決しました。 次に特定の曜日(土日)の縦の列の選択した範囲でセルに自動で色付けを行いたいと思い各HPを 参考にさせていただていたのですが、今度は横の色付けはあったのですが、縦方向の色付けが 見つかりません。そこでまた皆様のお力をお借りいたします。 例)A1のセルに土B1に日と表示されている場合A1~A10までのセルの色を青、B1~B10までのセルを赤の様に自動で表示させたい。 どうかご教授お願いいたします。

  • 色つき行を非表示にしたい。

    お世話になっております。 エクセル(2007)で悩んでいます。 月ごとのカレンダーをつくっているのですが、 A列は日付、B列はWEEKDAY関数で曜日を入れてあります。 C列以降は備考欄にしています。 土日祝日は日付と曜日を色つきセルにして、わかりやすいようにしてるのですが、この色つきセルの行を非表示にしてしまいたいのですが、どのようなマクロが使用できるのでしょうか、ご教示ください。

  • VBA特定セルの条件で同じ個数ずつ文字入力

    Excel VBAの初心者です。    A   B   C 1  011       0.5 2  012 3  013 4 行の総数は下に向かって700行くらいありますが、64行ごとにひとかたまりであることが分かって いるデータがあります。隙間はありません。またB列は空白です。 このB列にC1の数値を元に64行ごとに一定のステップで数値入力できるコードを作りたく思って います。例として、B列はB1から0,0~と同じ数字が縦に64個つながり、B65からは0.5,0.5~と縦に 同じ数字が64個つながり、A列がなくなるまで繰り返し自動で入力したいのです。 何分初めてなものでよく分かりません。どなたかサンプルコードを教えて頂けないでしょうか。 よろしくお願いします。