2023/03/10
【ex27】ChatGPTを使ってマクロ開発2

【ex27】ChatGPTを使ってマクロ開発2



YouTubeで開く

ChatGPTを活用して開発未経験でもマクロ開発できる方法について解説しています。
こちらの内容では、特にChatGPTから理想の回答が返ってくる質問方法について解説しています。

00:00 挨拶
01:00 手順1
01:43 手順2
02:28 実践
09:31 補足
10:47 まとめ

▼準備・完成ファイル▼

2023/03/08
【3-15】リストボックスの作成方法

【3-15】リストボックスの作成方法



YouTubeで開く

リストボックスの作成方法について解説しています。
また、そのリストボックスを活用した例を3つ紹介しています。
※完成ファイルの配布はこちらになります。(IT予備メンバー限定)

00:00 挨拶
00:48 リストボックスの作成方法
04:24 活用例1
06:59 活用例2
12:00 活用例3
16:16 まとめ

▼準備ファイル▼

2023/03/01
【2-15】色んな日付の計算方法

【2-15】色んな日付の計算方法



YouTubeで開く

定休日や(休日・祝日を除いた)営業日を考慮した日付の求め方について4パターンで解説しています。
会社の給料日の計算、締め日の計算、サブスクリプションなどの更新日の計算などに活用できます。

00:00 挨拶
01:08 例題1(翌月5日)
04:07 例題2(土日休日を除いた3日後)
07:44 例題3(翌月7日:土日休日の場合は次の営業日)
11:24 例題4(翌月9日:土日休日の場合は前の営業日)
13:05 まとめ

2023/02/18
【4-27】アドインの保存方法から設定方法

【4-27】アドインの保存方法から設定方法




・はじめに

アドインにするメリットは、マクロ有効ブックでなくても、いつでも作成したマクロを使うことができるようになったり、多くの人に共有することができるというところです。
アドインにする場合は、どんなExcelファイルでも実行できるようなマクロを用意する必要があります。

例えば、「Worksheets(“集計”)」というのをVBAで記述している内容をアドインにしてしまうと、実行したいファイルに”集計”シートがなければエラーになってしまいます。(エラー対策をすればOKです)
なので特定のシートにしか使えないマクロなどは、基本アドインにしない方がいいです。

アドインの簡単な例はこちらになります。
【便利】ステータスバーにメモ機能追加 [アドイン]

では、作成したマクロをアドインとして保存する方法から解説していきます。




・保存方法

[ファイル]から[名前を付けて保存]を選択します。
こちらの画面になりましたら、[参照]などを選択し保存画面を表示します。

保存画面が表示されましたら、[ファイルの種類]から[Excelアドイン(*.xlam)]を選択します。

そのようにすると、自動で「… > Microsoft > AddIns」のフォルダが開かれます。
基本、アドインはこちらのフォルダ内に保存しますが、他の場所でも問題ございません。
※アドインで保存するとVBAのみが「xlam」で保存され、シート情報などは保存されません。

保存することができましたら、Excelファイルは閉じて問題ございません。





・設定方法

まず初めに、空のExcelファイルを立ち上げます。
※空でなくても問題ないですが、マクロなどを使っていないExcelファイルの方が設定しやすいです。

立ち上げることができましたら、[開発]の中の[Excelアドイン]を選択します。

[開発]タブが表示されていない場合は、[ファイル]→[オプション]→[アドイン]→[設定]でも同じ画面を開くことができます。

以下の画面が表示されます。
こちらにてアドインを追加します。
一覧に保存したアドインの名前がない場合は、[参照]より対象のアドインファイル(xlam)を選択して追加します。

こちらでは「ファイル名変更.xlam」を追加しました。
後は、対象のファイル名をチェックして[OK]を選択します。

これで、登録完了です。
登録後は、アドインファイルの位置を変更することができません。
※変更すると参照ができずエラーになってしまいます。

アドインを削除する場合は、こちらの画面のチェックを外すことで削除できます。
アドインファイル自体、不要な場合は、必要に応じて削除して問題ございません。

この状態で、アドインファイル内のマクロがいつでも実行できるようになっています。
自作した関数に関しては自由に使用することができます。

