[[20080803005405]] 『日付の表示でその日が祝日なら「曜日・祝」とした』(かいち) ページの最後に飛ぶ

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

 

『日付の表示でその日が祝日なら「曜日・祝」としたい』(かいち)

 いつも勉強させていただいております。
 早速ですが、よろしくお願いします。

 今までは、予約台帳のマスターをsheet1に作成し、それを一か月分まとめて印刷
 (8月なら31枚)し、刷り上ったものにハンコでいちいち日付を入れていましたが、
 こちらの過去ログ[[20060703142229]]より、川野鮎太郎さんのプログラム(↓)を
 拝借して自動で日付が印刷されるようにしました。

http://skyblue123.hp.infoseek.co.jp/Excel/Date_Print.xls

 この中の“日付の印刷処理”の、'土日を除いて処理 と、'祝祭日を印刷〜 という所は
 無効にし、
 Range("C29").Value = Format(Print_Date, "YYYY/M/D")   を
                     "YYYY/M/D (aaa)")に変更して

 全ての日にちを曜日入りで印刷するようには出来たんですが、タイトルにあるとおり、
 その日が祝日ならば、例えば 2008/9/15(月・祝) と印刷されるように出来ないでしょうか?
 まだまだ初心者の域を出ないので何をどうしていいのかさっぱりです。
 よろしくお願いします。

  Version Excel2003
  OS    WindowsXP

 以下追加しました。

 質問者です。
 川野鮎太郎さんのプログラムを拝借して、お礼をするのを忘れていました。
 なにぶん、深夜の作業だったので頭がボーっとしており、質問の入力開始前は
 覚えていたのですが、その後、失念してしまいました…。

 川野鮎太郎さん
 上記の通り川野さんのプログラムを使わせていただきました。ありがとうございました!!

 一例ですがA1のデータをC1に書き出します。
 要祝dataの確認。
     Dim 祝data As Variant
    祝data = Array("1/1", "1/14", "2/11", "3/20", "4/29", "5/3", "5/5", _
                    "5/6", "7/21", "9/15", "9/23", "10/13", "11/24", "12/23")
    If IsError(Application.Match(Format(Format(Range("a1"), "m/d"), "@"), 祝data, 0)) Then
        Range("c1").Value = Format(Range("a1"), "yyyy/m/d (aaa)")
    Else
        Range("c1").Value = Format(Range("a1"), "yyyy/m/d (aaa・祝)")
    End If
      
      (弥太郎)


 弥太郎さん
 書き込みありがとうございます。早速試してみます。取り急ぎご連絡まで。(かいち)

 いろいろ考えましたがうまくいきません。
 今のところ下記のようになっています。

 Sub My_Print()
 For Print_Date = MySelsetDate To DateSerial(MyYear, MyMonth + 1, 0)
     'Call MyHoliday          '祝祭日を印刷する場合コメントアウト
     If MyHName = "" Then
         Range("A1").Value = Format(Print_Date, "YYYY/M/D (aaa)")
         Worksheets("Sheet1").PrintOut    '印刷したいシートを指定
     Else
         Range("A1").Value = Format(Print_Date, "YYYY/M/D (aaa・祝)")
         Worksheets("Sheet1").PrintOut    '印刷したいシートを指定
     End If
 Next Print_Date
 End Sub

 これで、MyHNameが""のときは   "YYYY/M/D (aaa)"   と印刷されて、
          ""では無いときは"YYYY/M/D (aaa・祝)")と印刷される
 ということにはならないんでしょうか?

 (かいち)

 >いろいろ考えましたがうまくいきません。

 どの様にうまく行かないのでしょうか?
 祝日なのに "・祝)" がうまく出ないのですか?

 >これで、MyHNameが""のときは   "YYYY/M/D (aaa)"   と印刷されて、
 >         ""では無いときは"YYYY/M/D (aaa・祝)")と印刷される
 >ということにはならないんでしょうか?

 そうなりますが、『MyHName』が正しく祝日を反映したものになっているかどうか、
 回答側は分かりません。

 Call MyHolidayをコメントアウトした為に、
 『MyHNameは常に("") になる』なーんて事が生じていませんか?

 (半平太)

 半平太さん

 書き込みありがとうございます。

 >祝日なのに "・祝)" がうまく出ないのですか?

 はい、その通りです。

 >Call MyHolidayをコメントアウトした為に、
 >『MyHNameは常に("") になる』なーんて事が生じていませんか?

 自分でもなんとなくその辺が怪しいかな?とは思っていましたが、実際にどう違うのかと
 いうことになると全く私の理解の範疇を超えてしまいます。
 現状は、川野鮎太郎さんのプログラム

http://skyblue123.hp.infoseek.co.jp/Excel/Date_Print.xls

 をそのまま使っており、変更したところは「日付の印刷処理」の部分のみです。
 その下にある「祝祭日の判定処理」の部分はこの問題が解決したら万年カレンダー対応(で合ってますか?)
 に変更したいとは思っていますが、今のところ手をつけていません。

 なぜ「曜日・祝」と出来ないかご教授いただければ幸いです。

 (かいち)

 > 現状は、川野鮎太郎さんのプログラム
