2026/01/06
【Excel】覚えるべき「日付を求める関数」2選

【Excel】覚えるべき「日付を求める関数」2選

指定した日付、もしくは年月から「月末・翌月末・1日の日付」を求める際に役立つ便利な関数を2つ紹介していきます。


DATE関数

1つ目は「DATE関数」、この関数は指定した年月日から日付形式に変換することができる関数です。

=DATE(年,月,日)

また、月と日の「桁上がり・桁下がり」にも対応しているため、以下のように「月末・翌月末・1日の日付」を求めることができます。

【月末】

=DATE(C2,C3+1,0)
// 翌月の0日 → 当月末

【翌月末】

=DATE(C2,C3+2,0)
// 翌々月の0日 → 翌月末

【1日】

=DATE(C2,C3,1)
// 指定した年月の1日

EOMONTH関数

2つ目は「EOMONTH関数」、この関数は指定した日付から指定した月後の月末を取得できる関数です。

=EOMONTH(日付,月)

以下のように「月末・翌月末・1日の日付」を求めることができます。

【月末】

=EOMONTH(B3,0)
// 指定日の0か月後の月末

【翌月末】

=EOMONTH(B3,1)
// 指定日の1か月後の月末

【1日】

=EOMONTH(B3,-1)+1
// 指定日の1か月前の月末の翌日 → 当月1日

まとめ

DATE関数は「年月が分かれている場合」に、EOMONTH関数は「日付がすでにある場合」に使いやすい関数です。

特にDATE関数は、月と日の「桁上がり・桁下がり」にも対応しているため、カレンダーを作成する際に役立ちます。

2026/01/02
【ExcelVBA】書類の確認と同時にロックする仕組み

【ExcelVBA】書類の確認と同時にロックする仕組み

以下の営業報告書には、「確認日」という項目とチェックボックスが用意されています。

このチェックボックスをチェックすることで、チェックボックスが「実行時の日付」に置き換わり、シートがロック(保護)され、そのシートの編集ができなくなります。

※こちらで作成したファイルは、記事の最後にて配布しています。

このように、書類の確認と同時にロック(保護)する仕組みの実現方法について紹介していきます。


1. 開発準備

今回は、予め用意したシート内の特定のチェックボックスをチェックすると同時に、そのシートをロック(保護)する仕組みを実現していきます。

チェックボックスは、[挿入]タブの[チェックボックス]を使用しており、チェックボックスが配置されたセルには、「FALSE」という値が入力されています。

チェックボックスをチェックすると、セルの値は「TRUE」に変わります。

このように指定したシートのセルの値が変わると同時に、シートをロック(保護)するなどと何かしらの処理を実行するには、「シートモジュール」「イベントプロシージャ」を活用します。
シートモジュールは、対象シートのタブ上で右クリックし、[コードの表示]を選択することで表示できます。

選択すると、以下のエディタ画面(VBE)が表示されます。
また、対象シートのシートモジュールが表示された状態になります。
「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

次に、対象シートのセルを編集すると同時に処理が実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、シートモジュールの左上のリストから「Worksheet」を選択します。

「Worksheet」を選択すると、自動で「Worksheet_SelectionChange」というプロシージャが表示されます。
このプロシージャは、対象シートのいずれかのセルが選択されると同時に処理が実行されるイベントプロシージャになります。

ただ、今回使用するイベントプロシージャは、セルを編集すると同時に処理が実行されるものになります。
そのため、右上のリストから「Change」を選択します。

表示された「Worksheet_Change」というプロシージャを活用します。
「Worksheet_SelectionChange」というプロシージャに関しては削除して問題ないです。


2. コードの記述

以下のコードを記述します。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    With Range("E5")
        If .Value = True Then
           .Value = Date
           Me.Protect
        End If
    End With
    
End Sub

では、コードについて解説していきます。

    With Range("E5")
        '省略
    End With

