エクセルで日付データを管理する際、年と月を使って期間の加算や合計を行う方法が非常に役立ちます。たとえば、プロジェクトの所要期間や社員の勤務年数の計算などに応用できます。この記事では、エクセルで年月を用いた日付計算を行う手順を、関数とVBAマクロを使って詳しく説明します。
年と月の形式で記録されたデータの合計を計算して表示する方法
年と月で表されたデータの合計を算出する手順と方法について説明します。
たとえば、データが「1年2ヶ月」という形式で与えられた場合、
その加算に便利な計算式をここで紹介します。
=IFERROR(INT(SUMPRODUCT(0+(LEFT(B$2:B$10,FIND("年",B$2:B$10)-1)12+MID(B$2:B$10,FIND("年",B$2:B$10)+1,FIND("か月",B$2:B$10)-FIND("年",B$2:B$10)-1)))/12)&"年"&MOD(SUMPRODUCT(0+(LEFT(B$2:B$10,FIND("年",B$2:B$10)-1)12+MID(B$2:B$10,FIND("年",B$2:B$10)
エンターキーを押すと、年数と月数の合計が計算されます。
こちらはExcelの数式についての説明です。
FIND("年", B$2:B$4)
:この関数は、B2からB4までの範囲で「年」という文字が初めて現れる位置を探します。LEFT(B$2:B$4, FIND("年", B$2:B$4)-1)
:B2からB4のセルで、「年」の文字の直前までの文字列を取り出し、年数を抽出します。FIND("年", B$2:B$4)+1
:「年」という文字の直後にある文字の位置を特定します。FIND("か月", B$2:B$4)
:B2からB4の範囲で「か月」という文字がある位置を検索します。MID(B$2:B$4, FIND("年", B$2:B$4)+1, FIND("か月", B$2:B$4)-FIND("年", B$2:B$4)-1)
:「年」の直後から「か月」の直前までの文字列を取り出し、月数を抽出します。LEFT(B$2:B$4, FIND("年", B$2:B$4)-1) * 12
:抽出した年数を12倍して月数に換算します。LEFT(B$2:B$4, FIND("年", B$2:B$4)-1) * 12 + MID(B$2:B$4, FIND("年", B$2:B$4)+1, FIND("か月", B$2:B$4)-FIND("年", B$2:B$4)-1)
:年数から計算した月数と抽出した月数を合算して、合計月数を算出します。SUMPRODUCT(0+(LEFT(B$2:B$4, FIND("年", B$2:B$4)-1) * 12 + MID(B$2:B$4, FIND("年", B$2:B$4)+1, FIND("か月", B$2:B$4)-FIND("年", B$2:B$4)-1)))
:B2からB4までの範囲で、計算された総月数を合計します。INT(SUMPRODUCT(0+(LEFT(B$2:B$4,FIND("年",B$2:B$4)-1)*12+MID(B$2:B$4,FIND("年",B$2:B$4)+1,FIND("か月",B$2:B$4)-FIND("年",B$2:B$4)-1)))/12)
: この計算式は、全月数を12で割り、結果を整数化して年数を算出します。MOD(SUMPRODUCT(0+(LEFT(B$2:B$4,FIND("年",B$2:B$4)-1)*12+MID(B$2:B$4,FIND("年",B$2:B$4)+1,FIND("か月",B$2:B$4)-FIND("年",B$2:B$4)-1))),12)
: この式では全月数を12で割った余りを計算し、その値を月数として求めます。これにはMOD関数が用いられます。IFERROR(INT(SUMPRODUCT(0+(LEFT(B$2:B$4,FIND("年",B$2:B$4)-1)*12+MID(B$2:B$4,FIND("年",B$2:B$4)+1,FIND("か月",B$2:B$4)-FIND("年",B$2:B$4)-1)))/12)&"年"&MOD(SUMPRODUCT(0+(LEFT(B$2:B$4,FIND("年",B$2:B$4)-1)*12+MID(B$2:B$4,FIND("年",B$2:B$4)+1,FIND("か月",B$2:B$4)-FIND("年",B$2:B$4)-1))),12)&"か月","")
: この計算式では、求めた年数と月数を「年」と「か月」の形式で文字列化して表示します。エラーが発生した場合、IFERROR関数により空文字が返されます。
これらの計算式は複雑に見えるかもしれませんが、一つずつ機能を理解していけば、それほど難しくはないです。時間を見つけて、じっくりと学んでみてください。
VBA(マクロ)での処理方法について
以下に示す関数は、指定された範囲のセルを解析して期間を計算するVBAマクロの例です。
Function CALCULATE_DURATION(rng As Range) As String
Dim sum As Long
Dim element As Range
For Each element In rng
If InStr(element.Value, "年") > 0 Then
sum = sum + Val(Left(element.Value, InStr(element.Value, "年") - 1)) * 12
sum = sum + Val(Mid(element.Value, InStr(element.Value, "年") + 1, InStr(element.Value, "か月") - InStr(element.Value, "年") - 1))
ElseIf InStr(element.Value, "か月") > 0 Then
sum = sum + Val(Left(element.Value, InStr(element.Value, "か月") - 1))
End If
Next element
Dim calculatedYears As Long, calculatedMonths As Long
calculatedYears = Int(sum / 12)
calculatedMonths = sum Mod 12
CALCULATE_DURATION = calculatedYears & "年" & calculatedMonths & "か月"
End Function
この関数は、指定したセル範囲において、「年」や「か月」の単位で記述された期間を月数に換算し、その総合計から年数と月数を導き出して文字列で返します。
このプログラムの機能を説明します。
Function TOTALPERIOD(rng As Range) As String
: TOTALPERIODという関数を定義し、文字列型の戻り値を返します。この関数は、データが入力されたExcelの範囲を引数として使用します。Dim total As Long
: 総月数を記録するための変数totalを長整数型で宣言します。Dim cell As Range
: 処理対象のセル範囲rng内の各セルを指し示す変数cellを宣言します。For Each cell In rng
: rng内の各セルについて、次の操作を繰り返します。If InStr(cell.Value, "年") > 0 Then
: 対象セルに「年」という文字が含まれているか確認します。
- 含まれている場合、次の操作を行います。
total = total + Val(Left(cell.Value, InStr(cell.Value, "年") - 1)) * 12
: 「年」より前の文字列を数値に変換し、12を乗じてtotalに加算します。これにより年数が月数に変換されます。total = total + Val(Mid(cell.Value, InStr(cell.Value, "年") + 1, InStr(cell.Value, "か月") - InStr(cell.Value, "年") - 1))
: 「年」の直後から「か月」の直前までの文字列を数値に変換し、totalに加算します。これにより月数が加算されます。- 含まれていない場合は、次のセルへ移ります。
ElseIf InStr(cell.Value, "か月") > 0 Then
: 対象セルに「か月」という文字が含まれているか確認します。
- 含まれている場合、次の操作を行います。
total = total + Val(Left(cell.Value, InStr(cell.Value, "か月") - 1))
: 「か月」より前の文字列を数値に変換し、totalに加算します。これにより、月数だけが加算されます。- 含まれていない場合は、次のセルへ移ります。
次のセルへ
: 次のセルへ移動し、手順4に戻ります。Dim years As Long, months As Long
: 年数と月数を格納するための変数yearsとmonthsを長整数型で宣言します。years = Int(total / 12)
: 総月数が格納されたtotalを12で割り、整数部分を年数として取り出します。months = total Mod 12
: 総月数totalを12で割った余りを月数として設定します。TOTALPERIOD = years & "年" & months & "か月"
: 計算した年数と月数を文字列に組み合わせ、「年」と「か月」の形で関数の戻り値とします。
まとめ
この記事では、エクセルを利用して年数と月数の合計を計算する方法について詳しく説明しました。
エクセルを効果的に使いこなし、日々の作業をより効率的に進めましょう!