• 締切済み

vbaで日付から曜日と祝日を求める方法

vbaでWeekday関数を使わないで日付から曜日と祝日を求める方法を教えてください 課題でカレンダーを作らなきゃいけないんですが関数は使わないでと言われています

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

難しいことを言う人だな。 vbaまで使いながら、エクセル関数はダメとはこれ如何に。WorksheetFinctionでWeekdayを使うのはどうなのか。だめ? ーーー 下記はエクセルの、「日付シリアル値」という考え・仕組みを十分に判っている必要がある。 曜日は日付シリアル値を7でわった余りで判別できる。 Sub test02() x = Date - Int(Date / 7) * 7 - 1 MsgBox Format(x, "0") End Sub Sub test03() x = #4/1/2021# - Int(#4/1/2021# / 7) * 7 - 1 MsgBox Format(x, "0") End Sub 上記では今年の4月1日は4となり、木曜日です。 これで判別したら。 ===== ユーザー関数を作ると 例データ A1:C12 のA列、BC列は関数やVBA実行の結果です。 日付 Weekday関数 私製関数 2021/4/1 4 4 2021/4/2 5 5 2021/4/3 6 6 2021/4/4 7 7 2021/4/5 1 1 2021/4/6 2 2 2021/4/7 3 3 2021/4/8 4 4 2021/4/9 5 5 2021/4/10 6 6 2021/4/11 7 7 B列B2には関数 =WEEKDAY(A2,2) 下方向に式を複写。 ーー 標準モジュールに ユーザー関数 Function weekdy(x) x = x - 2 x = (x Mod 7) + 1 weekdy = x End Function を作る。 標準モジュールに Sub test05() For i = 2 To 12 x = Cells(i, "A") Cells(i, "C") = weekdy(x) Next i End Sub 実行するとC列のようになり、B列のエクセル関数と一致するのでOKかと思う。 ==== さて祝日打がの判定だが、年によって、国によって、変わる。 だから日本国用のその年のテーブルを作って、それを使って、VLOOKUP検索のようなことをせざるを得ない.毎年祝日のテーブルのメンテが必要。 どこかのシートに 祝日 2021/01/01 元旦 2021/01/11 成人の日 2021/02/11 建国記念日の日 2021/02/23 天皇誕生日 2021/03/20 春分の日 2021/04/29 昭和の日 2021/05/03 憲法記念日 2021/05/04 みどりの日 2021/05/05 こどもの日 2021/07/22 海の日 2021/07/23 スポーツの日 2021/08/08 山の日 2021/08/09 振替休日(山の日が日曜日のため) 2021/09/20 敬老の日 2021/09/23 秋分の日 2021/11/03 文化の日 2021/11/23 勤労感謝の日 を作り(情報はWEBから) 標準モジュールに、ユーザ関数 Function shuku(x As Date) Set fnd = Worksheets("Sheet2").Range("a2:A18").Find(what:=x) If fnd Is Nothing Then shuku = "n" Else shuku = "Y" End If End Function を作って、テスト用に Sub test07() Dim d As Date d = "2021/2/12" MsgBox shuku(d) End Sub d(日付、日付シリアル値)をいろいろ変えてテストを十分してみてください。

  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.3

年月日から計算で曜日を求める方法としては、ツェラーの公式というのが有名です。「ツェラーの公式 VBA」でググってください。 https://www.google.com/search?q=%E3%83%84%E3%82%A7%E3%83%A9%E3%83%BC%E3%81%AE%E5%85%AC%E5%BC%8F+VBA 既に回答がついているとおり年月日から祝日を計算で求めることはできません。たとえば春分の日・秋分の日は国立天文台がその都度決めるものなので厳密には予測できませんし、去年・今年のようなオリンピック関連の変則運用もあります。 課題であるなら、祝日を判定する方法についてもヒントが与えられているのではないかと思います。たとえば、祝日の判定をしなければいけない範囲を1990年〜2021年の間に限定するなど。

  • NuboChan
  • ベストアンサー率47% (745/1583)
回答No.2

No1さんの回答に付加して、 祝日の判断は、   固定日(毎年変わらない祝日)  - ハッピーマンデー(第〇月曜日)  - 振替休日  - 春分の日、秋分の日(毎年変わるが計算で求められる)  - 国民の休日(祝日で挟まれた日) なので直近の年にならないと判断できない。 (プログラムも変更がずっと無くは無理。) 直近の祭日は、  休日として別シートに書き出すなど事前に準備して  VBAで日付比較で祝日判断を別途設ける ------------------------ 課題や趣味の領域ならWeekday関数を使わないが前提なら  厄介な判断を網羅するようなコードになります。

  • watanabe04
  • ベストアンサー率18% (295/1597)
回答No.1

ある年の1/1を基準にして ・1年経てば曜日が1つ右にずれる。 ・うるう年なら更に1日右にずれる。 (4年に一度うるう年、100年に一度は平年、400年に一度はうるう年) 1月から先月までの日数ぶん右にずれる。 祝日は ・日付指定(1/1、2/23など) ・月曜指定(1月2週成人の日など) ・年によって変わる(春分の日、秋分の日) ですね。

