エクセル関数とVBAを組み合わせて商品期限切れ通知を表示する方法

エクセル検索
HOMEUserForm印刷画面ファイル図形
日付・時刻データセル関数VBA関数

小さな会社や個人では、アプリや専用ソフトを使って商品管理とかはコストが見合わず、エクセルで商品管理していませんか?

このエクセルによる商品管理でリストの中にある期限切れ商品が気づかずに放置されて困ったことありませんか?

エクセルファイルを開いたら自動的に通知させれば、簡単に解決しますよ!

方法は簡単で、エクセル関数とエクセルVBAを組み合わせて、ユーザーフォーム上に簡単なお知らせ機能を持たせるだけで完成しますので、作り方をご紹介します。

エクセル関数の設定

“とりっぷぼうる”サイト内で紹介しているフリーパスも、全てが通年販売だと一度掲載すればそのままでいいのですが、当然ながら期間限定フリーパスが圧倒的に多いです。

その為に期限切れになったら削除しないといけないので、サイト内で管理は難しいのでエクセルにリストを作成して管理しています。

フリーパス一覧リスト
エクセルにリスト登録したフリーパス一覧

見ての通り、実際にこのような単純なリストで管理しています。

波乗りアヒル

それではまず始めにエクセル関数を使って、残り何日有効なのかが分かるようにしましょう。

TODAY関数で本日の日付を自動取得

今日の日付は当然ながら日々変わっていくので、わざわざ毎回手入力するなんて面倒です。

そこで、エクセルを開いたら今日の日付を自動的に取得して表示させる関数が「TODAY関数」です。

上記画像にTODAY関数はセルF2に記入しています。

このTODAY関数を私自身は様々なエクセルファイルで使用してるぐらい、使用頻度の高いエクセル関数と言ってもいいと思います。

しかも使い方もすごく簡単でセルF2にはこのように入力しているだけです。

TODAY関数

=TODAY()

それでは次に、残り何日なのかが分かるように計算式を設定しましょう。

期限終了日から今日の日付を引いて残数表示

上記画像に計算式はD列に記入しています。

ごくごく普通の引き算なので、終了日から今日の日付を引くと残り日数が表示され、例えばセルD2には下記のように数式を入れると・・・

残数表示

=C2-F1

となりますが、あまりにもこのままでは単純すぎて、C列が空欄(まだリストにデータが無い状態)だと、エラーになり#####と表示されてしまいます。

このままでは並べ替えなどができないので、空欄の時は「0」と表示されるようにIF関数を使いましょう。

エラー対策

=IF(C2=””,0,C2-F1)

これで、フリーパス(商品)が未登録の時は「0」となり、エラー表示が無くなり見た目もスッキリしますね。

この式をD列の3行目以降にも入力すれば完成ですが、ここでの場合は200行目まで入力してあれば、問題ないと思って入れてあります。

このIF関数はとても便利で条件に応じて結果を自由に変えることができるので、絶対にマスターしなくちゃいけないエクセル関数です。

エクセル関数での準備はこれでおしまいなので、残りは全てエクセルVBAで作業となります。

ワークシート上の見栄えなどの書式などは、ここでは省略します。

エクセルVBAの設定

ここで行うエクセルVBAを使わないで毎回の手作業であれば、特に必要が無くなってしまうのですが、エクセルVBAでの設定を行うと下記手順が全て自動化されますので、エクセルファイルを開いただけで完成します。

  1. リストの並べ替えが自動化され期限切れに近い順に表示されます
  2. 期限切れになったリスト見つけて文字色を赤字に変えて目立たせる

この2つの作業が一瞬で行われるのでとても便利なので、下記の手順で設定していきましょう。

並べ替えVBAコード

エクセルファイルを開くと同時に様々な作業を行うには、VBA画面のThisWorkbookに自動化させたい作業1,2の順番にコードを書いて行けば完成します。

波乗りアヒル

今回は、分かりやすくするために最初に、作業1と作業2を別々に分けてご紹介して最後に1つにまとめたVBAコードをご紹介します。

まず最初に、並べ替えVBAコードを記述するとこにより商品リストの終了日が古い順(小さい)に並べ替えることができます。

先ほどご案内した通り、ここでは200行目までとします!

並べ替えVBAコード

Private Sub Workbook_Open()
Range(“A2:C200”).Sort Key1:=Range(“C2”), Order1:=xlAscending
End Sub

解説
  1. エクセルファイルを開いたら
  2. 範囲内(セルA2:C200)をC列の値が小さい順に並べ替える
  3. マクロ記録終了
並べ替え
期限が近い順に並べ替えられました

このままでも、エクセルファイルを開くと自動的に期限切れに近くなってきた順に上から表示されるので、手動で並べ替えを行うよりは確実になると思います。

ただ、せっかくなので目立つように期限切れになった時には、文字色を赤字にして目立たせましょう。

参考までに、エクセルVBAでの並べ替え項目は3つまでとなっています。

期限切れリストを見つけたら赤文字

先ほど並べ替えを行うVBAコードを書いた次の行に、残日数(期限)が切れたら(マイナス表示になったら)文字色を赤に表示するというVBAコードを書き足します。

期限切れは赤文字にするVBAコード

For i = 2 To 200
If Cells(i, 4) <= 0 Then
Cells(i, 4).Font.ColorIndex = 3
Else
Cells(i, 4).Font.ColorIndex = 1
End If
Next i

解説
  1. 繰り返し処理の変数「i」を宣言して変数は2行目~200行目にする
  2. もしセル(i行目の4列目)が0よりも小さかったら(マイナス)
  3. セル(i行目の4列目)の文字色を色コード3にする(赤色)
  4. そうでなかったら(大きかったら)
  5. セル(i行目の4列目)の文字色を色コード1にする(黒色)
  6. IFステートメント終了
  7. 繰り返す(200行目まで)
期限切れは赤文字
期限切れを見つけたら赤文字にするVBAコード

このようにVBAコードを書くと、セルD2がマイナスなら赤文字、次にセルD3をチェック、次にセルD4をチェックと繰り返し200行目(セルD200)まで繰り返しチェックしてくれます。

完成したVBAコード

下記が1,2を組み合わせて完成したコードを、ThisWorkbookに書いています。

VBAコード

Private Sub Workbook_Open()
Range(“A2:C200”).Sort Key1:=Range(“C3”), Order1:=xlAscending
For i = 2 To 200
If Cells(i, 4) <= 0 Then
Cells(i, 4).Font.ColorIndex = 3
Else
Cells(i, 4).Font.ColorIndex = 1
End If
Next i
End Sub

波乗りアヒル

いかがでしたか?そんなに難しくなかったでしょ。
VBAコードは自由にコピペして、自分なりにアレンジして使ってもらって構いませんよ。

関連記事

どこかにビューーン
ちょっとの工夫で往復無料の時代が来た!!

新着ページ

よく見られているページ

大容量無料ファイル転送サービス【ACデータ】 無料イラスト【イラストAC】

紅葉スポット

2024年5月11日からマイルと楽天ポイントとの相互交換提携開始!

交換レート0.5:1なので半分になってしまいますが、使い方次第で実質3倍の価値まで引き上げられる方法です。