VBAデバッグの鬼

日報を快適にするVBA~日付の入力、操作

【今回の問題】
この日報に、ボタンクリックで日付を入れよ。
f:id:vba-tokepi:20210620053014j:plain

日付の操作に便利な関数を紹介します

日付を入れるマクロを作ろうと思ったときに、真っ先に思い浮かんだのがWeekday関数でした。

Weekday関数を理解するのに役に立つ問題がこれ!

マクロVBA練習問題 問題12
excel-ubara.com

書き方は weekday(日付,週の最初の日) です。
曜日に応じて1~7の数字を返してくれます。
デフォルトは日曜日が1。週の最初の日をvbMondayにすると月曜日が1に、vbWednesdayにすると水曜日が1になります。

今回はweekday関数を使ってこのような日付入力ボタンを作りました。
f:id:vba-tokepi:20210728024932j:plain

月曜日の日付を枠内に入力すると、月曜日から一週間分の日付を記入してくれます。
月曜日以外の日付を書くと「月曜日ではありません」というアラートが出ます。

ソースはこちら。

Sub 日付記入()
Dim w As Long
Dim wday As Date

w = Weekday(Range("P2"), vbMonday)
wday = Range("P2")

If w = 1 Then
    
    For i = 4 To 29
    Cells(i, 1).MergeArea = wday
    wday = wday + 1
    i = i + 4
    Next
    
Else
 MsgBox "月曜日ではありません"

End If

End Sub

P2は日付を入力するセルです。vbMondayは使わなくてもw=2を指定すれば月曜日になりはするのですが、なんだかw=1にしたかったので、あえてvbMondayを使いました。

わざわざVBAを使わなくても、関数で簡単にできることもある

せっかく日付入力マクロを作りはしたのですが、利用者さんからは使いにくいと不評でした💦
そこで、ある利用者さんが日報の改訂版を作ってくれました。

なんと、簡単な関数で日付入力の自動化ができてしまうんですね。

最初の日付を2021/7/27形式で入力すれば、残りの日付はずらっと自動的に入力されます。

さて、どうやったのかというとまずA4セルの日付を絶対参照。そこに一日たつごとに$A$4+1,$A$4+2,$A$4+3・・・と入力しておけばいいだけです。
Excelの日付に数字を足せば何日後という機能は便利ですよね!

VBAで何とかしよう!と工夫しだすと、簡単にできてしまう関数の存在を忘れてしまうことがよくあります。

数字だけVBAで指定してあげればvloolupでほとんどの項目に入力できる納品書なんかもあります。

VBAを学ぶと同時にExcelの関数も学んでおくと事務方で重宝されますよ✨
私がExcel関数を使いこなすのに役に立った本を二冊紹介しますね。

一冊目は「Excel最高の学び方」
vlookupやcountifsがメインですが、この二つの関数でほとんどの集計作業は出来てしまうという、何度でも読み返したい価値のある本です。

二冊目は「できるExcelデータベース」
Excelでのデータ処理がほとんどできるようになってしまう本です。セルや関数の扱いに詳しくなります。

VBAも関数も極めれば、ちょっとしたExcelエキスパートですね!