関連するQ&A

  • 日付から曜日を求めたい

    Windows APIでプログラミングしています。時間のデータはSYSTEMTIMEを使ってます。 日付(wYear, wMonth, wDay)のみの情報から、曜日(wDayOfWeek)を求めたいのですが、どのような方法があるでしょうか?曜日を求めるAPI関数は存在しますか?

  • 祝日の色つけ方法

    B3に年、B4に月、B5~B35に日、C5~C35に 曜日が入力されているExcelのカレンダーがあります。 別シート「祝日」に2016年の祝日カレンダーがあります。 条件付き書式でCOUNTIF関数を使って、 下記のサイトの通りに祝日に色をつけようとしているのですが、 上手くいきません。 どういった数式を入れればよろしいでしょうか。 教えていただけると幸いです。

  • 曜日派?日付派??

    ずばり、皆さんは、予定など言われる時、曜日がいいですか?日付がいいですか? 「○日にのランチ行かない?」 と聞かれた方がいいのか 「▲曜日、ランチ行かない?」 と聞かれたほうがいいのか。 私の予想では、主婦さんは曜日かと、独身、サラリーマン、OLさんは日付派かと思うのですが。 以前に、大変重要な日時決定時(電話でのこと)、先方から「月曜日の1日でいかがですか?」と言われたので、私は月曜日ならば!とOKしたら、その夜、主人に「1日は火曜日だ」と指摘され、もう大変だったんです。どうやら先方が見ていたカレンダー、間違っていたらしく、私は、カレンダーが手元になかったので、言われるがままの返事。 先方は、「1日」を強調したかったようです。 でも、私は曜日派だから「月曜日」が最初に言われたので、そちらに反応。こんなことがあったんですよ。 それ以来、ちょっと相手に日時を言う際、気をつけているのですが、今後、このアンケートを元に、曜日の人が多ければ、曜日を強調した言い方だし、日付派の人が多ければ、日付を強調した表現に変えようと思っています。 勿論、どちらも言います!(笑) ご協力お願いいたします。

  • Excel VBAで日付を曜日に変換したい。

    Excel VBAで日付を曜日に変換したい。 A1セル:2010/6/2 を B1セル:水 とするには、Excel VBA ではどうすればいいのでしょうか?

  • 日付と曜日を一気に出す方法

    エクセルで日付と曜日を一気に出したいのですが、うまくできません。 オートシェイプを使うと、日付は変わるのですが曜日が変わりません。 こうなってしまいます↓ 1日(月) 2日(月) 3日(月)  ・  ・  ・ 一気に出すには何か関数を使わなくてはいけないのでしょうか。 よろしくお願いします。

  • 日付の抽出

    表計算ソフト(CalcとかExcel)を使って セルに、〇何年/△月/曜日 を入力すると 該当する日付を抽出したいのです。 (月と、曜日は複数) 1/1から12/31まで、日付を並べて、weekday関数を使うと 見えるのですが、必要な日だけ、画面内に収めたく 抽出する方法がわかると、助かります。

  • 日付と曜日が合わない

    javaのPGを作成しています。 内容的には1週間分のカレンダーを表示しようと思っているのですが・・・・・ Calendarクラスを使用して、対象の日付と曜日を取得しようとしているのですが、 年月日は指定のものが取得できているようなのですが、曜日だけはおそらく来月の曜日を 取ってしまっているようです。 原因がまったく分かりません。 下に、Calendarクラスを使用した部分を抜粋した ソースを記述するので、なにが原因か教えていただけないでしょうか? 【jspファイル内】 <% Calendar cal= Calendar.getInstance(); cal.set( 2010, 11, 25 ); // ※実際は変数だが、正しい値が入っているのは確認済み %>                  ・                  ・                  ・ for ( int loopCnt = 0; loopCnt < 7; loopCnt ++ ){         if ( loopCnt > 0 ){             cal.add(Calendar.DATE,1);         }     // デバッグ用     out.print( cal.get(Calendar.YEAR));     out.print( cal.get(Calendar.MONTH));     out.print( cal.get(Calendar.DATE));     out.print( cal.get(Calendar.DAY_OF_WEEK)); } 【実行結果】 2010 11 25 7 2010 11 26 1 2010 11 27 2 2010 11 28 3 2010 11 29 4 2010 11 30 5 2010 11 31 6

    • ベストアンサー
    • Java
  • カレンダーで祝日を表示させる。

    EXCELにてカレンダー(勤務表)を作成し、月を変更すると自動的に祝日や土日には曜日の色が変わるようにはしたのですが祝日に該当する日(添付では1日(土)・10日(月))の曜日のセルの上にマウスを持っていくと添付画像のようにコメントが表示されるようにしたいのですが、どのようにすればよいのでしょうか? 色の変更等はVBAを使用していません(関数や条件付書式を使用しています)がとくに拘りはありませんので宜しくお願い致します。

  • エクセルで国民の祝日を調べる関数?

    A1セルに日付があるとして =TEXT(A1,"aaaa")のように、日付から曜日を求めることは出来るのですが、それが祝日であるかどうかを調べる関数はないでしょうか?祝日は各国まちまちだから無理なようなきもしますが・・・・。

  • EXCEL*日付・曜日・文字色の自動変更は?*

    画像の様な日程表を毎月作っているのですが、 (1)日付も曜日も一発で変わる (2)日曜日と祝日は、日付と曜日の文字色が赤になる というようにする方法があれば教えていただきたいです。 お願いしますm(__)m

専門家に質問してみよう