« シート名を検索、条件を満たしたシートを削除 | トップページ | 特定の曜日を判定してセルに色を付ける »

2010年3月18日 (木)

任意の日付から任意の日付までを一列にセルに入れる

2つの任意の日を早い順からそれぞれ
DAY1、DAY2とします。

DAY2 - DAY1 + 1

で2つの日付の間の日数がわかります。
これをSPANとします。
つまり、

SPAN = DAY2 - DAY1 + 1

次に日付をセルに入れていきます。
一番最初のセル(下のコードではセルA2)に
DAY1を入れます。
以下、1つ下のセルA3では

DAY1 + 0

の値を入れます。

下に向かって順番に

DAY1 + 1
DAY1 + 2
DAY1 + 3

DAY1 + SPAN

のように入れていきます。
DAY1 + SPAN = DAY2です。

これをするのにFor文を使います。

For i = 0 to SPAN - 1
   …
Next i

のようにします。
日時の計算については、
こちらの記事「日時と時間」を参考してみてください。

任意の日付から任意の日付までを一列にセル に入れるコード:

Sub macro100318a()
'DateWriterの使用例
    Sheets.Add
    Call DateWriter("2010/3/13", "2010/3/18")
End Sub

Sub DateWriter(DAY1 As Date, DAY2 As Date)
'任意の日付から任意の日付までを一列にセルに入れる
    Cells(1, 1) = "日付"
    Dim i, SPAN As Integer
   
    SPAN = DAY2 - DAY1 + 1 '日数
    Debug.Print SPAN
    For i = 0 To SPAN - 1
        Cells(i + 2, 1) = DAY1 + i
    Next i
   
    '表示形式を指定する
    Columns(1).NumberFormat = "m月d日(aaa)"

End Sub

macro100318aを実行後のシートの状態
Vba20100318a

WriteDaterを使って、任意の年の1年間の日付を出力する
WriteDaterYプロシージャを作ります。

仕組みはコードを見れば分かると思います。

コードはこちら

年間カレンダーを作るコード:

Sub macro100318b()
'DateWriterYの使用例
'2010年1列カレンダー
'括弧の中に任意の年を入れる(4桁西暦)
    Sheets.Add
    Call DateWriterY(2010)
End Sub

Sub DateWriterY(MyYear As Integer)
'DateWriterを使って
'年間1列カレンダーを作る

    Call DateWriter(MyYear & "/1/1", MyYear & "/12/31")
   
End Sub

さて、年間ときたら次は月間カレンダーです。

月によって日数が違うので
月末の日付を求めるの必要があります。

これには、DateAdd 関数を使います。
詳しい説明はVBAヘルプにあります。

下のコードでは、指定した月の1日に
一ヶ月を足して1日分引いて
指定した月の月末の日付を求めています。

月間カレンダーを作るコード:

Sub macro100318c()
'DateWriterMの使用例
'月間1列カレンダー
'括弧の中に任意の年、月を入れる
    Sheets.Add
    Call DateWriterM(2010, 5)
End Sub

Sub DateWriterM(MyYear As Integer, MyMonth As Integer)
'DateWriterを使って
'月間1列カレンダーを作る
    Dim DAY1, DAY2 As Date
    DAY1 = MyYear & "/" & MyMonth & "/01"
    DAY2 = DateAdd("m", 1, DAY1) - 1

    Call DateWriter(CDate(DAY1), DAY2)
   
End Sub

DAY1はDate型で宣言したのですが
WriteDaterMに入れる時、そのままでは型が違ってエラーになったので
Date型に変換しています。

たまに、こういうことがあります。
現在のところ、理由は不明。

|

« シート名を検索、条件を満たしたシートを削除 | トップページ | 特定の曜日を判定してセルに色を付ける »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 任意の日付から任意の日付までを一列にセルに入れる:

« シート名を検索、条件を満たしたシートを削除 | トップページ | 特定の曜日を判定してセルに色を付ける »