またアドインの機能は、リボンやクイックアクセスツールバーなどに追加することができます。
追加はExcelのオプションにて行えます。

[ファイル]内の[オプション]などから開くことができる[Excelのオプション]内の[リボンのユーザー設定]や[クイックアクセスツールバー]にて追加できます。
アドインの機能は、[コマンドの選択]を[マクロ]にすることで表示することができます。

こちらでは、「ファイル名変更.xlam」内に記述している「FileRename」プロシージャが表示されています。

以上、アドインの保存方法と設定方法になります。

2023/02/07
【ex26】ChatGPTを使って数式作成

【ex26】ChatGPTを使って数式作成



YouTubeで開く

ChatGPTは2022年11月末にOpenAIという企業がリリースしたチャットサービスになります。
このサービスを活用して数式を作成する方法について解説しています。

例として、在庫管理表をもとに解説しています。
※この在庫管理表は配布しているため、興味があれば、同じように試されるといいかと思います。

00:00 挨拶
00:22 準備
00:40 数式①
05:30 数式②
09:07 数式③
10:42 補足
11:46 まとめ

ChatGPTのアカウント作成方法についてはこちらにて解説しています。

▼準備ファイル▼

2023/02/02
【ex25】ChatGPTを使ってマクロ開発

【ex25】ChatGPTを使ってマクロ開発



YouTubeで開く

ChatGPTは2022年11月末にOpenAIという企業がリリースしたチャットサービスになります。
このサービスを活用してマクロを開発する流れについて解説しています。

00:00 挨拶
00:08 今回の内容
01:01 ChatGPTの登録方法
04:39 ExcelVBAで入力フォームを作成
16:41 最後に
19:03 まとめ

ChatGPTのアカウントの作成方法と使い方についてはこちらにてテキストでまとめています。
※動画が早いと感じた場合などに、参考になれば幸いです。

2023/01/25
【1-04】セルの表示形式の設定方法

【1-04】セルの表示形式の設定方法



YouTubeで開く

セルの表示形式の設定方法について基礎から応用、発展まで解説しています。
Excelを使いこなすためには必要な内容になります。
特に「日時を扱う際の表示形式」が重要になります。(シリアル値の解説を含む)

00:00 挨拶
00:25 表示形式とは
05:16 数値を扱う際の表示形式
14:18 日時を扱う際の表示形式
19:10 ユーザー定義の基礎
30:25 ユーザー定義の発展
36:50 補足
37:49 まとめ

>>昔の記事はこちら

▼実践用ファイル▼

2023/01/15
【ex24】OneDrive内のパスをVBAで参照

【ex24】OneDrive内のパスをVBAで参照

VBAでExcelファイル配下のパスを取得するために「ThisWorkbook.Path」などを活用することが多いかと思います。
このコードを活用したマクロファイルをOneDrive内に配置したら、正しく実行できなくなったという報告を受けました。

今回は、OneDrive内に配置した場合に「なぜ正しく実行できなくなったのか」と「どうすれば実行できるのか」の2点について解説していきます。




・なぜ正しく実行できなくなったのか

なぜ正しく実行できなくなったのかというと、取得されたパスに問題があるためです。
試しにOneDrive内に保存した「正しく実行できないExcelファイル」に以下のコードを記述し実行してみます。

そうすると、恐らく以下のようにURLが表示されるかと思います。

これが原因です。
本来であれば、ローカルパス(C:\Users\[アカウント]\OneDrive\確認用)が取得されるべきですが、URLが取得されてしまっているため、コードの内容によってはこれが原因でエラーになります。
※Workbooks.Openでは実行できますが、Openステートメントを使う場合(テキストファイルなどを読み込む場合)などはエラーになる可能性があります。

ちなみに、私のOneDriveフォルダはDドライブ配下に配置しております。

D:\OneDrive\

※デフォルト設定の場合は以下になるかと思います。

C:\Users\[アカウント]\OneDrive\

なぜURLが取得されるのかというと、OneDriveの「ファイルのコラボレーション」機能が設定されているためです。
この機能により、OneDrive上のファイルを他のユーザーとリアルタイムで共同編集することができます。

この共同編集とはブックの共有とは異なります。
※ブックの共有とは以前の機能で、共同編集の機能とは異なり機能制限が多くあります。共同編集の機能は古いバージョンには対応していません。

