[[20130528091614]] 『マクロで土日の日付に丸を付けたい』(pochiri) ページの最後に飛ぶ

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

 

『マクロで土日の日付に丸を付けたい』(pochiri)
 マクロで日付に丸を付けたいのですがうまくいきません。
 所々箇条書きで失礼します。

 ・C列が土日の時の日付に丸を付けたい。
 ・C列の丸は数字を囲って見えるようにセルの中央に配置したい。
 ・印刷するのはB列・C列とC列に付けた丸印。文字色と丸の色は黒(自動)。
  (A列・D列は印刷しません。)

 バージョン
   OS:WindowsXP
   エクセル:Excel2010(互換モード)
            97-2003でも対応可なように拡張子.xlsで作成しています。

 数式や設定などは以下のようになっています。

               A                   B             C               D               
 ------------------------------------------------------------------------------------------
 15       =WEEKDAY($D15,1)        =Z4            1           =DATE($W$4,$B$15,$C15)
 16       =WEEKDAY($D16,1)                      2           =DATE($W$4,$B$15,$C16)
 17       =WEEKDAY($D17,1)                       3           =DATE($W$4,$B$15,$C17)
  :                  :                          :                 :
 45       =WEEKDAY($D45,1)                       31          =DATE($W$4,$B$15,$C45)

 W4   に   2013 (西暦)
 Z4   に   6 (月の数字)

 A列(15~45行)…条件付き書式
  =TEXT(WEEKDAY($A15),"aaa")="土"   の場合、文字色   →   青
  =TEXT(WEEKDAY($A15),"aaa")="日"   の場合、文字色   →   赤

 D列(15~45行)…表示形式
  日付 yyyy/m/d

 オートシェイプでボタン作成 テキスト編集  →  土日に丸
 そのシートがアクティブの時にボタンクリックでマクロ実行。
 (マクロの保存先はブックに設定)
 
 Sub 土日に丸_Click() で始め
  http://www.excel.studio-kazu.jp/kw/20071114041820.html
  http://www.excel.studio-kazu.jp/kw/20091224142043.html
 こちらのトピックやYahoo、Googleでの検索を参考に記述していたのですが…、
 恥ずかしながら改変を重ねる内にわけがわからなくなってきてしまいました。

 どう記述すればいいのかご指導いただければ幸いです。
 よろしくお願いします。

 (pochiri)

 参考になさった
[[20071114041820]] 『土曜日を□、日・祝日を○で囲みたい』(シュー)
 の、1or8さんのコードをベースに作ってみました。

 サイズ等変更したい場合は、過去ログを参考にして下さい。

 A,D列は今回の表示の為に作っているのなら
 C列の数式を
 C15=IF($Z$4=MONTH(DATE($W$4,$Z$4,ROW(A1))),DATE($W$4,$Z$4,ROW(A1)),"")
  表示形式を 「"d"」にして、C45までコピー
 してもらうと、不要になります。

 この設定をしてもらうとして。。。コードの方は

 '------
Sub 土日に丸()
    Dim MyShape As Shape
    Dim MyRng As Range

    For Each MyRng In Range("C15:C45")
        With MyRng
            On Error Resume Next
            ActiveSheet.Shapes(.Address).Delete
            On Error GoTo 0
            If MyRng.Value <> "" Then
                If Weekday(.Value, 2) > 5 Then
                    Set MyShape = ActiveSheet.Shapes.AddShape(msoShapeOval, _
                        .Left + (.Width / 4), .Top, (.Width / 2), .Height)
                        MyShape.Name = .Address
                        MyShape.Fill.Visible = msoFalse
                End If
            End If
        End With
    Next
    Set MyShape = Nothing
 End Sub
 '------

 マクロはボタンでの実行を考えておられる様ですが
 W4,Z4の値が変わった時に 自動的に実行される様にしてもよいかもですね。

 また、C列に数式を入れるのが問題ある様なら、教えて下さい。
 D列に日付が出来ているので、そちらを使うコードに変更しますので。

 (HANA)

 HANAさん、ありがとうございます!

 >A,D列は今回の表示の為に作っているのなら
 はい、その通りです。

 C列は31日まで無い月でも「31」を表示させておきたいのです。

 >D列に日付が出来ているので、そちらを使うコードに変更しますので。
 こちらに変更していただければ助かります。

 すみませんがよろしくお願いいたします。

 (pochiri)


 >C列は31日まで無い月でも「31」を表示させておきたいのです。
 そうでしたか。
 次の月の 土or日 だった場合の○は不要ですよね?

 D列を使ったコードです。

 '------