http://skyblue123.hp.infoseek.co.jp/Excel/Date_Print.xls 
 > をそのまま使っており、変更したところは「日付の印刷処理」の部分のみです。

 通常、私はマクロファイルはダウンロードしないので、現物のコードを見ることはありません。

 そちらで、いつMyHNameに値が設定されるのか調べれば判断できると思うのですが、難しいですか?
  恐らく、「MyHName =」で検索すれば、容易にその箇所が見つかると思います。

 もしくは鮎太郎さんがカンバックするのを待つか、ですね。

 (半平太)


 半平太さん

 お付き合い頂きましてありがとうございます。
 「祝祭日の判定処理」部分(抜粋)は以下の通りで、
 実際には2004年〜2006年分まであります。

 Sub MyHoliday()  '祝祭日の判定処理
 Select Case MyCDate
    Case DateSerial(2006, 1, 1)
        MyHName = "元日"
    Case DateSerial(2006, 1, 2)
        MyHName = "振替休日"

 〜〜〜中略〜〜〜 

    Case DateSerial(2006, 11, 23)
        MyHName = "勤労感謝の日"
    Case DateSerial(2006, 12, 23)
        MyHName = "天皇誕生日"
    Case Else
        MyHName = ""
 End Select
 End Sub 

 この中の、

 Case Else
        MyHName = ""

 というのがあるのを見落としてました!これじゃないですか?
 恥ずかしながら、皆さんよりのヒントとこういう具体的なもに気づかないと、
 その上の祝日の判定部分が相応しくないとはなかなか…。ポリポリ。

 実際にはどう変えればよいのでしょうか?

 (かいち)

トレースかブレークポイントで中身を確認すれば原因は簡単にわかると思うのですが。

 MyHName は MyHoliday の中で設定していますから、その処理をコメントアウトしては
 ダメでしょ。
 (Mook)


 Mookさん

 文面からして、すごく基本的なことが出来ていなかったんだということは察しが付くんですが、
 そんなこともわからないレベルなんです…。スミマセン。
 自分なりに、なんとなく問題解決の糸口は掴んだつもりなので、まずはトレースとブレークポイントの
 意味を調べた上で自分なりにやってみます。
 もちろん、皆さんからのアドバイスも絶賛受付中!ですので、これに懲りずにお付き合い
 いただける方は宜しくお願いします。

 (かいち)

 デバッグは、マクロを使用するうえでの有効な確認手段ですから、
 早期に修得された方が良いです。
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
 ご参考まで。

 ただ、MyHoliday を見てみましたが、定義されているのが2004〜2007年の
 データですから、このままではダメではないですか?
 (Mook)


 祝日の判定はMookさんの仰るとおり、2008年以降のデータを入れるとして、
'Call MyHoliday  としてコメントアウトされている部分を解除し、次の1行を追加してみてください。
 
        MyCDate = Print_Date '←この部分
        Call MyHoliday          '祝祭日を印刷する場合コメントアウト

 2009年分まで追加したデータでアップしなおしました。

 最終的には以下のようなことになるでしょうか。
'**************** 日付の印刷処理 ****************
'//////////////////////////////////////////////////
Sub My_Print()
For Print_Date = MySelsetDate To DateSerial(MyYear, MyMonth + 1, 0)
    MyCDate = Print_Date
    Call MyHoliday          '祝祭日を判定する処理
    If MyHName = "" Then
        Range("A1").Value = Format(Print_Date, "YYYY/M/D (aaa)")
    Else
        Range("A1").Value = Format(Print_Date, "YYYY/M/D (aaa・祝)")
    End If
    Worksheets("Sheet1").PrintOut    '印刷したいシートを指定
Next Print_Date
End Sub
'//////////////////////////////////////////////////
'**************** ************** ****************

 (川野鮎太郎)みなさん、お手数をお掛けしました。m(_ _)m

 Mookさん

 アドバイスありがとうございます。早速紹介していただいたサイトで勉強します。

 >ただ、MyHoliday を見てみましたが、定義されているのが2004〜2007年の
 >データですから、このままではダメではないですか?

 その部分は、印刷設定がうまくいったらとりあえず2008年以降のデータに変更して
 使っていく予定でした。ゆくゆくは万年カレンダーにしたいと思っていますが、過去ログの

[[20061011165149]]

 が参考になるんじゃないかと思っています。時間のあるときに勉強しながらやっていきたいと思います。
 ありがとうございました。

 川野鮎太郎さん

 ご本人登場で緊張しております。
 まず、このプログラムを使わせていただきましたことをお礼申し上げます。ありがとうございました。
 そして、日付データの更新まで…感謝感激です。
 あいにく今日は仕事が休みなので検証は明日以降になってしまいます。
 (間違いないと確信していますが)万が一、不具合があった場合にはまた質問させていただきます。

 最後になりましたが、ご返信いただきました皆様、本当にありがとうございました。

 (かいち)


コメント返信:

[ 一覧(最新更新順) ]


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