この共同編集とブックの共有の違いについてはこちらでは割愛します。





・どうすれば実行できるのか

上記にて、OneDriveの「ファイルのコラボレーション」機能が設定されていることでパスがURLになることが分かりました。
この理屈から次の対策方法が考えられます。

①ファイルをOneDriveの外に移動する
②「ファイルのコラボレーション」機能をオフにする

ただ、この2つの方法の場合は、共同編集ができなくなってしまいます。
「ファイルのコラボレーション」機能をオンの状態で対応したい場合は、次の方法などがあります。

③URLをローカルパスに変換する機能をVBAで実装する

①に関しては、ファイルの位置を変更することになるため、根本的な解決にはなりません。
そのため②と③について、順に解説していきます。




→②「ファイルのコラボレーション」機能をオフにする

Windows11の場合について解説していきます。
※Windows11以外の場合に関しても同じような手順で行えます。

まず初めに、画面右下のOneDriveのアイコンをクリックします。

以下の画面が表示されたら、設定を開きます。

設定画面の中に「同期とバックアップ」という項目があります。その中の下へ移動すると詳細設定があるため、そちらを展開します。
展開したところに「ファイルのコラボレーション」という項目が表示されるため、こちらをオフに切り替えれば設定完了です。





→③URLをローカルパスに変換する機能をVBAで実装する

対象のExcelファイルを開いて以下の関数を作成します。

GetPath関数により、パスに「https:」が含まれる場合は、ローカルパスに変換して返すような仕組みになっています。
こちらは以下のように活用できます。
※こちらではメッセージボックスで表示させていますが、変数に格納するなどとして活用できます。

GetPath関数は、OneDriveの外であったとしても問題なく活用できるように開発しています。
第2引数の「”D:\OneDrive\”」はOneDriveのフォルダのパスになるので、必要に応じて変更してください。

GetPath関数の仕組みは、第1引数で受け取ったパスに「https:」が含まれる場合は、パスの前半部分を第2引数のOneDriveのローカルパスに置換して返すようになっています。

OneDrive内のパスのURLには法則性があります。
その法則は「4つ目の”/”以降が実際のOneDrive内の相対パス」というものです。
なので、4つ目の「/」の位置をInStrで探して、Left関数により、その位置よりも前の文字列を抽出して置換しています。

GetPath関数を活用することで、以下のようにローカルパスを取得できるようになります。

OneDriveのパスを正しく取得する方法については以上になります。

2023/01/14
【ex22】カレンダー入力フォーム導入

【ex22】カレンダー入力フォーム導入



YouTubeで開く

カレンダーの日付入力フォームの導入方法について解説しています。
曜日や祝日などの確認を行いながら日付を選択するだけで入力することができます。

領収書や請求書、見積書のフォーマットなどに組み合わせて使うと便利です。

00:00 挨拶
00:18 活用例
00:33 導入方法
02:08 使い方
03:53 注意点
07:28 活用例
08:10 まとめ

2023/01/08
【ex23】Excelの計算は正しくないことがある!

【ex23】Excelの計算は正しくないことがある!

こちらではExcelの計算の仕組みや注意点、対策について解説しています。




・計算結果の確認

まず最初に、次の計算結果を確認します。

これはB列の値からC列の値を引いた答えをD列に数式により結果を表示させています。
画像ではすべてが「0.1」と表示されています。

では、上記の内容を踏まえ、「引いた答えが0.1の場合に○」という条件式を書いてみます。

そうすると、ところどころ「○」ではない箇所が見つかります。
ここで多くの人は「え?」となります。

ただ、これはExcelの不具合ではなく、コンピュータで計算する上でどうしようもない問題になります。
最初の引き算の答え「0.1」の表示桁数を増やしてみます。

ところどころ、「0.1」ではなくなってしまっています。

それ以外でも、次の場合も正しく計算できません。





・Excelの計算の仕組み

まずコンピュータがどのように数字を扱っているのかについて確認します。




→コンピュータの数字

通常、私たちが生活で目にする数字は0から9まで数えたら桁が上がり10,11,12,13となる10進数と呼ばれているものになります。
0から9の10種類の数字で成り立っているため10進数と呼ばれます。

