アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

の様に。
教えてください。お願いします。

A 回答 (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

などとするとできますでしょうか。。。

この回答への補足

>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


回答ありがとうございます。

これだと無限ループしてしまいます。
どうしてでしょう?

補足日時:2010/07/29 21:48
    • good
    • 0

とりあえず考え方だけ



まず
日付を必要な分埋めちゃいます。
A4に 2009/5/27 を入力
B4=A4+1 を入力 コピーして、4の行にコピー
そうすると
A4~Z4 とかに日付がひとつづつ増えた状態になります。

この状態で今度は
A5=A4 を入力コピーして、5の行にコピー
これで
A5~Z5 とかに上と同じ表示になります。

行4の表示フォーマットを
ユーザー定義にして、 m"月"
行5の表示フォーマットを
ユーザー定義にして d

とします。

これをマクロにするだけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!