こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

12か月分の日付データを繰返し記入したい

下記動作を実現したくマクロを書いてみましたが、正常に処理できません。
修正が必要な箇所&修正方針について、知識のある方からご助言いただけますと幸いです。。

<実現したいこと>
・sh2のV列(2行目~)に対し、
2019/4/1
2019/5/1

2020/3/1
と12行書き込む処理を、(sh1の2~最終行)回行う
※最終的に、sh2のV列は、先頭行の下に、(sh1の2~最終行)×12行できる想定

<正常に動かなかった記述>
Sub V列の処理()

Dim sh1 As Worksheet, sh2 As Worksheet
Dim r As Long, i As Long
Application.ScreenUpdating = False

Set sh1 = Worksheets("元シート")
Set sh2 = Worksheets("集計用シート")

'2から最終行まで12行おきの繰り返しです
For r = 2 To sh1.Cells(Rows.Count, 1).End(xlDown).Row Step 12

'まず、V列の各1行目に4月の値を入れます
sh2.Cells(r, 22) = "2019/4/1"

'したら、12か月分入れていきます
For i = 1 To 11
sh2.Cells(r + i, 22) = DateAdd("m", i, Cells(r, 22))
Next i

Next r

Application.ScreenUpdating = True
End Sub

投稿日時 - 2020-05-22 11:33:25

QNo.9751691

すぐに回答ほしいです

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

For r = 2 To sh1.Cells(Rows.Count, 1).End(xlDown).Row Step 12

For r = 2 To sh1.Cells(Rows.Count, 1).End(xlUp).Row *12 Step 12
としてみたらどうでしょう。

投稿日時 - 2020-05-22 11:49:11

お礼

ありがとうございます!こちらの方法でを参考にさせていただき、無事期待していた動作を実現できました。。

投稿日時 - 2020-05-22 20:53:12

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

質問の意味と実現してほしい結果が、質問からでは伝わらない。
>、知識のある方からご助言い・・
というより、質問者は、コンピュター的に処理内容を文章で正確に書く訓練の方がずっと大切だと思う。問題そのものは多分VBAベテランでないと答えられないものではないと想像するから。
それと、結果例(値)とそれを出すセル(列、行)を例示・明示して質問すべきだ。
ーー
月初日だけ1年分(12日分、12行)シートに書くのは簡単。
R列R1からとして
Sub test01()
For i = 1 To 12
Cells(i, "R") = DateSerial(2020, i + 2, 1)
Next i
End Sub
でできる。
>12か月分の日付
という意味があいまい。普通は356日分(365行)を想像するが。
ーー
これを5年先までの分をセルに作りたいというのか?
ーー
それ以上の繰り返しの結果はあるのか。
それをどの列に出すのか。
ーー
手操作でもできる。VBAはマクロの記録をとればよい。
ーー
日付については、エクセルの考えは、特別(初心者には想像できない)な方法で扱っている。
その日付シリアル値のことをご存じ(勉強した)か。
上記の私のプログラムで、13月になる場面があるが、エクセルは、その13月を、12を引いて1月とし、年を1足してくれる(繰り上げ)など、VBAを経験しないとわからないと思う。

投稿日時 - 2020-05-22 14:09:01

あなたにオススメの質問