しかし、コンピュータでは10進数でデータを扱うことができません。

基本的にコンピュータは電気で動いています。
電気の流れから取得できる情報は「電圧がある値よりも大きいのか小さいのか」といった情報になります。
そのため、送られてくる電気から取得できる情報は1回あたり2種類になります。

これを「0~0.9Vを0、1~1.9Vを1、…」のように10種類にすれば10進数でできるように感じますが、電圧は安定しません。
そのため、多少の誤差を考慮できるように、ある値(閾値)よりも大きいのか小さいのかで表現されています。

2種類の情報しかないため、10進数では表現できず2進数で数字を表現することになります。
2進数は0と1の2種類の数字で成り立っています。
そのため、0から1まで数えたら桁が上がり10,11,100,101,110となっていきます。

2進数から10進数を求める方法は2のn乗で掛けて計算します。
例えば、2進数「1001」の場合は、「1×2^3 + 0×2^2 + 0×2^1 + 1×2^0」となり10進数「9」になります。

2進数では小数も扱うことができます。
例えば、2進数「10.1」の場合は、「1×2^1 + 0×2^0 + 1×2^-1」となり10進数「2.5」になります。

つまり2進数で表現できる数は必ず2のn乗の合計になります。
そのため、10進数「0.1」など2進数では正しく表現ができない数が存在します。

10進数「0.1」を2進数で表現すると「0.000110011001100…」という感じに循環小数になります。
これは10進数「10」を3で割り切れないのと似ています。

このように2進数では10進数よりも表現できる数の種類が少ないため、誤差が生じます。




ExcelVBAレベル確認

→Excelの数字

ここまでの内容を踏まえた上で「でも、Excelで0.1と計算できているのもあるじゃん」と思われた方もいるかと思います。

これは、ExcelがIEEE754の仕様に基づいて作成されているためです。
IEEE754というのは、IEEE(米国電気電子学会)という学会が決めたルールになります。
→コンピュータを全世界で連携するためにはルールを共通化する必要があります。

その仕様上、10進数で表現できる精度が15桁になるため、15桁より大きい数字は切り捨てられてしまいます。

そのため、上記の計算結果をさらに細かく書くと以下のようになります。
※Excelでは表現することができないため文字列で直接入力しています。

実際は0.1ではないのですが、15桁で切り捨てられた結果0.1になったというのが答えになります。




Excel本紹介

・小数点以下の計算をする上での注意点と対策

今までの内容を考慮すると、「小数点以下を含む計算の場合は、誤差が生じる可能性がある」ということを考慮する必要があります。
では、どのように対策すればいいのか3通りの方法を解説します。




→方法①

「ROUND関数を用いて指定した桁数で四捨五入する」という方法があります。

ROUND関数の使い方は以下のようになります。

=ROUND(数値,桁数)

桁数に小数点の位置を指定します。
桁数が「1」の場合は小数点第一位まで表現できるように四捨五入、
桁数が「2」の場合は小数点第二位まで表現できるように四捨五入、
桁数が「0」の場合は一の位まで表現できるように四捨五入、
桁数が「-1」の場合は十の位まで表現できるように四捨五入、
というように表現できます。

計算結果にROUND関数を使うことで以下のように正しく判定することができます。




→方法②

「元の値を10のn乗して整数にして計算する」という方法があります。

この方法を使った場合は以下のようになります。
この場合は、数字に対して単位などを書いておくとより分かりやすくなるかと思います。





→方法③

「表示桁数で計算」という方法があります。

この方法では、先ほどのIF文のように直接0.1と比較する場合には使うことができません。
ただ以下のように計算結果を表示させる場合には活用することができます。

これは、見た目上は0.1だけど実際は異なるものになります。
そのため、この値と0.1と比較すると以下のようになってしまいます。

これに対し、以下の設定を行います。

[ファイル]→[オプション]→[詳細設定]→[次のブックを計算するとき]→[表示桁数で計算する]

この時に「データの正確さが失われます。元に戻すことはできません。」と表示されます。
これは「実際に見た目で確認ができる数字を正として計算する」という設定です。
そのため、正確さが場合によっては失われるので、そのような警告になります。

上記の設定を行うと以下のように反映されます。

