• ベストアンサー

Excel(2000)のマクロで下記の様にしたいのですが

Excel(2000)のマクロで下記の様にしたいのですが A1 2009/5/27 (開始) B1 2009/6/3 (終了) A1からB1の日付を 4の行には月 5の行には日を 順に表示させたいのですがどうしたらいいですか? 5 ........ 6 27 28 29 .... 1 2 3 A4 5月 A5 27 B5 28 C5 29 D5 30 E5 31 F4 6月 F5 1 G5 2 H5 3 の様に。 教えてください。お願いします。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

#1 さんと同じような考え方ですが、もう少し厳密に。。。 1)A5 に「=A1」と入力します。 2)B5 に =IF(COLUMN(A5)<$B1-$A1+1,A5+1,"") と入力します。 3)B5 を C5:IV5 に コピー します。 4)5:5 を選択し、[セルの書式設定] - [分類(C)] - [ユーザー定義] で、[種類(T):] を「d」にします。  以上で、5列目 に、「27、28、29、30、31、1、2、3」と表示されます。 5)A4 に「=A5」と入力します。 6)B4 に =IF(B5<>"",IF(MONTH(A5)<>MONTH(B5),B5,""),"") と入力します。 7)B4 を C4:IV4 に コピー します。 8)4:4 を選択し、[セルの書式設定] - [分類(C)] - [ユーザー定義] で、[種類(T):] を「m"月"」にします。  以上で、4列目に、「5月、、、、、6月」と表示されます。  これを マクロ でするとなると >A1 2009/5/27 (開始) >B1 2009/6/3 (終了) の間の日数を i = Range("B1").Value - Range("A1").Value + 1 などとして、変数 i にでも格納し、 For j = 1 To i  Cells(5, j).Value = Format(Range("A1").Value + j - 1, "d")  If j = 1 Or Cells(5, j).Value = 1 Then   Cells(4, j).Value = Format(Range("A1").Value + j - 1, "m月")  End If Next j などとするとできますでしょうか。。。

rinkairyo
質問者

補足

>i = Range("B1").Value - Range("A1").Value + 1 > >などとして、変数 i にでも格納し、 > >For j = 1 To i > Cells(5, j).Value = Format(Range("A1").Value + j - 1, "d") > If j = 1 Or Cells(5, j).Value = 1 Then >  Cells(4, j).Value = Format(Range("A1").Value + j - 1, "m月") > End If >Next j 回答ありがとうございます。 これだと無限ループしてしまいます。 どうしてでしょう?

その他の回答 (1)

  • NNori
  • ベストアンサー率22% (377/1669)
回答No.1

とりあえず考え方だけ まず 日付を必要な分埋めちゃいます。 A4に 2009/5/27 を入力 B4=A4+1 を入力 コピーして、4の行にコピー そうすると A4~Z4 とかに日付がひとつづつ増えた状態になります。 この状態で今度は A5=A4 を入力コピーして、5の行にコピー これで A5~Z5 とかに上と同じ表示になります。 行4の表示フォーマットを ユーザー定義にして、 m"月" 行5の表示フォーマットを ユーザー定義にして d とします。 これをマクロにするだけです。

関連するQ&A