エクセル練習問題
指定日付の有効最新マスタ一覧(履歴マスタ)解答

エクセルの関数・操作のちょっと難しい問題、Excelチャレンジ問題集
公開日:2013年5月以前 最終更新日:2025-08-31

指定日付の有効最新マスタ一覧(履歴マスタ)解答

エクセル練習問題解答ページです。

エクセル練習問題

「社員マスタ」のある時点(2024/12/31)での有効な最新のマスタを一覧取得(社員ID順)する数式を作成してください。
※テーブル/セル範囲どちらでも良い

テーブル名:M社員
指定日付の有効最新マスタ一覧(履歴マスタ)
社員ID 社員名 住所 開始日
S01 山田 太郎 東京都千代田区 2023/04/01
S02 佐藤 健一 神奈川県川崎市 2023/10/05
S01 山田 太郎 東京都港区 2023/11/01
S03 田中 花子 大阪府大阪市 2024/01/15
S02 佐藤 健一 東京都渋谷区 2024/03/20
S04 鈴木 次郎 東京都港区 2024/03/30
S05 伊藤 咲良 愛知県名古屋市 2024/10/20
S02 佐藤 健一 福岡県北九州市 2024/11/15
S01 山田 太郎 東京都渋谷区 2025/07/21

上記の社員マスタから以下のデータを抽出ます。
規準日(2024/12/31)現在のマスタを取得します。
つまり、基準日時点で有効(開始日以降で、次の開始日が無い)な行だけを抽出します。
上記のデータなら、以下のようになります。
指定日付の有効最新マスタ一覧(履歴マスタ)


シンキングタイム

シンキングタイム開始


シンキングタイム終了

当サイトのコンテンツ
自分に合った、学習方法を見つけましょう。

エクセル入門
エクセル作業において必須となるショートカットキーから基本の操作、機能、そして覚えておくべき関数とその使い方までを、入門・初級・初心者向けに解説しています。エクセルには多くの関数がありますが、どの業種でも必要とされる関数に絞って紹介しています。
エクセル基本操作
エクセルの基本操作について解説。知ってそうで知らない操作や高度な操作まで。日付、時刻に関するあれこれ 数値の書式のあれこれ1.千単位、百万単位2.不要な0を表示せずに、小数点位置を揃える3.ユーザー定義書式で条件付き書式を使う4.Excel2003で、条件によりフォント色を5段階で表示する方法。
エクセル関数応用
エクセルの関数の応用技の解説。関数サンプルと必須の基本技術から応用・高等テクニックまでを紹介しています。1年後の日付、○か月後の日付 複数条件の合計・件数・サンプルデータ・複数条件の合計・複数条件の件数・スピルと新関数 入力規則のリストを、追加・削除に自動対応で作成一覧リストを使用して、「入力規則」の「リスト」を作…

ここで、じっくり勉強して下さい。

エクセル練習問題解答

では解答です。

数式のパターンは数限りなくあります。
おそらく多くの人が思いつくと思われるのは、
FILTER関数
GROUPBY関数
このあたりをを使った数式ではないでしょうか。

FILTEER関数

=VSTACK(M社員[#見出し],
LET(開始日,M社員[開始日],ID,M社員[社員ID],
SORT(FILTER(M社員,開始日=MAXIFS(開始日,ID,ID,開始日,"<="&DATE(2024,12,31))))))
)))


GROUPBY関数