この設定はブック全体に反映されます。
そのため、最終手段として使用を考えてみるといいかと思います。
※私的には推奨しません。

というような感じで以上になります。
Excelの奥は深いですね…

2022/12/29
【ex21】作成したマクロにショートカットキーを設定

【ex21】作成したマクロにショートカットキーを設定

こちらでは、作成したマクロを効率よく呼び出すためのショートカットキーに割り当てる方法について解説しています。




・作成したマクロにショートカットキーを設定する①

まずは、一般的なCtrlキーとの組み合わせのショートカットキーの設定方法について解説していきます。

[開発]タブから[マクロ]を選択します。
※[表示]タブの中の[マクロ]でも大丈夫です。

以下の画面が表示されましたら、[オプション]を選択します。

ショートカットキーと書かれたCtrlの隣のテキストボックスに半角のアルファベットを入力します。
以下の例ですと、「a」と入力しています。

このように設定して[OK]で確定することで、「Ctrl + A」のショートカットキーが割り当てられました。
マクロに設定したショートカットキーは、既存のショートカットキーよりも優先順位が高くなります。
そのため、通常の「Ctrl + A」の全選択は無効になり、マクロ「test」が実行されるようになります。

ちなみに、設定時にShiftキーを押しながら半角のアルファベットを入力すると、以下のように「Ctrl + Shift」のショートカットキーが設定できます。

他、VBAでショートカットキーを設定する場合は以下のように記述します。

Application.MacroOptions Macro:="test", ShortcutKey:="a"

「test」がプロシージャ名で、「a」がショートカットキーになります。
上記の場合は、「Ctrl + A」に割り当てられます。

CtrlキーとShiftキーとの組み合わせを設定する場合は、大文字にします。
以下のように設定すると、「Ctrl + Shift + A」に割り当てられます。

Application.MacroOptions Macro:="test", ShortcutKey:="A"

設定したショートカットキーを解除する場合は、キーの部分を「””」にすることで解除できます。

Application.MacroOptions Macro:="test", ShortcutKey:=""

ショートカットキーの設定切替ボタンなどを作りたい場合は、VBAで直接設定する方法も覚えておくと便利です。




ExcelVBAレベル確認

・作成したマクロにショートカットキーを設定する②

先ほど解説した内容ですと、割り当てることができるショートカットキーは全て「Ctrl」との組み合わせになります。
しかし、Excelでは「Ctrl」以外にも割り当てることができます。

その方法は、OnKeyメソッドというものを活用します。
一旦、先ほどと同じCtrlとの組み合わせのショートカットキーを割り当ててみます。
以下のように設定します。

Application.OnKey "^a", "test"

「test」がプロシージャ名で、「^a」がショートカットキーになります。
こちらを実行することで「Ctrl + A」に割り当てることができます。
注意しなければいけない点として、こちらの設定の場合は、Excelを終了するとショートカットキーが無効になります。
Excelを開いた後に、再度、上記の内容を実行しなければいけません。

Excelを開いたと同時に、上記の内容を実行できるようにするためには、ブックモジュールのOpenイベントプロシージャ内に記述するといいです。

「ThisWorkbook(デフォルトの場合)」と書かれているブックモジュールを開き、オブジェクト一覧からWorkbookを選択します。

そうすると、以下のような「Workbook_Open()」という特殊なプロシージャが入力されるため、その中に先ほどのショートカットキーを割り当てる内容を記述します。
「Workbook_Open()」はExcelファイルが立ち上げられたと同時に実行される特殊なイベントプロシージャというものになります。

また、OnKeyメソッドの設定は、対象のファイルが閉じられた後に関しても動かすことができてしまいます。
前半のオプションでの設定の場合は、対象のExcelファイルが閉じられると同時に、ショートカットキーが無効になります。
しかし、OnKeyの場合は、対象のExcelファイルを閉じた後にショートカットキーを入力すると、対象のExcelファイルが自動で立ち上げられ、マクロが実行されてしまいます。

対象のExcelファイルが閉じられたときに無効にする場合は、BeforeCloseというイベントプロシージャが活用できます。
先ほど作成したOpenイベントプロシージャ内にカーソルを置いた状態で、プロシージャ一覧からBeforeCloseを選択します。

