まえきんブログ

*文系出身SEが綴る、日常・趣味・体験談・スキルアップについての雑記ブログ*

【事例で学ぶExcel VBA #6】指定日がその月の第〇週目かを取得する


まえきんです!

このシリーズでは私が普段実務で手作業の自動化ツールを作成する中で実装している

処理の一部を取り上げ、ブログ掲載用にカスタマイズしたものをご紹介しています。

全て私の実務ベースで使っているものなので、使いこなすことが出来れば、

必ずや手作業の自動化に一役買ってくれる内容ばかりと勝手に自負しています笑 😁

「本だけじゃなくてExcel VBAを実践的に勉強してみたい!」「ハードル高くて苦手

だったけどもう一度VBAを勉強してみたい!」「実務で役に立つVBAを学びたい!」

そんな方々の学習意欲向上の一助になればと思っております😊

👇さて、今回のテーマはコチラ

#6:指定日がその月の第〇週目かを取得する

私の場合は実務上、指定された日がその月の第何週目かを知りたいときがあります。

カレンダーを引っ張り出して地道に計算するのも一つの選択肢ですが、VBAerであれば、

これをマクロで実装してみたくなるのはきっと私だけではないはず😎ということで

今回は、指定日がその月の第〇週目かを取得するマクロについてご紹介します👍

ツールの全体像


まずは任意のエクセルシートに任意のフォーマットで一覧を作成しておきます。

本ツールのVBAコードは以下の通りです。

VBAコード ※パソコンでの閲覧推奨
Option Explicit
'===================================================
'ツール名:カレンダー計算ツール(まえきんブログ掲載用にカスタマイズ)
'作成日:2022/04/09
'処理概要:指定日がその月の第〇週目かを取得する
'付属機能:なし
'作成者:まえきん
'===================================================

'===================================================
'関数名 :メイン関数(データ取得ボタン)
'処理内容:指定日がその月の第〇週目かを取得する
'トリガー:データ取得ボタンを押下した際にコールされる
'引数  :なし
'戻り値 :なし
'===================================================
Private Sub CommandButton1_Click()
    '----------
    '変数宣言
    '----------
    Dim FirstDay As String '月初の日付
    Dim WeekNumber As Integer '月内週
    
    '----------
    '月内週の取得
    '----------
    With Worksheets("データ取得シート")
        '指定日付の月初の日付をセット
        FirstDay = DateSerial(Year(.Cells(2, 1).Value), _
        Month(.Cells(2, 1).Value), 1)
        '月内週のセット
        WeekNumber = WorksheetFunction.WeekNum(.Cells(2, 1).Value) - _
        WorksheetFunction.WeekNum(FirstDay) + 1
        .Cells(2, 2).Value = WeekNumber & "週目"
    End With
    
    '----------
    '処理完了通知
    '----------
    MsgBox "データ取得が完了しました!"
End Sub
VBAコード解説

'----------
'月内週の取得
'----------
今回のマクロを実装するうえで、実は「その年の」何週目かが戻り値となるWeekNum関数

という便利な関数があります。ただ、これ単体では「その月」の第何週目かを求めることが

出来ません。この関数を応用し、指定日がその月の第〇週目かを以下のように計算します。

(例)指定日付 = 2022/04/09の場合
A:指定日付:該当年の週目数
B:指定日付:該当年の指定日付の月初の週目数
A - B + 1 = 指定日付のその月の週目数
↓↓
15週目 - 14週目 + 1 = 2週目

マクロ実行結果

指定日(2022/04/09)はその月の第2週目

処理完了通知

上記の通り、結果が得られましたでしょうか😊

既存の関数単体の使用では求めたい内容にピンポイントでたどり着けなくても、

こうした計算式の応用で実現できるというのはなんとも面白いところですね!

今回はこれで以上です😊
この記事やVBAコードが「参考になった!」「役に立った!」など
少しでも思って頂けたらご支援やいいねを頂けると嬉しいです😌
今後の記事投稿のモチベーションアップになります(*´ω`)
↓↓

最後まで読んで頂きありがとうございました!ではまた!