あしたから本気出す
利用価値のあるものを工作し、情報発信してみる。
工作
新・自作キーボード
Jw_cadの外部変形の作り方2
Jw_cadの外部変形の作り方
戦前のタイプライターをUSB化してみる。
工作記事をもっと見る
ブログ:最近やっていること
かっこいい電卓発見。
ノートPCのディスプレイが昇天ス
アルミのロウ付けに挑戦
ブログをもっと見る
ダウンロード
JW_WIN外部変形Kiefer
JW_WIN外部変形FastMeasure
お知らせ
2009/9/4 twitter始めました。
2009/7/14 サイトのタイトル変更しました
2008/4/30 サーバーダウンについて

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

最近やってること:
ŋ߂Ă邱
    follow me on Twitter

    © GRAFZ.NET 2008-2009
    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