そうすると、以下のような「Workbook_BeforeClose(Cancel As Boolean)」という特殊なプロシージャが入力されるため、その中に以下のように記述します。

プロシージャ名を省略することによって、ショートカットキー「^a」の割り当てをキャンセルすることができます。

イベントプロシージャについてはこちらの記事で詳しく解説しています。


続いて、Ctrlキー以外の割り当て方法についても確認していきます。

先ほど設定していた「^」はCtrlキーを意味します。
組み合わせて指定する場合は、「^」の他にも以下のものがあります。

+:シフトキー(大文字を直接入力してもシフトキーとの組み合わせ扱いになります)
%:Altキー
*:コマンドキー(2011年ExcelMacのみで動作すると公式には記載されています)

例えば、「Ctrl + Shift + A」に割り当てる場合は、「+^a」や「^+a」、「^A」などと設定します。
他にも、「^6」で「Ctrl + 6」などとアルファベット以外にも設定することができます。

ただ、F1キーやHomeキーなど一部特殊な入力が必要なキーも存在します。
特殊なキーは以下になります。

BackSpace:{BACKSPACE} または {BS}
Break:{BREAK}
CapsLock:{CAPSLOCK}
Clear:{CLEAR}
Delete または Del:{DELETE} または {DEL}
↓:{DOWN}
終了:{END}
Enter (テンキー):{ENTER}
Enter:~ (ティルダ)
Esc:{ ESCAPE} または {ESC}
HELP:{HELP}
ホーム:{HOME}
Ins:{INSERT}
←:{LEFT}
NumLock:{NUMLOCK}
PageDown:{PGDN}
PageUp:{PGUP}
Return:{RETURN}
→:{RIGHT}
ScrollLock:{SCROLLLOCK}
Tab:{TAB}
↑:{UP}
F1 ~ F15:{F1} から {F15}

こちらは以下の公式サイトを参考にしています。
https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.onkey


こちらの内容を踏まえ、「Alt + F1」というショートカットキーを設定する場合は以下のようになります。

Application.OnKey "%{F1}", "test"

Enterキーのショートカットキーを活用したマクロはこちらの記事が参考になります。


という感じで、作成したマクロにショートカットキーを設定する方法については以上になります。

2022/12/16
【ex20】色んな日付の計算方法

【ex20】色んな日付の計算方法

色んな日付を求める方法について解説していきます。
給料日の算出や年齢の算出などに役立ちます。




・はじめに

はじめに、日付はどのようにExcelで管理されているのかを理解する必要があります。
日付をセルに入力すると、同時に表示形式が”日付”や”ユーザー定義”などに変わるかと思います。

ちなみに、”2022/1/1(土)”などと直接入力されているのを見たことがありますが、編集時に曜日まで編集が出来てしまうのであれば、日付として認識されていません。
これでは日付の計算ができないため、修正する必要があります。
もしセル内に曜日も表示したい場合は、そのような表示形式で”yyyy/m/d(aaa)”などを設定する必要があります。
表示形式の設定方法についてはこちらを参考にご確認お願いします。

日付で管理されている場合は、表示形式を”標準”などにすることで、日付の実体であるシリアル値を表示させることができます。

シリアル値は「ある日を基準にした通し番号」になります。
Excelでは、基本1900年1月1日を「1」として数えられています。

ちなみに時間は、24分の1で計算します。
つまり、”44562″が2022年1月1日の場合、”44562.25″は2022年1月1日の6:00を表していることになります。





・N日後やN日前を求める方法

日付がシリアル値で管理されていると解説しました。
日付の実体が数字であることから、通常の計算式が使えることが分かります。

そのため、1日後や1日前を求める場合は、足し算と引き算で求めることができます。

ちなみに、今日の日付を基準に計算したい時は、今日の日付のシリアル値を返すTODAY関数が使えます。
※「返す」という表現は関数を実行した結果を受け取ることを言います。

明日の日付を求めたい時は、「=TODAY()+1」で求めることができます。




・日付の差を求める方法(期限や年齢など)

単純な日付の差を求める場合は、引き算で求めることができます。
この時、正しく表示されない場合は、表示形式が影響している可能性があります。
以下の例では、黄色のセルの表示形式は”標準”にしています。

