Excelで日付から四半期を求めたいときはないでしょうか。
たとえば複数ユーザーで共有しているマクロ付きExcelファイルの誤操作を防ぎたいときなどです。
けど、そんな中で悩むことは、
・許可ユーザを追加/削除したいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・ユーザー定義関数で四半期を求める方法
・VBAで一括で四半期を求める方法
についてまとめます!
もくじ
Excelで日付から四半期を求めるイメージ
Excelで日付から四半期を求めるイメージについて説明をします。
まずは、4月はじまりの四半期を求める元の日付を入力していきます。
次に隣のセルに四半期を求める数式を入力します。
はい、四半期が求められました。
次にいろいろ入力されている数式をぎゅっと凝縮したひとつの関数(ユーザー定義関数)にしてみます。
はい、ひとつのユーザー定義関数で四半期が求められましたね。さらに年度もおまけてでついています。
次にVBAで四半期の計算から代入まで一度におこなっていきます。
はい、ボタンポチで一瞬で四半期が代入されます。
それではさっぞく実装してみましょう!
四半期を求める日付リストを用意する
四半期を求める日付リストを用意しましょう。
ExcelシートのA列に日付を記載していきます。
日付から四半期を求める関数(基本)
関数の概要
まずは基本となる、日付から四半期を求める関数の設定方法について説明をします。
一般的な方法は、IFS関数やSitch関数ですが、これらの関数の場合、1~3月の場合は4Q、4~6月は2Qとするなど条件をいくつも設定をしなければならないので、関数の文字数が多くなりがちです。
今回は、関数の文字数を抑えるため、条件は設定せず、計算と繰り上げの関数を使い四半期を求めていきたいと思います。
使用する関数
早速四半期を求める関数を設定し、実行してみたいともいます。
関数は以下の通りです。
="第"&ROUNDUP(MONTH(EDATE(<日付セル>,-3))/3,0)&"四半期"
先ほど入力した日付の隣のセルに関数を入力し、日付セルのアドレスがA2である場合は<日付セル>の箇所をA2へ変更します。
="第"&ROUNDUP(MONTH(EDATE(A2,-3))/3,0)&"四半期"
はい、四半期が求められましたね。
続いて関数を日付がある最終行までドラッグしコピーしていきます。
はい、すべての日付が求められましたね。
関数の説明
四半期を求める関数について説明をします。
まずはMONTH関数で、日付から月のみを抽出します。
例えば2022/1/24であれば1が抽出されます。
=MONTH(EDATE(A2,-3))
続いて、EDATE関数で3か月減算をします。
EDATE関数は、開始日から起算して、指定された月数分加減算する関数です。
EDATE(<開始日>, <月>)
日本の会計年度が4月はじまりであることから、暦とずれている3か月分を減算することにより順序をあわせることができます。
次に、四半期単位の順番を求めていきます。
四半期は12を4分割し、3か月ごとに繰り上がる仕様となっています。
ですので、EDATE関数で求めた会計年度上の順番を3で割ることにより四半期の順番を求めることができます。
例えば、9月であれば4月から6番目に位置します。それを3で割ると、第2四半期であることがわかります。
次に3で割り切れない7月や8月の順番については、そのまま使用できないので、整数部分まで切り上げていきます。
日付から四半期を求めるユーザー定義関数(カスタム)
関数の概要
次にひとつの関数で日付から四半期を求めるユーザー定義関数を作っていきましょう。
処理内容は上記基本編の関数と同様で、計算と繰り上げの関数を使い四半期を求めていきます。
基本編と異なるところは処理内容から表示内容まで関数内に設定していますので、ワークシートへ複雑な条件式を入れることなく、値の代入だけで四半期を求められることです。
ユーザー定義関数を設定する
ユーザー定義関数を新規に追加していきましょう。
関数はVBAのFunctionプロシージャで作成します。
サンプルコードは以下の通りです。
Public Function FuncShihankiApril(strDay As Date) As String
'4月はじまりの会計年度にするため3か月減算します。
strDay = DateAdd("m", -3, strDay)
FuncShihankiApril = Year(strDay) & "年度" & "第" & CStr(Application.RoundUp(Month(strDay) / 3, 0)) & "四半期"
End Function
ユーザー定義関数の実装方法
四半期を求めるユーザー定義関数の実装方法については
VBAの実装手順
をご参照ください。
ユーザー定義関数を使う
早速四半期を求めるユーザー定義関数を使用し、実行してみたいと思います。
関数は以下の通りです。
=FuncShihankiApril(<日付セル>)
入力した日付の隣のセルに関数を入力し、日付セルのアドレスがA2である場合は<日付セル>の箇所をA2へ変更します。
はい、四半期と追加した年度が求められましたね。
続いて関数を日付がある最終行までドラッグしコピーしていきます。
はい、すべての日付が求められましたね!
ユーザー定義関数の説明
四半期を求めるユーザー定義関数について説明をします。
4月はじまりの会計年度にするため3か月減算します。
strDay = DateAdd("m", -3, strDay)
I列に年度付き四半期を代入します。
FuncShihankiApril = Year(strDay) & "年度" & "第" & CStr(Application.RoundUp(Month(strDay) / 3, 0)) & "四半期"
Month(strDay) / 3で日付の月数を求め。3で割ります。RoundUp関数で切り上げ整数にします。仕上げにCStr関数で文字列に変換します。
CStr(Application.RoundUp(Month(strDay) / 3, 0))
日付から四半期を求めるVBA
これまで関数を手入力する必要がありましたが、次はVBAを使い、関数を挿入する処理や計算結果を挿入する処理を一括で行っていきましょう。
VBAコード
VBAは以下の通りです。
処理内容はユーザー定義関数と同じになります。日付データはCellsで番地指定の上取得していきます。
Sub 四半期を求める()
Dim trDay As Date
For i = 2 To Cells(1, 1).End(xlDown).Row
'4月はじまりの会計年度にするため3か月減算します。
strDay = DateAdd("m", -3, Cells(i, 1).Value)
'I列に年度付き四半期を代入します。
Cells(i, 9) = Year(strDay) & "年度" & "第" & CStr(Application.RoundUp(Month(strDay) / 3, 0)) & "四半期"
Next
End Sub
VBAの設定
四半期を求めるVBAの設定内容について説明をします。
A列の2行目からの開始となります。開始行数が異なる場合は2の数値を変更してください。
For i = 2 To Cells(1, 1).End(xlDown).Row
左から9番目のI列に四半期の算出結果が挿入されます。別の列にしたい場合は列番号を変更してください。
Cells(i, 9) =
VBAの実装
四半期を求めるVBAの実装方法については
VBAの実装手順
をご参照ください。
VBAの実行
四半期を求めるVBAを実行してみましょう。
はい、求められた四半期の値が入力されていますね。
VBAの説明
四半期を求めるVBAについて説明をします。
A列の2行目から最終行までの行数分繰り返します。
For i = 2 To Cells(1, 1).End(xlDown).Row
4月はじまりの会計年度にするため3か月減算します。
strDay = DateAdd("m", -3, Cells(i, 1).Value)
I列に年度付き四半期を代入します。
Cells(i, 9) = Year(strDay) & "年度" & "第" & CStr(Application.RoundUp(Month(strDay) / 3, 0)) & "四半期"
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・ユーザー定義関数で四半期を求める方法
・VBAで一括で四半期を求める方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す