「With」と「End With」で囲むことで、この中では「With」に指定した「Range(“E5”)」を省略して記述することができます。
省略する際は「.」から記述します。

        If .Value = True Then
           .Value = Date
           Me.Protect
        End If

次に、「If」でセルE5(「With」で指定したセル)が「True(チェックボックスがチェックされた状態)」かどうかを確認し、「True」の場合は、そのセルの値を実行時の日付(Date)にし、シートを保護(Me.Protect)しています。


3. 完成

以上の内容で実現できます。
対象シートのセルE5に配置されたチェックボックスをチェックすると同時に、チェックボックスは実行時の日付に置き換わり、シートがロック(保護)されます。

運用時は、作成したシートをテンプレートとし、シートを複製して活用するとよいです。
シートを複製すると、複製元シートのシートモジュールの内容も、複製したシートに反映されます。

▼サンプルファイル▼

2025/12/30
【Excel】TRIM参照を使って表を縦に結合

【Excel】TRIM参照を使って表を縦に結合

以下のオレンジ色の見出しの表は、青色の見出しの2つの表を縦に繋げたものです。

実はこれ、最新の参照方法「TRIM参照」を活用して、1つの数式、1つの関数のみで実現しています。
このように、TRIM参照を使った表を縦に繋げる方法について紹介していきます。


1. 表を縦に繋げる

指定した範囲の表を縦に繋げるには、「VSTACK関数」が便利です。
しかし、以下のように表の範囲全体を指定してしまうと、空のセルまで抽出されてしまいます。

=VSTACK(B4:C16,E4:F16)

最新の参照方法「TRIM参照」を使わずに空のデータを除外するには、FILTER関数などを組み合わせる必要があります。

=VSTACK(FILTER(B4:C16,B4:B16<>""),FILTER(E4:F16,E4:E16<>""))

ただ、数式が複雑かつ長くなってしまいます。


2. TRIM参照の活用

では、「TRIM参照」を活用します。
TRIM参照とは、“指定した範囲の末尾の空白セルを除外する” という新しい参照方法です。
TRIM参照についての詳しい解説は、以下の記事を参考してください。

>TRIM参照とは

TRIM参照を活用した数式は以下になります。

=VSTACK(B4:.C16,E4:.F16)

最初の数式との違いは、「:」の後に「.」があるかないかです。
「:」の後に「.」を加えることで、指定した表の末尾の空白セルを除外し、以下のように抽出することができます。


まとめ

TRIM参照は、空白セルを除外する数式(FILTER関数やIF関数などを活用した数式)を使わずに、簡単に除外できる便利な参照方法です。
使う場面は少ないかもですが、「知っておいて損はない」新しい参照方法になります。

2025/12/27
【番外-058】別アプリで立ち上げる

【番外-058】別アプリで立ち上げる

#アプリ #条件付き書式 #データの入力規則 #マクロ

YouTubeで開く

別アプリとしてExcelを複数立ち上げる方法について解説しています。
別アプリとして立ち上げることで、「マクロ実行中に別ファイルの操作」や「条件付き書式などの設定画面を表示中に別ファイルの操作」、「同じ名前のファイルを同時に開く」などが可能になります。

00:00 挨拶
00:54 なぜできないのか?
02:19 別のアプリで立ち上げる
04:32 注意点

2025/12/26
【Excel】特定の条件を満たしたときにメッセージを表示

【Excel】特定の条件を満たしたときにメッセージを表示

特定の条件を満たしたときにメッセージを表示する例として、こちらでは以下のように、金曜日の勤怠を登録するときに「終業時刻」を入力したときのみ、メッセージを表示する方法について紹介します。

※こちらで作成したファイルは、記事の最後にて配布しています。


メッセージの表示方法

メッセージを表示するには「データの入力規則」を活用します。
データの入力規則というと、セルへの入力制限を設ける機能というイメージがありますが、実は単純にメッセージを表示したいときにも活用できます。

今回の場合、以下の表の「終業時刻」の項目がメッセージを表示する可能性のある対象になります。