Sub 土日に丸2()
    Dim MyShape As Shape
    Dim MyRng As Range

    For Each MyRng In Range("D15:D45")
        With MyRng
            On Error Resume Next
            ActiveSheet.Shapes(.Address).Delete
            On Error GoTo 0
            If Month(.Value) = Range("Z4").Value Then
                If Weekday(.Value, 2) > 5 Then
                    With .Offset(, -1)
                        Set MyShape = ActiveSheet.Shapes.AddShape(msoShapeOval, _
                            .Left + (.Width / 4), .Top, (.Width / 2), .Height)
                    End With
                        MyShape.Name = .Address
                        MyShape.Fill.Visible = msoFalse
                End If
            End If
        End With
    Next
    Set MyShape = Nothing
End Sub
 '------

 >>A,D列は今回の表示の為に作っているのなら
 >はい、その通りです。
 って事なら、直接コード内でやってしまっても良さそうですが
 見えた方が安心かな。。。?

 (HANA)

 HANAさん、またまたありがとうございます!

 >次の月の 土or日 だった場合の○は不要ですよね?
 はい、不要で大丈夫です。

 15日まではうまく実行できたのですが、16日以降ができませんでした。

 情報を書き忘れていまして…
 15日がカレンダーの区切りとなっていまして、16日以降は数字的に先月なのです。

              A                   B             C               D               
 ------------------------------------------------------------------------------------------
 15       =WEEKDAY($D15,1)        =Z4            1           =DATE($W$4,$B$15,$C15)
 16       =WEEKDAY($D16,1)                      2           =DATE($W$4,$B$15,$C16)
 17       =WEEKDAY($D17,1)                       3           =DATE($W$4,$B$15,$C17)
  :                  :                          :                 :
 29       =WEEKDAY($D29,1)                       15          =DATE($W$4,$B$15,$C29)
 30       =WEEKDAY($D30,1)        =Z4-1          16          =DATE($W$4,$B$30,$C30)
 31       =WEEKDAY($D31,1)                       17          =DATE($W$4,$B$30,$C31)
 32       =WEEKDAY($D32,1)                       18          =DATE($W$4,$B$30,$C32)
 :                  :                          :                 :
 45       =WEEKDAY($D45,1)                       31          =DATE($W$4,$B$15,$C45)

 ですので
    For Each MyRng In Range("D15:D45")
        With MyRng
            On Error Resume Next
            ActiveSheet.Shapes(.Address).Delete
            On Error GoTo 0
            If Month(.Value) = Range("Z4").Value Then
                If Weekday(.Value, 2) > 5 Then
                    With .Offset(, -1)
                        Set MyShape = ActiveSheet.Shapes.AddShape(msoShapeOval, _
                            .Left + (.Width / 4), .Top, (.Width / 2), .Height)
                    End With
                        MyShape.Name = .Address
                        MyShape.Fill.Visible = msoFalse
                End If
            End If
        End With
    Next

 この部分を改変させて組み込めばいいと考えて、
 For Each MyRng In Range("D15:D45") の範囲を ("D15:D29") と ("D30:D45") に、
 If Month(.Value) = Range("Z4").Value Then を ("B15") と ("B30") に、
 として分けて実行させてみましたが 「 For に対する Next がありません 」と出てしまいました。

 記述する位置が悪いと思うのですが、どうすればよいでしょうか?
 何度も済みません。

 (pochiri)


 自己解決できました!
 記述位置の単純ミスでした…。

 解答してくださったHANAさま、本当に本当にありがとうございました!

 (pochiri)


 >16日以降は数字的に先月なのです。
 16〜31,1〜15 って並びならご説明にもスッキリするのですが。。。

 自力で解決出来た様で良かったです。
 ちなみに、土日に丸2 のコードで
            If Month(.Value) = Range("Z4").Value Then
 の所を
            If Day(.Value) = .Offset(,-1).Value Then
 に変更してもらっても良かったかもしれません。

 (HANA)

 HANAさま、補足情報ありがとうございます!

 確かにこちらの方が変更箇所が少なくてすみますね。
 早く気付けば良かったです(苦笑)

 >16〜31,1〜15 って並びなら...
 自分もこの並びなら…と思うのですが、元々の書式が決まってまして…
 それに合わせて今までは手書きしている状況だったのです。

 区切りの始め(16日とか17日)によく1行目(1日)のところからミスってしまうことが多かったので、
 これでデータで入力できるようになり、かなり楽になります。

 重ね重ね本当に感謝しております。
 ありがとうございました!

 (pochiri)

コメント返信:

[ 一覧(最新更新順) ]


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