7本目 日付を扱う

VBA100本ノック

VBA100本ノック7本目を動画で解説してみました。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック 7本目
A列は文字列データ(表示形式が文字列)で日付が入っています。
日付とみなされる場合はB列に月末日付をmmddの形式で出力してください。
日付け以外の場合は空欄にしてください。
例.B2は「0930」と出力する。
※何をもって日付とみなすかも含めて考えてください。

動画の流れ・解答

■考えた流れ
0:00 冒頭・問題確認
1:46 プロシージャ作成・最終行を求めるコードの復習
3:36 日付かどうか判定するコードの”ググり方”
5:31 A列にが日付かどうか判定(IsDate関数)
7:13 IsDate関数の結果で条件分岐
8:56 日付をmmdd形式に変更(Format関数)
10:36 月末の日付を求める(DateSerial関数)

※動画内での回答

Sub ノック7本目()

    Dim i As Long
    Dim 最終行 As Long
    最終行 = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To 最終行
        If IsDate(Cells(i, 1)) = True Then ' =Trueは無くても良い
            Cells(i, 2) = Format(DateSerial(Year(Cells(i, 1)), Month(Cells(i, 1)) + 1, 0), "'mmdd")
        Else
            Cells(i, 2) = ""
        End If
    Next i

End Sub

※神髄さんの解答(これ以外の方法も紹介してくれてます)

Sub 模範解答()
  Dim i As Long
  Dim d As Variant
  For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    d = Replace(Cells(i, 1).Value, ".", "/")
    If IsDate(d) Then
      d = CDate(d)
      Cells(i, 2) = Format(DateSerial(Year(d), Month(d) + 1, 0), "'mmdd")
    Else
      Cells(i, 2) = ""
    End If
  Next
End Sub

IsDate、Format、DateSerialなど、関数のオンパレードの問題!!
Replaceの部分はさすがに説明しきれませんでした…。

新人君
新人君

よく使う関数が
目白押しっすね!

ブチョ
ブチョ

目白っつーか
白鳥押しだな!

新人君
新人君

メジロと勘違いしてる…?

最終行を求めるコードの復習

最終行を求めるのは、今回で3回目?っすね!(たぶん)

Cells(Rows.Count…ってさすがにノック100本やったら覚えました。
※70本目ぐらいまでは覚えてなかったような…

とりあえずB列には”ここに日付”って文字を入れてます。

日付かどうか判定するコードの”ググり方”

ググるときのおススメ紹介も動画にしてまっす~~

まぁ普通にググっても全然いいんですけどね。↓

Excel、VBAなら、とりあえず”神髄”って入れてググってみてwwww

ほぼ100%、神髄さんのサイトヒットするからwww
まとめ方がとても上手で何万回お世話になったかわかりませぬ…。。

以上、とりまずは一つの信頼性のあるサイトで調べてみることが大事ってお話!
Microsoft公式もいいんですけど、
書き方難しいですし、使用例が載ってないこと多いですもんね。

A列にが日付かどうか判定(IsDate関数)

初めてのVBAの中で関数を使ってみよう!
使い方はシートと一緒!
関数名(引数) だぞーーん

A列のセル※Cells(i,1)をぶち込んであげると…

Cells(i,1)が日付かどうかをTRUE or FALSEで返してくれるぞ!

IsDate関数の結果で条件分岐

条件分岐はIFステートメントさんで余裕のよっちゃんだったね!

こんな感じで書いたらOK!↓

ただ一応補足!
= Trueって書き方ってうまい人はやらないんです実は…たぶん…

If IsDate(Cells(i,1)) Then って書けばOK!
この方が短くて楽なんだけど…
初心者さんへの可読性を考えたら=True入れてあげたほうが親切なのかな?

これを実行した結果はこんな感じ!↓

日付をmmdd形式に変更(Format関数)

お次は日付を扱う方法なり~~。
まずはシート上での復習??から。

言わずと知れた関数ですよね??たぶんね。

TEXT関数さんと”ほぼ”全くおんなじ感覚で使えるのが、FORMAT関数さん!!

TEXT関数さんが使えたらFormat関数さんも使えるぞ!!

ただし、mmddの前に'(シングルコーテーション)を付けるのを忘れるなよっ!

実行結果はコチラ↓
あとちょっとで完成だね!

月末の日付を求める(DateSerial関数)

最後、A列の日付から月末の日付を求めちゃおう!!

こんなもん、VBA 月末 神髄 でググれば楽勝ポンポンです。↓

DateSerialの中の、Cells(i,1)に対して、さらに
Year関数やMonth関数でを使わないといけないのがちょっと難しいかな~~。
式が長くなっちゃうし。

Monthの部分は、+1してあげて翌月を求めてあげちゃって…

最後、DateSerialの第三引数、Dayのところを”0″にすればOK!!!
ココを”1″にしたら1日、”2″にしたら2日って意味になるから、
“0”にしたら1日戻って”前月末”が求まるってわけっすわあ!

実行してあげると…↓

うぽっ!できました!

ブチョ
ブチョ

関数がいっぱいで大変だったね!

新人君
新人君

頑張りましたね!

ブチョ
ブチョ

次回はSUM関数だけで
解ける問題にしてださい!

新人君
新人君

それじゃ勉強にならんやろ…

あとがたり

おはこんばんちは。uぷ主です。
VBA100本ノック、7本目の解説となります。

今回は初めての”関数”でしたね~~。
更に”おススメのググり方”なんかも動画に入れたので…非常にボリューミーになっちゃいました(^^♪

かなり重要な回だったと思ってるんですが…
サクッと進めすぎちゃったところもあるので、

関数の使い方、日付の扱い方など、これから出てきたときは
もうちょっとゆっくり復習してもいいかもしれない…

今回も休日を返上して頑張ったぞ!!

次回も楽しみにしていてください~!

最後までご視聴、ブログ閲覧いただきありがとうございました!!

コメント

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