そのため、「終業時刻」の範囲を選択して、[データ]タブから[データの入力規則]を選択します。

表示される以下の設定画面にて、まずは入力制限を行うのではなく、メッセージを表示する設定をします。

特定の条件を満たしたときに、メッセージを表示するには、[エラー メッセージ]タブにて、[スタイル]を[情報]にします。
そして、表示したいメッセージを[タイトル]と[エラー メッセージ]のテキストボックスに入力します。

これだけで、メッセージの設定は完了です。
後は、[設定]タブにて、メッセージを表示する条件を設定するだけです。


条件の設定

今回、メッセージを表示する条件は「金曜日の勤怠を登録したとき」になります。
具体的には、「入力したセルと同じ行のA列の日付が金曜日のとき」です。
それを、以下の[設定]タブにて設定していきます。

今回のような、他のセルの値を参照した条件を指定するには、[入力値の種類]を[ユーザー設定]にし、[数式]に条件を指定します。

[数式]に指定する条件は、選択基準のセルに対しての条件になります。
上記の場合は、セルC2が選択基準なので、「A2に入力されている日付が金曜日の場合」という条件になります。

ただ注意しないといけないのは、[数式]に設定した条件は、正しくは「メッセージを表示しないとき」の条件になります。
そのため、設定する条件は、「A2に入力されている日付が金曜日の場合」ではなく「A2に入力されている日付が金曜日でない場合」になります。
この条件を数式で表現すると、以下のようになります。

=WEEKDAY(A2)<>6
// WEEKDAY(A2):指定した日付の曜日を1(日)~7(土)の数値で返す
// <>6:上記の結果が6でないとき=金曜日でないとき

この条件式を[数式]に入力します。

他の選択範囲には、相対参照で反映されます。
セルC3には「A3に入力されている日付が金曜日でない場合」といった感じです。

これで確定することで完成です。


完成

A列の「日付」の項目に入力した日付が「金曜日以外」の場合は、C列の「終業時刻」の項目に値を入力しても、メッセージは表示されません。

A列の「日付」の項目に入力した日付が「金曜日」の場合は、C列の「終業時刻」の項目に値を入力して確定すると同時に、以下のようにメッセージが表示されます。

メッセージの[OK]を選択すると、メッセージが消えて入力が確定します。

▼サンプルファイル▼

2025/12/23
【Excel】今日の日付の「列」を自動色付け

【Excel】今日の日付の「列」を自動色付け

以下のような、横向きに日付が並んでいる表で、ファイルを開いたときの「当日の日付」の列を自動で色付けする方法について紹介します。


事前準備

今回は、以下のように、3行目に日付が入力されている表で実現していきます。
※表示形式で「日」のみを表示しています。

F列以降は、前の列の日付を基準に「1」を加えた日付を数式で求めて表示しています。


条件付き書式1

では、ファイルを開いた当日の日付の列を自動で色付けする仕組みを実現していきます。
特定の条件を満たしたセルの書式を自動で変更する場合、「条件付き書式」を活用します。

まずは、色付け対象の範囲を選択し、[ホーム]タブの[条件付き書式]から[新しいルール]を選択します。

表示される設定画面にて、以下の設定をします。

ルールの種類:数式を使用して、書式設定するセルを決定
数式(条件式):=E$3=TODAY()
※E3は選択基準のセルのアドレスで、常に3行目を確認する必要があるため、3の手間に「$」を加えて固定する

次に、[書式]を選択し、表示される設定画面の[罫線]タブにて、左右の罫線を赤色にします。

以上の設定で確定することで、対象の日付の列の罫線が色付けされます。


条件付き書式2

先ほどの設定で完成ではありますが、若干、色付けされた罫線が分かりづらいので、日付のセル(2行目から4行目)を色付けしてみます。

選択範囲を2行目から4行目のみにし、先ほどと同じ設定をします。
最後の[書式]のみ、[塗りつぶし]タブから薄い緑を選択します。

以上の設定で確定することで、対象の日付のセル(2行目から4行目)も色付けされます。

