あしたから本気出す
いろいろ工作して情報発信してみる。自作キーボードとか。
開発ブログ
自作キーボード「TypingTrigger-SDZERO」
自作スマートフォン緊急充電器
プログラマブルな自動化キーボード実装編
プログラマブルな自動化キーボード(プロトタイプ編)を作ってみる-後編
開発ブログをもっと見る
ブログなど
ブログはこちら
ダウンロード
JW_WIN外部変形Kiefer
JW_WIN外部変形FastMeasure
お知らせ
2010/10/1 ブログを新しくした
2009/9/4 twitter始めた
2009/7/14 サイトのタイトル変更した

管理者プロフィール (-)
suda 81年神奈川県生まれ
職業:GRAFZ.NETという屋号でプログラム制作してます。
一言:実用性を形にする。工作の日々。
コンタクトは以下までお願いします。感想、応援、苦情とか
RSS
ブログをRSS配信してます。


© GRAFZ.NET 2008-2010
9月17日
年月日から曜日を計算する


年月日から曜日を計算する仕組みを、Excel VBAで作ってみます。計算にはZeller(ツェラー)の公式という便利なものがあって、それをVBA用にコーディングします。年月日をそれぞれ2A、2B、2Cに入力し、マクロを実行。すると2Dに結果が表示されるというシンプルなものです。Excelのキャプチャはこんな感じ。

そして、マクロのソースが以下。
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
Public Sub CalcWeek()
  Dim nYear As Integer
  Dim nMonth As Integer
  Dim nDay As Integer
  nYear = Cells(2, 1).Value
  nMonth = Cells(2, 2).Value
  nDay = Cells(2, 3).Value
  Dim arWeek(0 To 6) As String
  arWeek(0) = "日"
  arWeek(1) = "月"
  arWeek(2) = "火"
  arWeek(3) = "水"
  arWeek(4) = "木"
  arWeek(5) = "金"
  arWeek(6) = "土"
  Cells(2, 4).Value = arWeek(Zeller(nYear, nMonth, nDay))
End Sub

Private Function Zeller(yyyy As Integer, mm As Integer, dd As Integer) As Integer
  If mm = 1 Or mm = 2 Then
    yyyy = yyyy - 1
    mm = mm + 12
  End If
  Zeller = (yyyy + yyyy \ 4 - yyyy \ 100 + yyyy \ 400 + (13 * mm + 8) \ 5 + dd) Mod 7
End Function
1行目:マクロの名前をCalcWeekとします(もちろん任意です)。
2行目:それぞれ年月日を格納するための変数で、
5-7行目:
セルから値を取得します。
8-15行目:曜日の漢字を配列で用意します。
16行目:曜日を計算し、2Dのセルに結果を表示します。計算は関数で行っていて、
19行目:年月日を引数で受けとって、
20-23行目:(理由があるんでしょうが)1月を13月として、2月を14月として扱うようです。
24行目:これが公式。結構複雑ですね。関数名Zellerに計算結果を代入して、戻り値とします。

ダウンロード
サンプルファイルはこちら

ご参考になれば幸いです。m(_ _)m