- 締切済み
休日の範囲だけ着色したい
エクセルで工程表をつくりました。 スケジュール書込み欄の休日の部分だけを着色したいのです。 方法としては、カーソルを着色したい列のところへ移動して、その列のたとえば3行目から10行目までをマクロを登録したボタンをクリックすると着色するといった具合です。 ボタンを作って、マクロを登録することは出来ますので、VBAのほうを教えてください。 よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
参考までに VBAでのActiveCellの使い方 ActiveCellの列番号 ActiveCell.Column 行番号 ActiveCell.Row Rangeコマンドで範囲を指定する Range(Cells(3, 5), Cells(10, 5)) Sub Macro1() retu = ActiveCell.Column Range(Cells(3, retu), Cells(10, retu)).Interior.ColorIndex = 10 End Sub とか Sub Macro1() Range(Cells(3, ActiveCell.Column), Cells(10, ActiveCell.Column)).Interior.ColorIndex = 10 End Sub とか出来ます。
- hallo-2007
- ベストアンサー率41% (888/2115)
ほとんどNo3さんが説明されている通りです。テクのガイドラインですが、 1、事前に別シートにでも、休日の日付を設定しておく、 休日を入れたセルを、仮に休日とでも名前をつけておく 例 別シート A 1 2007/4/27 2 2007/5/3 3 2007/5/5 ・・・ 「挿入」「定義」「名前」で設定して準備 2、3列目の日がシリアル値で書式で日のみ表示しているのあればよいのですが、5列目から20列目を選択して、条件付書式 数式で =COUNTIF(休日,A$3)>0 $マークの位置に注意してください。 意味は休日で指定した範囲に3列目の日付が1回以上あれば、設定した書式 となります。
お礼
返事が遅くなりました。 私が当初希望していた方法とは異なりますが、大変参考になりました。ありがとうございます。 休日を別シートに設定するというのは、今まで想定していなかったので試してみたいと思います。 それとは別にVBAでのActiveCellの使い方も知りたいのでまた別のスレッドを立てて質問してみたいと思います。そのときはまたよろしくお願いします。 繰り返しになりますが、ありがとうございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
No2です。 >休日は作業工程上決めるため、暦どおりではない(一定条件ではない)ので条件付書式では無理かと思われます。 休日が土日とか一定条件でなくても、No3さんが説明されているように、会社の都合にあった休日を設定しておけばOKです。 いちいち休みの日の列を探してボタンを押すよりも 休日設定した日付の列(3行目から10行目)が自動で色が変われば便利ではないでしょうか。
お礼
なるほど。 ありがとうございます。 もう少し、私の使用している工程表について説明させていただきます。 2行目に「月」、3行目に「日」、4行目に「曜日」が入るようになっていて、1シートに3ヶ月(前月、今月、来月)の表示がされます。 「年」の入力欄もあって、今月の月数値を入力すると月、日、曜日等が自動的に変わるようになっています。 5行目以下20行目まで(例えばですが)が作業内容の書込み欄になっています。 よって、新しいシート(工程表)をつくったときに以前の場所と違う箇所が休日になったり、また、平日でも作業の都合で急遽休みにすることもあります。 で、あらかじめ休日設定するのはこの工程表作りではムリかと思うのですが、いかがでしょうか? 以前は、休日の列の書込み部(例で言えば5行目から20行目までですね)を範囲選択して、セルの書式設定でパターン付していましたが、非常に手間取ります。 お手数ですがよろしくお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
既回答を見ると、質問の表現が結果論として曖昧だったのでは。 完全に休日の選択は操作者に任されていて、クリックしたセルに着色(セルパターンのとフオントのどちらかはっきりさせること)すれば良いようにも取れる。 それならセルのChangeイベントで、決まった列や範囲のセルをクリックするとセルパターン色を変える事は簡単だが、誤った訂正と、その機能(イベント)をどういうタイミングで停止したらよいか迷う。 いつまでもそれが働くのは厄介でしょう。 セルのChangeイベントでなく、範囲指定のSelectionやApplication.InputBoxの範囲指定で1回限りの、休日の部分だけを着色するルーチンを走らしたほうが良いかもしれない。
お礼
ありがとうございます。 確かに説明不足でした。 zap35さんにご説明した表現でわかっていただけるでしょうか。 よろしくお願いします。
- zap35
- ベストアンサー率44% (1383/3079)
質問文にマクロを書くだけの情報がないので、マクロは書けません。 でもカレンダの休日に自動的に着色するなら、マクロより条件付き書式を使う方が簡単ではないですか? まず適当なシートに休日表を作成しましょう 2008/4/29 2008/5/3 2008/5/4 2008/5/5 のような休日の日付を入力します。仮に範囲をSheet2!A1:A4として説明します。また工程表の1行目には日付が入力されているとします。 (何も書かれていないので、想像で書くしかないですね) 「着色したい列」のセルを選択し「書式」→「条件付き書式」を選択します。ここでは仮にD列としましょう。D1に日付があるとします。 「数式が」を「セルの値が」に変更し「数式に」 =COUNTIF(Sheet2!$A$1:$A$4,D$1)>0 を入力し、「書式」ボタン→「パターン」で背景色をつけます。 つまりD1の日付がSheet2!$A$1:$A$4の範囲にあるとき色を着けることになります。 次に「追加」で日曜日の場合の背景色を指定します。 同じく「数式が」を「セルの値が」に変更し「数式に」は =WEEKDAY(D1)=1 として、背景色を指定します。 最後に条件付き書式を設定したセルをコピーして、他のセルに「編集」→「形式を選択して貼り付け」→「書式」で貼り付けてください 「条件付き書式」「休日」などで検索すると事例はたくさん見つかりますので、ご覧ください http://www.relief.jp/itnote/archives/000971.php http://www2.odn.ne.jp/excel/waza/cformat.html#SEC3
お礼
回答ありがとうございます。 質問が説明不足のようでした。 アクティブセルの列の決められた範囲の行の部分だけを着色(パターン)付したいのです。 つまり、Bの列にカーソルがあって、マクロの登録されたボタンをクリックすると、B3からB10のセルを着色する。 次にEの列にカーソルを移動して先ほどのボタンをクリックするとE3からE10のセルを着色する。 といった具合です。 よろしくお願いします。
- hallo-2007
- ベストアンサー率41% (888/2115)
やりたいことは、 仮に休日の日付の一覧表が別シートにあって スケジュールの日付列のデータが休日の一覧にある日付の場合は着色される。 ではないのですか? 条件付書式の設定で可能です。
お礼
回答ありがとうございます。 休日は作業工程上決めるため、暦どおりではない(一定条件ではない)ので条件付書式では無理かと思われます。 説明不足ですみません。
- mako_sea
- ベストアンサー率47% (62/130)
1.任意のセルを選択する。 2.マクロを実行する。 3.1で選択したセルに色が付く と考えてよろしければ、以下のマクロで足りると思います。 ==================================== Sub Macro1() ' ' Macro1 Macro ' With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With End Sub ===================================== ちなみにこの'6'は黄色です。 他の色指定は下記などが参考になります。 http://72.14.235.104/search?q=cache:7H0YSeeDZQEJ:www.ne.jp/asahi/home/yamamomo/op/op05.html+VBA+%E8%89%B2%E6%8C%87%E5%AE%9A&hl=ja&ct=clnk&cd=3&gl=jp
お礼
回答ありがとうございます。 このマクロだと範囲指定が無いように思いますが・・・。
お礼
有難うございました。 これで回答を締め切らせていただきます。