2025/12/20
【業務】予定と実績を自動色付け!万年ガントチャート

【業務】予定と実績を自動色付け!万年ガントチャート

#DATE #DAY #TEXT #AND #IF #条件付き書式 #ガントチャート #スケジュール #カレンダー #予定

YouTubeで開く

※解説に一部誤りがありました。修正点を記事の最後に追記しています。

予定の開始日と完了日、実績の開始日と完了日を指定するだけで、自動で色付けされるガントチャートの作り方になります。
予定と実績が重複しているセルには、少し濃い色が設定されるようになっています。

00:00 挨拶
00:08 完成イメージ
00:58 準備
01:33 作成(曜日の表示)
03:17 作成(一部の曜日と日付の非表示)
07:11 作成(実績日の色付け)
11:56 作成(予定日の色付け)
14:14 作成(重複の色変更)
16:52 完成


※以下の2点の修正が必要です。
(配布している完成ファイルは修正済みです) 

①条件付き書式の設定で31日の範囲の色付けができていない
→ 「AK5:AK19」の範囲を「AL5:AL19」にもコピーする

②29日以降が非表示の時に、条件によっては色付けされてしまうことがある
→ 29日以降を非表示にする条件付き書式の優先順位を一番高くする


▼準備ファイル▼

2025/12/19
【ExcelVBA】ボタン1つで完了タスクを別シートに移動

【ExcelVBA】ボタン1つで完了タスクを別シートに移動

以下は、タスク管理表です。

完了したタスクを選択して、「完了」ボタンを押すだけで、そのタスクが「完了」シートに移動します。

※こちらで作成したファイルは、記事の最後にて配布しています。

このような、ボタン1つで完了タスクを別シートに移動する仕組みの実現方法について紹介します。


1. 開発準備

まずは、「未完了」シートと「完了」シートを用意し、「完了」シートには空の表を用意します。

次に、[開発]タブから[マクロ]を選択し、表示された設定画面にて、開発する機能の名前を入力して、[作成]を選択します。
こちらでは、「MoveTask」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。
「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。


2. コードの記述

以下のコードを記述します。

Sub MoveTask()
    
    Dim w1 As Worksheet
    Dim w2 As Worksheet
    Set w1 = Worksheets("未完了")
    Set w2 = Worksheets("完了")
    
    Dim r1 As Long
    Dim r2 As Long
    r1 = ActiveCell.Row
    r2 = w2.Cells(w2.Rows.Count, "A").End(xlUp).Row + 1
    
    w2.Range(w2.Cells(r2, "A"), w2.Cells(r2, "C")).Value = _
        w1.Range(w1.Cells(r1, "A"), w1.Cells(r1, "C")).Value
    w1.Rows(r1).Delete
    
End Sub

では、コードについて解説していきます。

    Dim w1 As Worksheet
    Dim w2 As Worksheet
    Set w1 = Worksheets("未完了")
    Set w2 = Worksheets("完了")

シート情報を割り当てる用の変数(w1とw2)を用意し、それぞれに「未完了」シートと
「完了」シートを割り当てています。

    Dim r1 As Long
    Dim r2 As Long
    r1 = ActiveCell.Row
    r2 = w2.Cells(w2.Rows.Count, "A").End(xlUp).Row + 1

数値を格納する用の変数(r1とr2)を用意し、「r1」にアクティブセル(現在選択している基準のセル)の行番号、「r2」に「完了」シートの表の末尾の行番号を格納しています。

「r2」について詳しく解説すると、「完了」シートのA列の末尾を選択し、Ctrlキーを押しながらカーソルキーの「↑」を押して止まった位置のセルの行番号に1を加えた数値を格納しています。

    w2.Range(w2.Cells(r2, "A"), w2.Cells(r2, "C")).Value = _
        w1.Range(w1.Cells(r1, "A"), w1.Cells(r1, "C")).Value
    w1.Rows(r1).Delete

