[[20050727164210]] 『マクロを使って塗りつぶし』(ばんばん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロを使って塗りつぶし』(ばんばん)
 いつもお世話になってます。
 A列に日、B列に曜日が入った表があります。
 条件付書式で、土日祝日の塗りつぶしをしています。
 すでに、条件付書式を3つ使っている為、今度はマクロを使って
 塗りつぶしはできないか・・・と思ったのですが、
 マクロの記録をするときに、A1が"5"だったら(日が5日だったら)
 黄色に塗りつぶす。
 と言うことはできますか?
 マクロを作るのは今回が初めてです。
 よろしくお願い致します。

 エラー処理とかは無しです。
Sub てすと()
If Day(Range("a1").Value) = 5 Then
  Range("a1").Interior.ColorIndex = 6
End If
End Sub
(SoulMan)

 SoulMan様、
 おはようございます。
 ご回答頂きありがとうございます。
 頂いた回答で早速チャレンジしてみました。
 もう少し質問があるのですが、A列日付部分にマクロの範囲を広げたいのですが、
 その場合は、
 If Day(Range("a1").Value) = 5 Then
  Range("a1").Interior.ColorIndex = 6
End If
 を列分コピーして"A1"の部分を置き換えるのでしょうか?
 横に塗りつぶし部分を広げようと思いrange("a1")をrange("a1:K1")にしてみたら、
 できたので、縦方向も同じかなあと思い、試してみましたがダメでした。
 関数のようにA1:A31と言う方法はマクロでは使わないのでしょうか?

 それと、ColorIndexの番号はどのようにして決めるのでしょうか?
 試しに21に変えてみたら薄い黄色になりました。

 お手空きの時に教えてください。
 よろしくお願い致します。(ばんばん)

 あっ、そんな時はね、変数を使ってその範囲の中をループすればいいんですよ。
 例えば、Cというどこかわからない変数を一つ用意します。
 >Dim C As Range
 これです。
 次にこのどこかわからない変数CでRange("A1:A31")の中をみてまわります。
 >For Each C In Range("A1:A31")
 >Next
 これですね。
 ここでCという変数は
 Range("A1")であったり
 Range("A2")であったりするわけです。わかりますか?
 で、それをコードにすると↓こうなるわけです。
 Option Explicit
 Sub てすと()
 Dim C As Range
 For Each C In Range("A1:A31")
    If Day(C.Value) = 5 Then
      C.Interior.ColorIndex = 6
    End If
 Next
 End Sub
 >それと、ColorIndexの番号はどのようにして決めるのでしょうか?
 私は、適当なセルに色を付ける動作を記録して番号を取得しています。 
 記録!記録!です。(^^;
 >お手空きの時に教えてください。
 いつも暇だけど、三週間に一週間だけダメな時があるのよねぇ、、
 これでも一応、働いてますからね(^^;
(SoulMan) 

 早速のお返事ありがとうございます。
 試してみました!
 上記の方法で5日の塗りつぶし成功しました。

 塗りつぶす条件は同じで 横に10(例えば、A5〜K5まで塗りつぶす時は
 For Each C In Range("A1:K35")ではダメ?ですか?
 試してみたら、F5が塗りつぶされてしまいました/(^◇^;)
 F5のデータは5ではないのですが。
 前に、同じようなマクロでA1から○個目まで塗りつぶすと言うのを
 教わったことがあるのですが、それは今回の形には対応しないのでしょうか?
 まるで初心者なのですっとんきょうな事を言っていたら、ごめんなさい。

 それと、塗りつぶしの条件を複数にしたい時は、コピーして貼り付けて、
 If Day(C.Value) = 5 Thenの条件を(例えば5→18変更)
 すれば、いいのでしょうか?

 >いつも暇だけど、三週間に一週間だけダメな時があるのよねぇ、、
 >これでも一応、働いてますからね(^^;

 ですよね。
 きっと、SoulManさんの作ったファイルは使い勝手がいいんだろうなぁ・・・。
 何度かお世話になっています。
 いつもありがとうございます。
 お時間のある時にお付き合い下さい。
  では、よろしくお願い致します。 (ばんばん)

 今更ですが気になったので、コメントします。
 「条件付き書式」が3つまでしか使えないというのは、「塗り分け」の数です。
 例えば、日曜日と祝日を赤に、土曜日を青に、5の日を黄色に塗りたいのなら、
 塗り分けの数は3つなので、条件付き書式で対応できます。
 (ちゅうねん)

 もう一つ気になるのは、
 例えば、日曜日と祝日を赤にして、5の日は黄色にするとして、
 5の日が日曜日だったらどっちにするか?

 条件付き書式で日曜日を赤に設定し、
 マクロで黄色に塗りつぶしても、通常は黄色にならないのでは?
 だとしたら、優先するほうを条件付き書式で設定する必要がありますが。

 途中、詳しく読んでいないのではずしていたらゴメンナサイ。
 (sato)

 >塗りつぶす条件は同じで 横に10(例えば、A5〜K5まで塗りつぶす時は
 そんな時はResizeを使って横に広げたらいいです。
 >きっと、SoulManさんの作ったファイルは使い勝手がいいんだろうなぁ・・・。
 案外そうでもない(^^;
 みんなから「ここが駄目!」とか言われてます。あはははは
 それから、皆さんもコメントしてくださってる様に仕様を見直してもいいかもしれませんね?
 もう少ししたら出かけるのでもう、お返事出来ないかもしれませんのでね。
 ではでは、頑張ってくださいね。
 Option Explicit
 Sub てすと()
 Dim C As Range
 For Each C In Range("A1:A31")
   If Day(C.Value) = 5 Then
     C.Resize(, 11).Interior.ColorIndex = 6
   End If
 Next
 End Sub
(SoulMan)

 間に合うかなあ・・・
 もう、外出されちゃったかなあ・・・
 まだ、試してはいないのですが一言お礼だけ。
 ありがとうございました。
 皆様の言う事も一理あり!
 時間がある時にレイアウトの見直しもしてみます。
 詳しく教えて頂いて、ほんと嬉しいっす。(ばんばん)

 おはようございます。

 早速試してみました。・・・で質問が、
 @例えば、月を7月にしてマクロを実行します。
   そうすると、マクロで指定したとおり動きます。
 Aその後、月を8月変更してマクロを実行すると、@の作業で塗りつぶされた
   セルがそのまま塗りつぶされたまま、Aで新たに色が塗られてしまうのですが、
 @で塗られたセルを消しつつ、新たにマクロを実行するにはどうすればよいですか?
 それから、コンボボックス?か何かでシートの上にボタンを作り、そこをぽちっと押すと
 マクロが実行される方法があったと思うのですが・・・。   (ばんばん)

 考え方は二通りあると思います。どっちがいいかはお好みでどうぞ。
Option Explicit
Sub どっちか判断してTrueだったら色をつけるFalseだったら色をけすヴァージョン()
Dim C As Range
For Each C In Range("A1:A31")
    If Day(C.Value) = 5 Then
        C.Resize(, 11).Interior.ColorIndex = 6
    Else
        C.Resize(, 11).Interior.ColorIndex = xlNone
    End If
Next
End Sub
Sub 最初に色を消しておいて色を付けるヴァージョン初期化なんていったりする()
Dim C As Range
Range("A1:A31").Resize(, 11).Interior.ColorIndex = xlNone
For Each C In Range("A1:A31")
    If Day(C.Value) = 5 Then
        C.Resize(, 11).Interior.ColorIndex = 6
    End If
Next
End Sub
 >シートの上にボタンを作り、
これは、↓が参考になると思います。
http://www.excel.studio-kazu.jp/lib/e4a/e4a.html
後、適当なオートシェイプを書いて右クリック→マクロの登録
としてもいいですよ。私は、ほとんど後者です。
#それから半角カナと丸文字は文字化けの原因になりますからネットでは
控えてくださいね。(^^;
(SoulMan)

 こんにちは。
 お返事ありがとうございます。
 とりあえず、↓このマクロで試してみました。
Option Explicit
Sub どっちか判断してTrueだったら色をつけるFalseだったら色をけすヴァージョン()
Dim C As Range
For Each C In Range("A1:A31")
    If Day(C.Value) = 5 Then
        C.Resize(, 11).Interior.ColorIndex = 6
    Else
        C.Resize(, 11).Interior.ColorIndex = xlNone
    End If
Next
End Sub
 それで、質問があるのですが・・・
 上記の条件A1〜A35に5があったら色を塗る。に、
 A1〜A35に18があったら色を塗る。を追加しようと思い、
 内容をコピーして、変数=CをDにして実行してみました。
 でも、18は色が塗られましたが、5は色が塗られませんでした。
 条件を複数にしたい時は、他に指令(?)する言葉があるのでしょうか?
 それとも、変数がいけないでしょうか?
 なんとなく、意味は理解できているのですが、
 マクロ文中の段落のつき方などが理解できていません。
 作成したマクロを貼り付けてみました。
 もし、違っているところがあれば、ご指摘下さい。

Option Explicit
Sub macro1()
Dim C As Range
For Each C In Range("A5:A35")

    If Day(C.Value) = 5 Then
        C.Resize(, 11).Interior.ColorIndex = 23
    Else
        C.Resize(, 11).Interior.ColorIndex = xlNone
    End If
Next
Dim D As Range
For Each D In Range("A5:A35")
    If Day(D.Value) = 18 Then
        D.Resize(, 11).Interior.ColorIndex = 23
    Else
        D.Resize(, 11).Interior.ColorIndex = xlNone
    End If
Next
End Sub

 よろしくお願い致します_(_^_)_
 (ばんばん)

 なんか夏季特別講習みたいになってきたね(^^;
そんな時はね、ループは一回で中で分岐させればいいですよ。
方法は色々あるけど、今回の場合でしたら
Select Caseがわかりやすいと思います。
Select Case・・・つまりCase By Caseってことやね。。(スペルはあってるかな??)
Day(C.Value)の値は色々あるのよってことで
Select Case Day(C.Value)
 ここに
 そのこんなケース
 あんなケースって書くわけです。
End Select
それをコードにしたのが↓これです。
Option Explicit
Sub macro1()
Dim C As Range
For Each C In Range("A5:A35")
    Select Case Day(C.Value)
        Case 5
            C.Resize(, 11).Interior.ColorIndex = 23
        Case 18
            C.Resize(, 11).Interior.ColorIndex = 23
        Case Else
            C.Resize(, 11).Interior.ColorIndex = xlNone
    End Select
Next
End Sub
日付が5の時は23番の色
日付が18の時も23番の色
それ以外は色は無し
という意味です。
でも、よく見ると
 >C.Resize(, 11).Interior.ColorIndex
 同じフレーズが出てくるでしょ?なんだか単調で可読性が悪いわね?
そんな時はもう一つ変数を用意して、色を決めるところと色を付けるところを
分けるとスッキリとしてみやすくなります。
Sub macro2()
Dim C As Range
Dim MyColor As Long
For Each C In Range("A5:A35")
    Select Case Day(C.Value)
        Case 5
            MyColor = 23
        Case 18
            MyColor = 3
        Case Else
            MyColor = xlNone
    End Select
C.Resize(, 11).Interior.ColorIndex = MyColor
Next
End Sub
こんな感じです。どうですか?
こうすると、色を付けるとこを変更する時も一行変更するだけでいいでしょ?
とまぁ、、後のメンテのことも考えて書く様にするといいと思います。
どうでしょうか?
(SoulMan)

 何日にも渡り、ご指導頂き本当にありがとうございました。
 頂いたmacro2を使って完成することができました。
 >なんか夏季特別講習みたいになってきたね(^^;
 まさにそうですね。"駅前留学"みたい(?)で楽しかったっす。
 久々に勉強した気がします。学校を卒業依頼、ほとんど勉強なんて
 してなかったから、脳みそが偏ってます。輪をかけて連日の暑さで・・・。
 でも、SoulMan先生の丁寧な説明を読んで、ちんぷんかんぷんだった、
 macroが少〜し判るようになりました。
 まだ他にもたくさんの使い方があると思うので、時間のある時に勉強したいと思います。
  エクセルの学校に入学(?)してからまだ日は浅いですが、
 たくさんの先生方にいろんな事を教わり、少しずつエクセルの知識が増えてきています。
 今では各先生方に教わったことは全て印刷し、
 ファイルに閉じて大切な教科書となっています。
 また、何かあったら、ご指導下さい_(_^_)_     (ばんばん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.