上記の方法は、日にちの場合には便利ですが、月や年で求める際には計算が複雑になってしまいます。

そんな時に使えるのがDATEDIF関数になります。
※DATEDIF関数は入力候補に表示されない特殊な関数になります。直接入力することで使えます。

使い方は、「=DATEDIF(開始日,終了日,単位)」になります。
便利な単位のみ紹介しますと以下になります。

※DATEDIF関数は特殊な関数で、いくつか注意する点があります。
 詳しくはこちらの公式サイトをご確認ください。

年齢を求める場合に関しては以下のように求めることができます。

他に、DATEDIF関数を使わずに年を求める方法も紹介します。

日付の年月日は、YEAR関数MONTH関数DAY関数で抽出することができます。
つまり、YEAR関数で年のみを抽出して引き算するという方法です。
ただ、単純な引き算ですと日にちなどが考慮されていないので注意する必要があります。





・特定の日付を求める方法(翌月5日など)

年月日をそれぞれ設定してシリアル値に変換するDATE関数を使います。
使い方は、「=DATE(年,月,日)」です。

基準日の翌月の5日を求める場合は以下のようになります。
※年月を別々で設定し、月に関してのみ+1して計算しています。

ちなみに、このDATE関数の月に「13」や「-1」など通常では存在しない値を設定したとしても、正しく計算されます。
日に関しても同様で大きすぎた分や小さすぎた分は年月に反映されます。
→つまり翌年は月に+12しても求めることができます。




・月末を求める方法

月末を求めるにはEOMONTH関数を使います。
使い方は、「=EOMONTH(開始日,月)」です。

ちなみに、先ほど解説したDATE関数でも求めることができます。
※日の「0」は1日より1日前として計算されます。




Excel本紹介

・N日後やN日前の営業日を求める方法

営業日(週末や休日を除いた日付)を求めるには、WORKDAY関数WORKDAY.INTL関数を使います。
WORKDAY関数の使い方は「=WORKDAY(開始日,日数,[祭日])」です。
こちらの関数は週末が土日で計算されます。祭日(休日)を設定しない場合は省略することができます。
WORKDAY.INTL関数の使い方は「=WORKDAY.INTL(開始日,日数,[週末],[祭日])」です。
こちらの関数はWORKDAY関数に加え、週末を自由に設定することができます。
週末の設定値は以下になります。
※省略時は土日として設定されます。

WORKDAY.INTL関数の方がWORKDAY関数に比べ汎用性があるため、こちらでは、WORKDAY.INTL関数で解説していきます。

例えば土・日を週末とし、土・日・休日を除いた3日後を求める場合、以下のようになります。
休日に関しては、引数の[祭日]に”L5:L9″と休日一覧の範囲を指定します。

次に、同じ条件で3日前を求めていきます。
引数の[日数]を負の値にすることで簡単に求めることができます。

次に週末を金・土・日にした場合の3日前を求めていきます。
週末の候補に金・土・日がないため、”0000111″と記述して求めていきます。




Excel本紹介

・特定の日付の直近の営業日を求める方法(翌月5日以降の直近の営業日など)

給料日などを求める際に、このような計算が必要になってくるかと思います。
指定日の直近の営業日を求めるにはDATE関数WORKDAY(WORKDAY.INTL)関数を組み合わせることで実現できます。

まず、土・日・休日に含まれる翌月の7日(2023/1/7)を求めます。

この求めた日付を元に、直近の営業日を求めます。
営業日を求める際に、WORKDAY(WORKDAY.INTL)関数を使います。
ただ、WORKDAY(WORKDAY.INTL)関数では0日後や0日前を指定することができません。
そのため、次の営業日を求める場合は、1日前から1日後を求めます。

先ほどのDATE関数の引数の[日]を”6″にして、DATE関数をそのままWORKDAY(WORKDAY.INTL)関数の引数の[開始日]に設定します。
そうすると、以下のように求めることができます。

では、前の営業を求める場合についても確認していきます。
先ほどの逆で求めることができるので、1日後から1日前というようにしていきます。

基準日が今日で来月の給料日(例えば、25日、土・日・休日の場合は、次の営業日)を求める場合は、以下のようになります。

以上が、色んな日付の計算方法になります。