「完了」シートの表の末尾のA列からC列に、「未完了」シートのアクティブセルの行のA列からC列の値を格納し、「未完了」シートのアクティブセルの行を削除しています。


3. ボタンの作成

コードが完成したら、実行用のボタンを用意します。

ボタンは、[開発]タブの中の[挿入]から作成することができます。
ボタンには開発した機能「MoveTask」を割り当てます。


4. 完成

以上の手順で完成です。
完了したタスク(同じ行のいずれかのセル)を選択し、「完了」ボタンを押すことで、その行のタスクが「完了」シートに移動します。

注意点として、今回のコードには、移動対象のタスクの行の範囲を指定していません。
そのため、1行目を選択して「完了」ボタンを押してしまうと、見出しが移動してしまいます。

そのため、必要に応じて、コード内で「行番号が2以上のとき」などといった条件分岐を行うとよいです。

▼サンプルファイル▼

2025/12/16
【Excel】Python in Excelでクロス表を1行1データに変換

【Excel】Python in Excelでクロス表を1行1データに変換

「Python in Excel」という機能を使って、以下のように、クロス表(マトリックス表)を1行1データの表形式にリアルタイムで変換する方法について紹介します。


1. テーブルに変換

まずは、変換元の表(クロス表)をテーブルにします。
※テーブルにしなくても変換できますが、データの増減にも対応させる場合は、テーブルにした方がよいです。

※こちらでは、テーブル名を「売上表」にしています。


2. 数式の入力

次に、変換した表を表示する先頭のセルを選択し、「=py」と入力してTabキーを押します。

これで、セルにPythonのコードが入力できるようになります。

次に、以下のコードを入力します。

df=xl("売上表[#すべて]", headers=True)
df.melt(id_vars="商品名",var_name="月",value_name="数量")

以上のコードでは、テーブル(売上表)の内容をデータフレームに格納し、そのデータフレームの「melt」という機能を活用して、変換したい1行1データの表形式の情報を指定しています。

変換結果はデータフレームとして返ってくるため、「Ctrlキーを押しながらEnterキー」で確定すると、以下のように「DataFrame」と表示されます。

最後に、データフレームの内容をセルに展開するために、「数式バーの隣のアイコンを[Excelの値]に変更」もしくは「Ctrlキー+Shiftキー+Altキー+Mキー」を押します。

以上の手順で、以下のように1行1データの表形式で表示されます。

2025/12/12
【Excel】文章から特定の値を表形式で抽出

【Excel】文章から特定の値を表形式で抽出

以下のように、メールなどで送られてきた文章(B2:D16)から特定の値を表形式で抽出(F3:G7)する方法について紹介していきます。


簡易的な文章から表形式で抽出

元々の文章が以下の内容の場合、抽出対象(商品名:数量)以外にも不要な文章が含まれています。(赤文字)

〇〇様

お世話になっております。
今月の弊社商品在庫状況を以下の通りご報告いたします。


サウンドビー:5
タイムウォッチ:8
タブレットプロ:15
ビートスタジオ:6
ペンマスター:18

ご確認のほど、よろしくお願いいたします。
何かご不明点や追加のご要望がございましたら、お気軽にお知らせください。

そのため、まずは抽出対象の文章のみをシートに貼り付けて、そこから表形式になるように数式で抽出していきます。

文章を表形式で抽出する場合、抽出するルールを決める必要があります。
今回の場合は、以下のようなルールになります。

・「:」で列を区切る
・「(改行)」で行を区切る

このルール通りに抽出するためには、TEXTSPLIT関数を活用します。
実際に活用した数式は、以下になります。

=TEXTSPLIT(B2,":",CHAR(10))
// B2:抽出元の文章が入力されたセル
// ":":列の区切り文字
// CHAR(10):行の区切り文字(改行はCHAR関数を用いて表現)

上記の数式を抽出先の表の先頭セル(E3)に入力することで、以下のように表形式で抽出することができます。

