入力規則とスピルと最新関数解答
エクセル練習問題解答ページです。
エクセル練習問題
・B2:F6の入力規則のリストでの数式

シンキングタイム
シンキングタイム終了
ここで、じっくり勉強して下さい。
エクセル練習問題解答
K2の数式
=SORT(
TEXTSPLIT(
TEXTJOIN(
CHAR(2),
TRUE,
MAP(
DROP(H:.H, 1),
DROP(I:.I, 1),
LAMBDA(x, y,
TEXTJOIN(
CHAR(2),
TRUE,
x & CHAR(1) & TOCOL(TEXTSPLIT(y, ","))
)
)
)
),
CHAR(1),
CHAR(2)
),
2
)数式の処理概要
H列とI列のデータを取得し、各科目に対応する「科目名 + 曜日・時限」のペアを展開(DROP、MAP、LAMBDA、TOCOL、TEXTSPLIT、TEXTJOIN)
展開されたデータを単一の文字列に連結(TEXTJOIN)
連結された文字列を行と列に分割して表形式に戻す(TEXTSPLIT)
「曜日・時限」の列で並べ替え(ソート)(SORT)
- DROP(H:.H, 1)、DROP(I:.I, 1): H列(科目名)とI列(曜日・時限)のデータ範囲から、見出し行(1行目)を除外して取得します。
- MAP(..., LAMBDA(x, y, ...)): H列の各セル(x:科目名)とI列の各セル(y:曜日・時限)の組み合わせに対して、以下の処理を繰り返し実行します。
- TEXTSPLIT(y, ","): I列のセル(例:「火2,金3」)をコンマ(,)で分割し、曜日・時限のリスト(例:{'火2'; '金3'})を作成します。
- TOCOL(...): 分割された曜日・時限のリストを1列のデータに変換します。
- x & CHAR(1) & ...: 科目名(x)と、上記で得られた各曜日・時限(例:'火2')を、区切り文字 CHAR(1) で結合します(例:「情報サイエンス応用$CHAR(1)火2」、「情報サイエンス応用CHAR(1)$金3」)。
- TEXTJOIN(CHAR(2), TRUE, ...): 各科目の結合ペア(例:「情報サイエンス応用$CHAR(1)火2」、「情報サイエンス応用CHAR(1)$金3」)を、別の区切り文字 CHAR(2) で連結します。
結果: 全ての「科目名$CHAR(1)$曜日・時限」のペアが、CHAR(2) で区切られた巨大な文字列になります。
- 行の区切り CHAR(2) で各ペア(例:「情報サイエンス応用$CHAR(1)$火2」)を新しい行に分けます。
- 列の区切り CHAR(1) で各行のデータを「科目名」と「曜日・時限」の2列に分けます。
結果: 「曜日・時限」が昇順で並んだ、最終的なリストが出力されます。
CHAR(2): 行の区切りとして使用されています(個々の「科目名と曜日・時限のペア」の間)。これも印刷されない特殊な文字コードです。
これらの特殊文字を使うことで、データ内のコンマやスペースと混同することなく、正確にデータを区切って結合・再分割することができます。
順に読み解いてみてください。
数式の書き方は沢山ありますので、各自工夫して作成してみてください。
入力規則
=OFFSET(INDEX(TAKE($K$2#,,1),XMATCH(B$1&$A2,TAKE($K$2#,,-1),0,1)),0,0,XMATCH(B$1&$A2,TAKE($K$2#,,-1),0,-1)-XMATCH(B$1&$A2,TAKE($K$2#,,-1),0,1)+1)

- 検索対象のリスト(K2#) から、曜日・時限の列(L列のデータ)を抽出します。
- B1セル(時限)とA2セル(曜日)の値を結合して、完全一致の検索キーを作成します。
- XMATCH 関数を使い、検索キーに最初に一致する行と、最後に一致する行の位置(インデックス)を特定します。
- INDEX 関数と OFFSET 関数を使って、最初と最後の位置から、抽出する範囲全体を動的に定義します。
- 検索キーと検索対象の列の準備
- TAKE($K$2#,,-1):
$K$2#は、K列とL列で展開されたリスト全体(K2セルから始まる動的配列)を指しています。
TAKE関数は、配列から指定した行数・列数だけを取得します。ここでは列数に-1を指定することで、リストの最後の1列(つまりL列の曜日・時限のデータ)を取得しています。これが検索対象の範囲です。 - B$1 & $A2:
B1セルの値(例:「火」)とA2セルの値(例:「1」)を結合し、「火1」のような検索キーを作成しています。
- TAKE($K$2#,,-1):
- 最初と最後の出現位置の特定(XMATCH)
ここでは、検索対象の範囲内で、上記で作成した検索キーが最初と最後に現れる行の位置を特定します。- XMATCH(B$1 & $A2, TAKE($K$2#,,-1), 0, 1):
1 は 検索モード を指定しており、「昇順の完全一致」または「最初に見つかったもの」を探します。
ここでは、検索キーに**最初に完全一致する行のインデックス(K2#の中での行番号)**を取得します。 - XMATCH(B$1 & $A2, TAKE($K$2#,,-1), 0, -1):
-1 は 検索モード を指定しており、「降順の完全一致」または「最後に見つかったもの」を探します。
ここでは、検索キーに最後に完全一致する行のインデックスを取得します。
- XMATCH(B$1 & $A2, TAKE($K$2#,,-1), 0, 1):
- 抽出する範囲の定義と取得(INDEX / OFFSET)
- XMATCH(..., 0, -1) - XMATCH(..., 0, 1) + 1:
これは「抽出する行数」を計算しています。
最後のインデックス - 最初のインデックス + 1 の計算により、検索キーに一致するデータの総数を求めています。
例:最後が5行目、最初が3行目なら、5-3+1=3行が抽出対象です。 - INDEX(TAKE($K$2#,,1), XMATCH(..., 0, 1)):
TAKE($K$2#,,1) は、リストの最初の1列(K列の科目名)を取得します。
INDEX関数は、このK列のデータの中から、最初に一致した行のデータ(最初の科目名)を取得し、これを抽出開始のセルとして指定します。 - OFFSET(..., 0, 0, ..., ):
OFFSET関数は、開始セル(INDEXの結果)から指定された行数・列数分ずれた範囲を返します。
開始セル:INDEX(...)の結果(最初に一致した科目名のセル)
行オフセット:0(行をずらさない)
列オフセット:0(列をずらさない)
高さ(行数):最後のインデックス - 最初のインデックス + 1 の計算結果(抽出する行数)
幅(列数):省略されているため、開始セルと同じ幅(1列)
- XMATCH(..., 0, -1) - XMATCH(..., 0, 1) + 1:
参考ページ
同じテーマ「エクセル練習問題解答」の記事
エクセル試験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.
