• ベストアンサー

期間をきめて日程表作成

VBA初心者です。 今、日程表を作成しているのですが、調べてもわからないため質問させてください。 たとえば、1月と2月のカレンダーを日程はA列に、曜日はB列に取得する方法はネット上に答えが転がっているのですが、1月15日から2月14日までといったように期間限定でカレンダーを取得したい場合はどの様にしたらよいのでしょうか?VBAを使いワンクリックで取得できるようにしたいと考えています。 (期待している表)  A列   B列  1/15   月  1/16   火  1/17   水   :   : 質問が分かりにくくてすいません。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

Dim D, Y& D = #2009/01/15# Do Until D > #2009/02/14#   Y = Y + 1   Cells(Y, 1) = D   Cells(Y, 2) = Format(D, "aaa")   D = DateAdd("D", 1, D) Loop 上記マクロを実行します。開始日と終了日は適宜、変更できるように しておく(どこかのセルを参照するなど)と良いでしょう。

T030036
質問者

お礼

まさかこんなに奇麗にまとまった回答がくるとは…と思いながら実行してみると自分の思い通りの動きをしてくれました。 感動しています。今回2通りのパターンの回答をいただいているのですが、両方ともまだ自分の力では思いもつかないような回答で、なんだか楽しくなっています。 少し仕事上マクロが必要なため勉強しているので、また質問するかもしれませんがよろしくおねがいします。

その他の回答 (1)

回答No.2

Excelですか?Accessですか? Excelだとして回答します。 例えば下記のようなメソッドを作成します。 ------------------------------------------------------------------- Private Function GetWeekday(ByVal dtKeyDate As Date) As String Dim strRet As String '返却値の初期化 strRet = "不明" '日付判定 If IsDate(dtKeyDate) Then '正常な日付のみ曜日を取得する strRet = WeekdayName(Weekday(dtKeyDate)) End If '値を返却 GetWeekday = strRet End Function ------------------------------------------------------------------- で、クリックイベントに ------------------------------------------------------------------- Dim dtStDate As Date Dim dtEdDate As Date Dim lngIndex As Long '日付の開始終了の初期値設定 dtStDate = CDate("2009/1/15") dtEdDate = CDate("2009/2/14") 'インデックス初期値設定 lngIndex = 1 '開始と終了の日付が同じになるまで処理を行う Do Until dtStDate > dtEdDate 'データを表示 ※環境に合わせて変更 Sheet1.Cells(lngIndex, 1) = CStr(dtStDate) Sheet1.Cells(lngIndex, 2) = Left(GetWeekday(dtStDate), 1) '開始日付に1日加算 dtStDate = DateAdd("d", 1, dtStDate) 'カウント lngIndex = lngIndex + 1 Loop ------------------------------------------------------------------- とやればできると思います。 質問の趣旨と違ったら申し訳ありません。

T030036
質問者

お礼

早急な回答をありがとうございました。 なんだか難しいかんじですが、試してみると思い通りの動きになりました。 今よく見てコードがなにをしているのかを勉強しています。 どうもありがとうございました(^^) あっすいませんでした。エクセルの話でした。

関連するQ&A