とはいえ、メールなどの文書から特定の文章を毎回抽出するのは面倒です。
そのため、文章を全て貼り付けるだけで、対象の値を表形式で抽出する方法についても紹介していきます。


本文全体から対象のみを表形式で抽出

本文全体が以下のようにパターン化している場合(赤文字)は、簡単な数式を加えるだけで、対象の範囲の抽出までを自動で行うことができます。

〇〇様

お世話になっております。
今月の弊社商品在庫状況を以下の通りご報告いたします。


サウンドビー:5
タイムウォッチ:8
タブレットプロ:15
ビートスタジオ:6
ペンマスター:18

ご確認のほど、よろしくお願いいたします。
何かご不明点や追加のご要望がございましたら、お気軽にお知らせください。

まずは、この本文のままシートに貼り付けて、先ほどの数式で抽出してみます。

=TEXTSPLIT(B2,":",CHAR(10))

そうすると、以下の赤枠の箇所が不要になります。

抽出された表の上から5行、下から3行が不要になるので、この不要な行を数式で除外します。

表から不要な行を除外する場合、DROP関数を活用すると良いです。
実際に活用した数式は、以下になります。

=DROP(DROP(TEXTSPLIT(B2,":",CHAR(10)),5),-3)
// DROP(…,-3):「…」の末尾から3行を除外
// DROP(…,5):「…」の先頭から5行を除外

上記の数式を抽出先の表の先頭セル(E3)に入力することで、以下のように不要な行を除外した表形式で抽出することができます。

2025/12/09
【Excel】オンライン会議で使える拡大機能

【Excel】オンライン会議で使える拡大機能

オンライン会議などでExcel画面を共有しているときに、「文字が小さくて見えません」と言われたことはありませんか?
だからと言って、拡大しながら画面を操作するのは大変ですよね。

今回は、見せたい範囲を瞬時に拡大(ズーム)することができる機能を紹介します。


選択範囲に合わせて拡大/縮小

見せたい範囲を瞬時に拡大するときに便利な機能、それは「選択範囲に合わせて拡大/縮小」です。

まずは、見せたい範囲を以下のように選択します。

特定の項目のみを見せたいときは、その列全体を選択すると良いです。

次に、[表示]タブから[選択範囲に合わせて拡大/縮小]を選択します。

そうすることで、以下のように選択がすべて収まる最大のサイズに調整されます。

他の範囲に移る際は、隣の[100%]を選択して、表示倍率を100%に戻すとよいです。

2025/12/07
【業務】収支グラフ付き!シンプルな家計簿アプリ

【業務】収支グラフ付き!シンプルな家計簿アプリ

#家計簿 #グラフ #アプリ

YouTubeで開く

収支グラフ付きの簡易的な「家計簿アプリ」の作成方法について解説しています。
誰でも簡単に、ノーコードで作成できる内容です。

※動画内の警告については、以下の動画の「5:56」あたりで解説しています。
>【業務】繰り返しタスクにも対応!タスク管理アプリ

00:00 はじめに
00:33 完成イメージ
01:13 表の作成
02:25 カテゴリーメニュー作成
05:00 収入・支出メニュー作成
10:20 収支グラフメニュー作成
11:47 外観設定変更
12:02 残高メニュー作成(IT予備メンバー限定)
12:11 まとめ


IT予備メンバーに加入して連携すると、メンバー限定動画に切り替わります。

※サイト内の限定動画です。

収支グラフ付きの簡易的な「家計簿アプリ」の作成方法について解説しています。
誰でも簡単に、ノーコードで作成できる内容です。

※動画内の警告については、以下の動画の「5:29」あたりで解説しています。
>【業務】繰り返しタスクにも対応!タスク管理アプリ

00:00 はじめに
00:33 完成イメージ
01:13 表の作成
02:25 カテゴリーメニュー作成
05:00 収入・支出メニュー作成
10:20 収支グラフメニュー作成
11:47 外観設定変更
12:02 残高メニュー作成(IT予備メンバー限定)
14:49 まとめ