「今さら」なんてない

「自分にもできそう」を伝播させるブログ

日時の加減算をワンボタンでできるようにしよう!【ExcelVBA】

主にスケジュール管理シート対象にはなりますが、

  • 日付を1日だけ変更したい
  • 数値(見積時間)を少しだけ変更したい

など、リスケ時の頻出動作を簡単化したくないですか?


簡単にできます。
下記コードをExcelにコピペして、
ショートカットを割り当てるだけです。

では早速参りましょう!


概要

選択セルが

  • 日付なら1日ずつ
  • 数値(3桁まで)なら10ずつ ※1桁のものは1ずつ

加減算します。それだけです。


コピペするコード

標準モジュール

Sub 日付や見積や時刻を加算する()
    加減算 (1)
End Sub

Sub 日付や見積や時刻を減算する()
    加減算 (-1)
End Sub
Function 加減算(増減値 As Integer)
    Dim buf
    buf = ActiveCell
    Select Case True
    Case IsDate(buf)                                    '日付
        If buf = "" Then: buf = Date
        buf = DateAdd("d", 増減値, buf)
    Case buf Like "###"                                 '見積時間3桁
        buf = buf + 増減値 * 10
    Case buf Like "##"                                  '見積時間2桁(何故かカンマ区切りでOR条件にできない)
        buf = buf + 増減値 * 10
        If buf < 10 Then: buf = 9
    Case buf Like "#"                                   '見積時間1桁
        buf = buf + 増減値 * 1
        If buf < 1 Then: buf = 1
        If buf > 9 Then: buf = 10
    Case IsDate("01/01/01 " & Format(buf, "hh:mm:dd"))  '時刻
        buf = DateAdd("n", 増減値 * 10, buf)
    End Select 'True
    ActiveCell = buf
End Function

コードの解説

ショートカット設定対象はこの2つ

プロシージャ名 ショートカット例
日付や見積や時刻を加算する ALT+{UP}
日付や見積や時刻を加算する ALT+{DOWN}

ショートカット一括割当方法はこちら

yoshino-ya.hatenablog.com

メイン

Select Case True:複雑な条件分岐はこれ!

Select文って、最初のうちはSelect Case 変数として、
例えばその変数が1の場合は、という場合分けをしたい時は
Case Is =1なんて使い方をするのですが、

Like演算子を使った場合分けをしたいときには
結果がTrueであることを条件にするみたいで、
この記法が手札に加わると、
「余程簡単な条件文でない限りIf文要らなくね?」
って感じになってきます。

いろいろ調べているうちにヒットした、
こちらの記事がわかりやすかったです。 www.sejuku.net

日付と時刻をどう見分けるか

日付も時刻もIsDateだけで判別しようとするとどちらもTrueとなります。
そこでIsDate("01/01/01 " & Format(buf, "hh:mm:dd"))という感じに
いろいろ装飾をつけると時刻のみTrueが返ってくるようになります。
※時刻のみの表記の場合です。


DateAdd:日時の計算

日付同士の計算のDateDiffより簡単で分かりやすいです。

'DateAdd(加減算の単位, 加減算値, 日時データ)'
の通り、単純足し算引き算です。
加減算の単位というのは

  • なのか時間なのか
  • なのかなのか

などの単位時間のことです。
細かいことは下記リンクにありますのでご参照ください。

DateAdd 関数


加減算値の調整をしたい方はこちら

buf = buf + 増減値 * 10

buf = buf + 増減値 * 1
        If buf < 1 Then: buf = 1
        If buf > 9 Then: buf = 10

の中の*10*1をいじってください。

個人的感想

最初はタスク管理ツールとかガッツリ系を題材にしていましたが、
この手のシンプル系に最近ハマっています。


こういう汎用性のあるネタって良いですね。
もっと広まれ、こういうの
もっとラクになれ、みんな