VBA100本ノック15本目を動画で解説してみました。Excelの神髄さんの模範解答はコチラ
問題
#VBA100本ノック 15本目
「2020年04月」から「2021年03月」のシートがあります。
しかし、シートの順番が狂ってしまっています。
「2020年04月」から昇順に並べ替えてください。
・上記以外のシートは存在しません。
・シート名は「yyyy年mm月」これで統一されています。

動画の流れ・解答
■考えた流れ
0:00 冒頭、問題確認
1:28 シートを移動させる
3:44 一番後ろへ移動を12回ループ
5:30 年月の求め方(yyyy年mm月)
7:26 1ヶ月ずつ日付をずらす
※動画内での回答
Sub ノック15本目()
Dim i As Long
For i = 1 To 12
Sheets(Format(DateAdd("m", i - 1, #4/1/2020#), "yyyy年mm月")).Move after:=Sheets(Sheets.Count)
Next i
End Sub
久々に超ゆっくり解説だ!!
日付の扱いが難しいね!

#4/1/2020#
って書くんですね!

なんで年月日の順じゃないんだよ
馬鹿野郎っ!

それは確かにw
シートを移動させる
よし!じゃあまずは!!
シートを移動させる方法からだ!!
Moveメソッドさんというものを使うぞ!!
↓Sheets(). と入力するとメソッドのインテリセンス出てくれます。
なのでシート名を入れる前に先にメソッドを入力してるよ

移動させたいシートは”2020年04月”
移動先は Before:=Sheets(2)に指定。

結果はこうなるんだけど…ちょっと注意も必要!

じゃ、Sheets(4)のbeforeにするとどうなるかと言うと…

なんと!3シート目。
自分のシートも含めて数えるから、シートの位置によっては
意図したとおりに移動しないことも。

こういうことがないように、次から打開していくべ!
一番後ろへ移動を12回ループ
うしゃ!!お次。
さっきみたいに、シートの位置によって結果が変わらないようにするには…
移動先を、一番最初もしくは一番後ろにしてあげるといいね!
“シートを一番後ろへ移動”ってコードを書くぞ。

一番後ろってことは…今回のブックなら、
12シート目の後ろって書き方でOk!だけども…

ブックのシート数は、Sheets.Countで求められるから!
こっちで書いてあげたほうがよいね!

あとはこれを12回繰り返すコードに変えちゃおう!

年月の求め方(yyyy年mm月)
よし!お次!!
今のままだと2020年04月シートを12回後ろに移動させるコードになってるから…
ココを一月ずつ、ずらしてあげたいんだよね!

考えかたとしてなんだけど…
①日付をきめる!2020/4/1
➁1ヶ月ずつずらす!(dateadd関数)
③Format関数で”yyyy年mm月”の形式にする
って感じ!

じゅあまずは①から!
日付はちょっとクセがあって、#4/1/2020# のように書きます!

続いてはFormat関数で、2020/4/1→2020年04月に変換するコード!

一旦ここでDebug.printを入れて確認!

1ヶ月ずつ日付をずらす
よし!じゃあこれで最後!!
ループの中で一月ずつずらしてあげればOK!!

日付をずらしたい時は、dateadd関数!!
これもググったり、ChatGPTさんに聞いたらすぐ出てくるよ!


ループの数値は1~12。
4月から3月まで、一月ずつずらしたい。
つまり…第二引数のところは、0から11になるようにすればよいから…

最後は、2020年04月のところにぶち込んであげりゃ~OK

オツカレサマデシタ!

お疲れさま!
頑張ったね!

お疲れさまでした!
あとがたり
おはこんばんちは。うp主です。
VBA100本ノック、15本目の解説となります。
最近更に多忙のため…月一くらいでノックは再チャレンジ中。
さて…今回は…
噂のChatGPTさん…ではなく、まともに解いてみたぞ。w
これくらいはね~流石にね。
ただ…ちょっと、間が空きすぎて…
どこまで説明したか、何を説明したか自分でもわからんくなってきた…いかんいかん。
もしなんか、「急にしれっと新しい知識使ってくる」みたいなことがあるかもしれませんが…
それは主が、何を説明したかを忘れているからです。
はい、テキトーチャンネルです。
とりあえず今日もお疲れポン!
コメント