これ何て呼びますか Part2

Office2013
OSは8を使ってます。

Excelで日付に対して曜日のほかに大安とか仏滅とか友引とか六曜も自動で表示したいのですが、全然分かりません。

関数でもVBでも構いません、どなたか詳しい方教えて下さい。
お願いします。

A 回答 (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")
「六曜カレンダー」の回答画像4
    • good
    • 0

六曜はサポートされていないので「完全に自作」しないといけません。



まず、六曜に必要なのは「旧暦の日付」です。

六曜は、先勝、友引、先負、仏滅、大安、赤口の順ですが、これは「月が変わるとリセット」されます。

毎月の「一日(ついたち)」の六曜は、以下のように決まっていて、一日(ついたち)をスタートにして順に変わります。

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/cal …
    • good
    • 0
この回答へのお礼

大変勉強になりました。

ありがとうございます。

お礼日時:2014/07/23 21:37

私はこれを利用しています



http://www.vector.co.jp/soft/win95/personal/se24 …

六曜などのほかにも月齢や二十四節季なども取得できて自作のカレンダーソフトで遊んでいます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

調べてやってみます。

お礼日時:2014/07/20 07:11

同じ質問を見つけました。


六曜は旧暦から求めるようですね。

参考URL:http://oshiete.goo.ne.jp/qa/7957841.html#bmb=1
    • good
    • 0
この回答へのお礼

ありがとうございます。

調べてやってみます。

お礼日時:2014/07/20 07:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報