15本目 年月順にシートを移動

VBA100本ノック

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

これくらいはね~流石にね。

ただ…ちょっと、間が空きすぎて…
どこまで説明したか、何を説明したか自分でもわからんくなってきた…いかんいかん。

もしなんか、「急にしれっと新しい知識使ってくる」みたいなことがあるかもしれませんが…
それは主が、何を説明したかを忘れているからです。
はい、テキトーチャンネルです。

とりあえず今日もお疲れポン!

コメント

タイトルとURLをコピーしました