=LET(
tbl,VSTACK(TAKE(M社員[#すべて],1),SORT(DROP(M社員[#すべて],1),4,-1)),
GROUPBY(INDEX(tbl,,1),DROP(tbl,,1),LAMBDA(x,INDEX(x,1,1)),3,0,,INDEX(tbl,,4)<=DATE(2024,12,31))
)
LAMBDA(x,INDEX(x,1,1))
この部分は、隠し関数の
SINGLE関数
で書くことができます。

=LET(
tbl,VSTACK(TAKE(M社員[#すべて],1),SORT(DROP(M社員[#すべて],1),4,-1)),
GROUPBY(INDEX(tbl,,1),DROP(tbl,,1),SINGLE,3,0,,INDEX(tbl,,4)<=DATE(2024,12,31))
)


PowerQuery M言語

let
    ソース = Excel.CurrentWorkbook(){[Name="M社員"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"社員ID", type text}, {"社員名", type text}, {"住所", type text}, {"開始日", type date}}),
    フィルターされた行 = Table.SelectRows(変更された型, each [開始日] <= #date(2024, 12, 31)),
    グループ化された行 = Table.Group(フィルターされた行, {"社員ID"}, {{"最新のデータ", each Table.Max(_,"開始日"), type record}}),
    展開された最新のデータ = Table.ExpandRecordColumn(グループ化された行, "最新のデータ", {"社員名", "住所", "開始日"}, {"社員名", "住所", "開始日"}),
    並び替えられた列 = Table.ReorderColumns(展開された最新のデータ,{"社員ID", "社員名", "住所", "開始日"})
in
    並び替えられた列
これは、生成AIのGeminiに書いてもらったものです。


参考としてのSQL

SELECT
    m.社員ID,
    m.社員名,
    m.住所,
    m.開始日
FROM
    M社員 AS m
JOIN
    (SELECT
        社員ID,
        MAX(開始日) AS 最新開始日
    FROM
        M社員
    WHERE
        開始日 <= '2024-12-31'
    GROUP BY
        社員ID) AS latest
ON
    m.社員ID = latest.社員ID 
    AND m.開始日 = latest.最新開始日
ORDER BY
    m.社員ID;

SELECT
    社員ID,
    社員名,
    住所,
    開始日
FROM
    (SELECT
        社員ID,
        社員名,
        住所,
        開始日,
        ROW_NUMBER() OVER (PARTITION BY 社員ID ORDER BY 開始日 DESC) as rn
    FROM
        M社員
    WHERE
        開始日 <= '2024-12-31') AS ranked
WHERE
    rn = 1
ORDER BY
    社員ID;
これらのSQLは生成AIのClaudeに書いてもらったものです。
RDBSを限定せずに、一般的な書き方として書いてもらったものです。


番外編

この問題の場合、そもそも開始日だけなのが数式を複雑にしている原因になります。
終了日を持たせれば、FILTER関数なら割と簡単に取得できます。
しかし、この場合、終了日を手入力するのでは返って間違いのもとになってしまいます。
この場合は、終了日を数式を取得するようにしておきます。
=LET(
終了日,MINIFS([開始日],[社員ID],[@社員ID],[開始日],">"&[@開始日]),
IF(終了日=0,DATE(2099,12,31),終了日-1))
指定日付の有効最新マスタ一覧(履歴マスタ)

このように終了日が入っていれば、指定日時点で有効なマスタは取得しやすくなります。
=VSTACK(M社員[#見出し],
SORT(
FILTER(M社員,
(M社員[開始日]<=DATE(2024,12,31))*(M社員[終了日]>DATE(2024,12,31))
)))
指定日付の有効最新マスタ一覧(履歴マスタ)


参考ページ

LET関数(数式で変数を使う)
LET関数は、関数内で計算結果やセル範囲に名前を定義できます。これにより、数式の中間計算に名前を定義したり、後ろの引数で定義した名前を式に使う事が出来ます。これはプログラミングにおける変数と同じ機能になります。
FILTER関数(範囲をフィルター処理)
FILTER関数は、定義した条件に基づいてデータ範囲をフィルター処理した結果を返します。FILTER関数はスピルで登場した新しい関数です。最後の方では、表示する列を選択する方法も掲載しています。FILTER関数の書式 =FILTER(配列,含む,[空の場合]) 配列 必須です。
SORT関数、SORTBY関数(範囲を並べ替え)
SORT関数は、範囲または配列の内容を並べ替えます。SORTBY関数は、範囲または配列を対応する範囲または配列の値に基づいて並べ替えます。SORT関数とSORTBY関数は範囲を並べ替える関数ですが、同じこともできますが、れぞれの関数でなければできないこともあります。
GROUPBY関数(縦軸でグループ化して集計)
GROUPBY関数は、行(縦)でグループ化し指定された関数によって値を集計します。行(縦)の軸に沿ったグループ化と、関連する値の集計がサポートされます。複数の行グループレベルに対応しています。総計・小計、並べ替え、フィルター処理もサポートされています。
イータ縮小ラムダ(eta reduced lambda)
LAMBDAヘルパー関数のLAMBDA関数の記述部分を縮小記述するものです。明示的にLAMBDA関数を記述する場合に比べてイータ縮小ラムダは記述が短く扱いやすくなっています。もちろん明示的にLAMBDA関数を記述しても構いませんが、イータ縮小ラムダの記述が可能な場合は極力使うようにすることで数式も短く見やすくなりま…

Power Query(M言語)入門
PowerQuery(パワークエリ)は、データの抽出、読み込み、変換のためにエクセル(Excel)に搭載されている機能です。Excel2013までは別途インストールが必要でしたが、Excel2016以降のバージョンでは標準で搭載されるようになりました。
SQL入門
Excelで扱うデータ量が増え、「動作が重い」「管理が複雑」といった限界を感じていませんか? 本シリーズでは、その問題を解決するために、ExcelのVBAから外部データベース(DB)を操作する方法を解説します。軽量DBのSQLiteを例に、ADOを使った接続や、データの操作・管理を行うためのSQLの基本構文を、




同じテーマ「エクセル練習問題解答」の記事

エクセル試験1:曜日別の平均客単価解答
エクセル試験2:所得税の計算解答
エクセル試験3:月間の所定労働時間解答
指定日付の有効最新マスタ一覧(履歴マスタ)解答
スピルの基本練習と最新関数解答
入力規則とスピルと最新関数解答
日別データから欠損月を追加して年月集計解答
偶数月に前月分と合わせて2か月分を受け取る解答
最長連続出現数(ランレングス)の算出解答
実績/予算ごとの3年間通算累計を出力解答
数値を記号の積み上げでグラフ化する(■は10、□は1)解答


新着記事NEW ・・・新着記事一覧を見る

シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