• 締切済み

六曜カレンダー

Office2013 OSは8を使ってます。 Excelで日付に対して曜日のほかに大安とか仏滅とか友引とか六曜も自動で表示したいのですが、全然分かりません。 関数でもVBでも構いません、どなたか詳しい方教えて下さい。 お願いします。

みんなの回答

回答No.4

その >春分の日の決定や月齢の決定は、面倒な計算が必要で、 >ぶっちゃけ「関数やVBで簡単に出来るような代物ではない」ですよ。 を可能にしてしまったのが、#2 さんが紹介されているリンクです。\(^o^)/ ダウンロードして解凍すると中に、旧暦.bas がありますので これをExcelのVBE画面にてインポートします。 標準モジュールにインポートされますので あとは六曜をワークシートに表示するために、ユーザー定義関数を作成します。 インポートされたモジュールの後にでも付け加えてください。 Function wsRokuyou(Rg As Range) As String On Error GoTo errH Dim wDate As Date If Not IsDate(Rg.Value) Then wsRokuyou = "" Exit Function End If wDate = Rg.Value If Year(wDate) <= 1950 Or Year(wDate) >= 2050 Then wsRokuyou = "計算範囲外" Exit Function End If Call Calc_Kyureki(Year(wDate), Month(wDate), Day(wDate)) wsRokuyou = Kyureki.QRokuyou Exit Function errH: wsRokuyou = "不明" End Function あとは一般の関数と同様にA列に日付があればB列に、=wsrokuyou(A1) などとするだけです。 確認用サイト http://www.ajnet.ne.jp/dairy/ Private Function JD2YMDT(JD As Double) As String の所が変だったのでここだけ誤魔化しています。(二十四節気でエラーになります) 'JD2YMDT = Trim(Str(GYear)) & "/" & Trim(Str(Gmonth)) & "/" & Trim(Str(Gday)) & " " & _ Trim(Str(Ghour)) & ":" & Trim(Str(Gminute)) & ":" & Trim(Str(Gsecond)) '2005年などに、2005/5/21 7:37:60 になるためにパッチ JD2YMDT = Trim(Str(GYear)) & "/" & Trim(Str(Gmonth)) & "/" & Trim(Str(Gday)) & " " & _ Format(TimeSerial(Ghour, Gminute, Gsecond), "h:n:s")

回答No.3

六曜はサポートされていないので「完全に自作」しないといけません。 まず、六曜に必要なのは「旧暦の日付」です。 六曜は、先勝、友引、先負、仏滅、大安、赤口の順ですが、これは「月が変わるとリセット」されます。 毎月の「一日(ついたち)」の六曜は、以下のように決まっていて、一日(ついたち)をスタートにして順に変わります。 1月・7月の1日⇒先勝 2月・8月の1日⇒友引 3月・9月の1日⇒先負 4月・10月の1日⇒仏滅 5月・11月の1日⇒大安 6月・12月の1日⇒赤口 なので、六曜を知るには「旧暦」が必要になります。 旧暦の日付を得るには「月齢」つまり「月の満ち欠け」を知る必要があります。 旧暦では、新月の日を一日(ついたち)、満月の日がだいたい15日、となっていて、次の新月が来ると、月が変わります。 「新月の日を一日(ついたち)」にするので、その「前の日」は「29日」だったり「30日」だったりします。これで「月の大小」が決まります。 月の満ち欠けは約29日半周期で、満ち欠けを12回繰り返すと約354日なので、だいたい1年です。 でも、1年で11日足りないので、3年で約一ヶ月くらいズレてしまいます。 なので、だいたい3年ごとに「1年を13ヶ月にする」と言う事をします。これを「閏月」と言います。 で、閏月は「19年間に7回入れる」ようにすると、月と季節がほぼズレない事が知られていて、19年に7回の「閏月」が入ります。 閏月は適当に入れる訳には行かず、必ず「中気を含まない月」を閏月にします。 「中気」は、夏至、春分、冬至、秋分など、1年に12個あります。 月の数字は「春分を含む月が2月」、「夏至を含む月は5月」などのように決まっていますから、閏月が挟まれる月も自動的に決まります。 これで「西暦○年○月○日は、旧暦の○年○月○日」というのが計算できます。 ここまで計算出来たら、「1月は先勝から始まる」などの規則で、旧暦の日付に六曜を割り当てます。 春分の日の決定や月齢の決定は、面倒な計算が必要で、ぶっちゃけ「関数やVBで簡単に出来るような代物ではない」ですよ。 旧暦カレンダーの作成は「ソフト開発会社が有料で作成するレベル」の話です。 以下のページに書いてある事を「すべて完璧に理解」しないと、旧暦カレンダーの作成は無理でしょう。 http://homepage2.nifty.com/o-tajima/rekidaso/calendar.htm

akiyes
質問者

お礼

大変勉強になりました。 ありがとうございます。

  • emsuja
  • ベストアンサー率50% (1065/2116)
回答No.2

私はこれを利用しています http://www.vector.co.jp/soft/win95/personal/se243537.html 六曜などのほかにも月齢や二十四節季なども取得できて自作のカレンダーソフトで遊んでいます。

akiyes
質問者

お礼

ありがとうございます。 調べてやってみます。

  • zzhei
  • ベストアンサー率52% (25/48)
回答No.1

同じ質問を見つけました。 六曜は旧暦から求めるようですね。

参考URL:
http://okwave.jp/qa/q7957841.html#bmb=1
akiyes
質問者

お礼

ありがとうございます。 調べてやってみます。