Excel 2024 新関数レポート
Excel 2024では、Excel 2021までには存在しなかった多数の新しい関数が追加されています。以下に追加された関数をご紹介します。
テキスト操作の新関数
Excel 2024では、文字列を区切り文字で抽出・分割するための便利な関数が新設されました。また、値をテキスト化する関数も追加されています。これらの関数により、従来は複雑な組み合わせが必要だったテキスト処理が簡潔に記述できます 11 12。
TEXTAFTER 関数
目的・意義: 指定した区切り文字または文字列より後に出現するテキストを抽出します。複数回出現する場合は第3引数で何番目の出現かを指定できます。
構文: =TEXTAFTER(text, delimiter, [instance_num], [match_mode], [match_end], [if_not_found])
(text から delimiter の後にある文字列を返します。)
使用例: “user@example.com” から「@」以降のドメイン部分を取り出すには =TEXTAFTER("user@example.com","@")
とします。結果は “example.com” となります 13。
TEXTBEFORE 関数
目的・意義: 指定した区切り文字または文字列より前に出現するテキストを抽出します 14。TEXTAFTERと対をなす関数です。
構文: =TEXTBEFORE(text, delimiter, [instance_num], ...)
(text から delimiter の前にある文字列を返します。)
使用例: “user@example.com” から「@」より前のユーザー名部分を取り出すには =TEXTBEFORE("user@example.com","@")
とします。結果は “user” となります 15。
TEXTSPLIT 関数
目的・意義: 指定した区切り文字でテキストを分割し、複数のセルにスピル出力します 16。行区切りと列区切りを別々に指定でき、複雑なテキストを行列形式のデータに変換できます。
構文: =TEXTSPLIT(text, col_delimiter, [row_delimiter], [ignore_empty], [match_mode])
使用例: “Apple, Banana, Cherry” をカンマ区切りで分割するには =TEXTSPLIT("Apple, Banana, Cherry", ",")
とします。結果として縦方向に Apple, Banana, Cherry の3つの文字列が spill (スピル) 表示されます 17。行区切りも指定すれば表形式に分割することも可能です。
VALUETOTEXT 関数
目的・意義: 任意の値をテキスト形式に変換して返します 18。文字列以外の値(数値、ブール値、エラー値など)は文字列に変換されます。第2引数で書式(簡易/厳密)を指定すると、厳密モードでは元が文字列の場合に引用符付きで返すこともできます。
構文: =VALUETOTEXT(value, [format])
使用例: =VALUETOTEXT(123)
は “123” (文字列) を返します。また、=VALUETOTEXT(TRUE)
は文字列 “TRUE” を返します 19。format に1を指定すると常に厳密な書式 (必要に応じて引用符やエスケープ文字を付加)でテキスト化します。
ARRAYTOTEXT 関数
目的・意義: 指定した範囲や配列の中身をテキスト値の配列として返します 20。実質的には、与えられた配列の各要素をテキストに変換した結果を、新たな配列 (または文字列) として取得する関数です。
構文: =ARRAYTOTEXT(array, [format])
使用例: 範囲 A1:A3 に 10,20,30 という数値が入っている場合、=ARRAYTOTEXT(A1:A3)
は各値を文字列に変換した配列{“10″;”20″;”30”} を返します。format 引数に1を指定すると、Excel数式で再利用可能な厳密書式(各値を必要に応じ引用符で囲むなど)で返します。
配列の結合・変換に関する関数
動的配列の活用をさらに広げるため、Excel 2024では複数の配列を結合したり、配列の形状を変換する関数が追加されました 21。これにより、可変サイズのデータソースを容易に結合・変形できます。以下の関数は、配列同士の連結 (スタック) や配列形状の変換を行います。
VSTACK 関数
目的・意義: 複数の配列を垂直(縦方向)に連結し、一つの大きな配列として返します 22。行数の異なる配列も結合できます (足りない部分は空白になります)。
構文: =VSTACK(array1, [array2, ...])
使用例: たとえば、{“A”; “B”} と {“C”;”D”} という縦ベクトルをVSTACKで結合すると、=VSTACK({"A"; "B"},{"C"; "D"})
の結果は {“A”; “B”; “C”; “D”} という4行1列の配列になります。複数シートの一覧データを縦方向にまとめる用途などに有用です 23。
HSTACK 関数
目的・意義: 複数の配列を水平方向 (横方向)に連結し、一つの配列として返します 22。列数の異なる配列も結合できます。
構文: =HSTACK(array1, [array2, ...])
使用例: 例えば、範囲 A1:A3 と B1:B3 を横に並べて結合するには =HSTACK(A1:A3, B1:B3)
とします。結果は2つの列を持つ3行×2列の配列になります。表の列を動的に追加するような用途に便利です。
TOROW 関数
目的・意義: 与えた配列を1行に平坦化 (フラット化) して返します 24。2次元の配列を横一列に並べたい場合に使います。
構文: =TOROW(array, [ignore_empty])
(指定すれば空白やエラーを無視可能)
使用例: 範囲 A1:B2 に [[1,2]; [3,4]] のデータがある場合、=TOROW(A1:B2)
は {1,2,3,4} の1行4列の配列を返します(縦→横に展開)。ignore_empty に TRUE を指定すると空白セルは除外されます。
TOCOL 関数
目的・意義: 与えた配列を1列に平坦化して返します 24。2次元の配列を縦一列に並べたい場合に使います。
構文: =TOCOL(array, [ignore_empty])
使用例: 範囲 A1:B2 の例で =TOCOL(A1:B2)
を実行すると {1; 3; 2; 4} の4行1列の配列が返ります(既定では行優先で抽出されますが、第3引数で列優先にも設定可能です)。空白除外のオプションもTOROW同様利用できます 25。
WRAPROWS 関数
目的・意義: 1列または1行で与えた一次元配列を、指定した列数になるよう改行し2次元配列化します 26。要素を指定の列数ごとに折り返して表形式に整形する関数です。
構文: =WRAPROWS(vector, wrap_count, [pad])
(wrap_count 列ごとに改行し、足りない部分は pad で埋めます)
使用例: 縦ベクトル {1;2;3;4;5} を3列ごとに折り返すには =WRAPROWS({1;2;3;4;5}, 3)
とします。結果は [[1,2,3]; [4,5,]] のように2行×3列の配列となり、欠けた部分はデフォルトで空白になります (pad を指定すれば任意の値で埋められます) 27 28。
WRAPCOLS 関数
目的・意義: 1列または1行の配列を、指定した行数になるよう折り返して複数列の2次元配列化します 26。WRAPROWSの行版で、要素を一定行数ごとに次の列へ折り返します。
構文: =WRAPCOLS(vector, wrap_count, [pad])
(wrap_count 行ごとに改段)
使用例: 横ベクトル {1,2,3,4,5} を3行ごとに折り返すには =WRAPCOLS({1,2,3,4,5}, 3)
とします。結果は3行2列の配列 [[1,4]; [2,5]; [3,]] となり、足りない箇所は空白で埋められます(指定すれば他の値で埋めることも可能です)。
配列の抽出・拡張に関する関数
配列から特定の部分を取り出したり(抽出)、配列サイズを拡張したりする関数も新たに導入されています。これらの関数により、動的配列の一部を切り出したり削ったり 29 30、あるいは指定サイズに拡張 31 32 する操作が簡単に記述できます。
TAKE 関数
目的・意義: 指定した配列から先頭または末尾の特定行数/列数を取り出します 33。必要な部分だけを抜き出して取得する機能です(行数・列数とも指定可能)。
構文: =TAKE(array, rows, [cols])
rows は取得する行数(正の値で先頭から、負の値で末尾から)。cols 省略時はすべての列を含みます。
使用例: A1:C10 の範囲から先頭5行だけ取得するには、=TAKE(A1:C10, 5)
とします。末尾2列だけ欲しい場合は =TAKE(A1:C10,,-2)
のように列数に負値を指定します。先頭・末尾の一定サイズを動的に切り出す用途に適します。
DROP 関数
目的・意義: 指定した配列から先頭または末尾の特定行数/列数を削除します 34。TAKEとは逆に不要な部分を落とした残りを取得する関数です。
構文: =DROP(array, rows, [cols])
rows は削除する行数(正の値で先頭から、負の値で末尾から)。cols 省略時は全列対象。
使用例: A1:C100 から先頭の1行目を除いて残りを取得したい場合、=DROP(A1:C100, 1)
とします (2行目以降が得られる)。同様に末尾行を除くには =DROP(A1:C100, -1)
、先頭列を除くには =DROP(A1:C100,,1)
といった指定になります。
CHOOSEROWS 関数
目的・意義: 指定したインデックス位置の行のみを抜き出して返します 35。複数の行を選択可能で、必要な行だけを抽出するのに使います。
構文: =CHOOSEROWS(array, row_num1, [row_num2, ...])
使用例: 範囲 A1:C5 から1行目と3行目だけを取り出すには、=CHOOSEROWS(A1:C5, 1, 3)
と指定します。結果は元の範囲の第1行と第3行から成る2行×3列の配列となります 36。負のインデックスも使用でき、-1は最後の行を表します。
CHOOSECOLS 関数
目的・意義: 指定したインデックス位置の列のみを抜き出して返します 37。複数の列を選択可能です。
構文: =CHOOSECOLS(array, col_num1, [col_num2, ...])
使用例: 範囲 A1:E10 から1列目と4列目だけを抽出するには、=CHOOSECOLS(A1:E10, 1, 4)
とします。結果は2列分 (A列とD列相当)のデータから成る10行×2列の配列になります。0や負の値による指定もCHOOSEROWS同様サポートされています。
EXPAND 関数
目的・意義: 指定したサイズになるように配列を拡張します 38。元の配列を指定行数・列数に拡大し、余分なセルは指定した値で埋めます。
構文: =EXPAND(array, rows, cols, [pad])
rows × cols のサイズに拡張。pad は埋める値(省略時は空白)。
使用例: 2行2列の範囲 A1:B2 を4行×5列に拡張するには、=EXPAND(A1:B2, 4, 5,0)
のように指定します。元データが配置された以外のセルは 0 で埋められ、結果は4行×5列の配列となります 39 40。padを省略すれば空白で埋められます。
集計・ピボット関連の新関数
Excel 2024には、ピボットテーブルに似た集計を数式だけで実現できる強力な関数群が追加されました。これらにより、行列方向にデータをグループ化して動的な集計表を生成したり、集計結果を百分率で取得したりできます 41 42。
GROUPBY 関数
目的・意義: 指定したキー列 (行方向のカテゴリ) によってデータの行をグループ化し、集計値を算出します 43。従来のピボットテーブルの行集計に相当し、数式ひとつで動的な集計表 (サマリー)を生成します。元データが変われば結果も自動更新されます 44。
構文: =GROUPBY(row_fields, values, function, [field_headers], [total_depth], [sort_order], [filter_array])
- row_fields: グループ化のキーとなる列範囲(1列以上指定可能)。
- values: 集計したい値の列範囲。
- function: 適用する集計関数 (SUMやAVERAGEなどの既存関数、またはLAMBDA)。
(この他、ヘッダー行の扱いや小計/総計、並び替えやフィルタのオプション引数があります。)
使用例: 「支店別の売上合計」を求める場合、支店名リスト範囲を row_fieldsに、売上金額範囲を values に指定し、function に SUM を渡して =GROUPBY(支店範囲,売上範囲, SUM)
のように使います。各支店の合計売上が動的に計算され、二列(支店,集計値) から成るサマリー表が得られます 44。
PIVOTBY 関数
目的・意義: 行方向および列方向の両軸でデータをグループ化し、集計表(ピボットテーブル状の結果)を生成します 45。GROUPBYが行方向のみの集計であるのに対し、PIVOTBYは行×列の二次元クロス集計を行う点が異なります 46。
構文: =PIVOTBY(row_fields, col_fields, values, function, [field_headers], [row_total_depth], [row_sort_order], [col_total_depth], [col_sort_order], [filter_array])
(row_fields で行軸カテゴリ、col_fields で列軸カテゴリを指定)
使用例: 「支店(行)×年度 (列) 別の売上最大値」をピボット形式で求める場合、=PIVOTBY(支店範囲,年度範囲,売上範囲, MAX)
のように指定します。行方向に支店、列方向に年度の軸を持ち、各セルに対応する MAX(売上)が配置された表が得られます (行・列の総計や並び順等もオプションで制御可能です)。この関数を使えば、ピボットテーブルを作成せずとも類似の集計が可能になります 45。
PERCENTOF 関数
目的・意義: ある部分集合の合計を全体の合計で割った割合 (パーセント) を計算します 47。単独でも使えますが、本来はGROUPBYやPIVOTBYと組み合わせて集計結果を全体比で示す用途向けに導入されています 48。
構文: =PERCENTOF(part, whole)
part (部分集合) と whole (全体) の合計値の比を計算します。
使用例: =PERCENTOF(250, 1000)
は 0.25 を返し、パーセンテージ表示にすれば25%となります 49。「各支店の売上が全社の何%か」を求める場合は、GROUPBYで支店別売上を計算した結果に対し、whole に全社売上総計を指定したPERCENTOFを用いることで実現できます。
データ型・データ取得に関する新関数
外部データやリンクされたデータ型を扱う新関数もExcel 2024で利用可能になっています。リンクされたデータ型から特定の情報を取り出す関数や、株価の履歴データを取得する関数が追加されました。
FIELDVALUE 関数
目的・意義: リンクされたデータ型 (例えば株価や地理情報)から、指定したフィールドの値を取得します 50。従来、セルに挿入したデータ型から特定項目を取り出すには 「=フィールド名」といった構文を使用していましたが、FIELDVALUE関数を使うことで数式中で動的にフィールド名を指定して値を抽出できます。
構文: =FIELDVALUE(value, field_name)
value にはセル参照 (リンクされたデータ型が含まれるセル)、field_name には取得したいフィールド名 (文字列)を指定します。
使用例: セル A2 に「国:日本」のデータ型が入っているとします。=FIELDVALUE(A2, "人口")
とすれば、地理データ型「日本」から「人口」 フィールドの値を取得できます。株価データ型に対して「終値」などを取得することも可能です(フィールド名は英語Excelでは “Population”, “Close” のように指定します)。
STOCKHISTORY 関数
目的・意義: 指定した証券の過去の価格データを取得します。銘柄シンボルと日付範囲を指定すると、株価 (または為替レートなど)の時系列データをスピルで返します 51。期間中の日次・月次など頻度や、取得する値種(終値、始値、高値、出来高など)もオプションで指定できます。
構文: =STOCKHISTORY(symbol, start_date, end_date, [interval], [headers], [properties...])
(symbol は銘柄ティッカーや金融商品の識別子、interval で日次/週次/月次を指定、properties で取得する項目を選択)
使用例: =STOCKHISTORY("MSFT", "2023-01-01", "2023-01-31", 0, 1, 0, 1)
と指定すると、マイクロソフト社 (MSFT) の2023年1月の日次終値が日付とともに2列の配列で得られます。株価だけでなく、為替レートや基金の価格なども対応しています。取得した配列は動的で、開始日や終了日を変更すると結果も自動更新されます。
画像のセル挿入:IMAGE関数
IMAGE 関数
目的・意義: 指定したURLから画像を取得しセル内に挿入する関数です 52。Excelセル内で画像をデータとして扱えるようになり、従来のオブジェクト画像と違ってセルに結び付いて動的に配置・並び替え等が可能になります 53。たとえば製品リストに各商品の画像URLを持たせ、IMAGE関数でセルに画像を表示するといった使い方ができます。
構文: =IMAGE(source, [alt_text], [sizing], [height], [width])
- source: 画像ファイルのURL (https://で始まるアドレス)
- alt_text: 画像が表示できない場合に表示する代替テキスト (省略可)
- sizing: サイズ指定モード(省略可。既定はセルに合わせて画像を拡大縮小)
- height, width: サイズモードが適用されない場合の画像高さ・幅(省略可)
使用例: 商品画像のURLがセル B2 にある場合、=IMAGE(B2,"商品画像")
とすることでそのURLの画像をセル内に表示できます。取得した画像はセルに埋め込まれるため、列の並べ替えやフィルタ操作にも他のセルの値と一緒に連動します 53。例えば、IMAGE関数で挿入した画像付きの表を並べ替えても各画像は対応する行と一緒に移動します。
ラムダ関数およびその補助関数
Excel 2024では、ラムダ関数 (LAMBDA) と呼ばれるユーザー定義関数をサポートします。さらに、このLAMBDA関数を活用する補助関数 (MAP/REDUCE/SCAN/MAKEARRAY/BYROW/BYCOL/ISOMITTED) が追加されました。これらによりプログラミング的な計算がセル上で可能となり、複雑な計算の簡略化や再利用性の向上が図られています。
LAMBDA 関数
目的・意義: 任意の計算式に引数名を与えてカスタム関数として定義し、ブック内で再利用可能にします。作成したラムダ式にはわかりやすい名前を付けてネイティブ関数のように呼び出すことができ、同じ計算の繰り返しや複雑な数式の簡素化に役立ちます 2。
構文: =LAMBDA([param1, param2, ...], 計算式)(引数1,引数2,…)
– 最後の括弧で渡した引数に対し計算式を評価します。
使用例: =LAMBDA(x, y, x*y)(3, 4)
のように定義すると、3と4を掛け合わせた結果である 12 を返します。定義したLAMBDAに名前を付ければ、以後その名前を関数のように使用できます (例えば LAMBDA関数に名前「Multiply」を定義すれば、=Multiply(3,4)
の形式で利用可能です)。
MAP 関数
目的・意義: 配列や範囲内の各要素に対して同じ処理を適用し、新しい配列を返します 3。複数の配列を並行して処理することも可能で、各要素を対応する位置でラムダ式に渡し、新しい値にマッピングします。
構文: =MAP(array1, [array2, ...], LAMBDA(param1, [param2, ...],計算式))
使用例: 例えば1列の数値配列 {1; 2; 3} の各値を2倍にするには、=MAP({1;2;3}, LAMBDA(x, 2*x))
とします。この結果、新しい配列として {2; 4; 6} が返されます。
REDUCE 関数
目的・意義: 初期値から開始し、配列の各要素を累積的に1つの値に畳み込む (Reduce) 処理を行います 4 5。つまり、ラムダ式で定義した演算を順次適用し、最終的な集計結果 (累積値)を返します。
構文: =REDUCE(initial_value, array, LAMBDA(accumulator, value,新accumulator))
※ accumulator は累積値、value は配列から取り出される各値を指します。
使用例: 配列 {2, 4, 6} の総和を求めるには、初期値を0にして =REDUCE(0, {2,4,6}, LAMBDA(sum, x, sum + x))
とします。各要素を順に加算して累積し、結果は 12 となります。
SCAN 関数
目的・意義: 配列の各要素に対して指定のラムダ演算を適用し、各ステップの累積結果を配列として出力します。REDUCEが最終結果のみ返すのに対し、SCANは中間の累積結果をすべて含む配列を返す点が異なります。
構文: =SCAN(initial_value, array, LAMBDA(accumulator, value,新accumulator))
使用例: 配列{3,5,2} のランニング合計 (累積和)を求める場合、=SCAN(0, {3,5,2}, LAMBDA(sum, x, sum + x))
とします。初期値0から始め、累積和の経過を配列で返すため結果は {3; 8; 10} となります (3、3+5、3+5+2)。
MAKEARRAY 関数
目的・意義: 指定した行数・列数のサイズを持つカスタム配列を生成します 6。各要素の値は、行番号・列番号を引数とするラムダ式によって計算されます。
構文: =MAKEARRAY(rows, cols, LAMBDA(row, col,計算式))
使用例: 2行3列の掛け算表を生成する例: =MAKEARRAY(2, 3, LAMBDA(r, c, r*c))
とすると、各セルに r*c の計算結果を持つ [[1, 2, 3]; [2, 4, 6]] の配列を返します (1行目は 1×1,1×2,1×3・・・)となります。
BYROW 関数
目的・意義: 与えた2次元範囲/配列の各行に対してラムダ式を適用し、各行ごとの結果を返します。複数行のデータを行単位で集計・変換したい場合に有用です。
構文: =BYROW(array, LAMBDA(row,計算式))
row は配列から順番に取り出される各行(一行分の配列)になります。
使用例: 範囲 A1:C3 に数値データがあるとして、各行の合計を求めたい場合 =BYROW(A1:C3, LAMBDA(r, SUM(r)))
とします。結果は3行1列の配列に各行の合計値が格納されます。
BYCOL 関数
目的・意義: 与えた2次元範囲/配列の各列に対してラムダ式を適用し、各列ごとの結果を返します。列ごとの統計量算出などに有用です 8。
構文: =BYCOL(array, LAMBDA(col,計算式))
col は配列から順番に取り出される各列 (一列分の配列)になります。
使用例: 範囲 A1:C10 の各列について平均を計算するには、=BYCOL(A1:C10, LAMBDA(c, AVERAGE(c)))
とします。3列分の平均値を1行3列の配列で返します。
ISOMITTED 関数
目的・意義: ラムダ関数内で定義した引数が省略されたかどうかをチェックします 10。これにより、ラムダにオプション引数を持たせたり、省略時の処理を柔軟に制御できます。
構文: =ISOMITTED(argument)
– 評価対象の引数が渡されていない場合に TRUE を返し、渡されていれば FALSE を返します。
使用例: =LAMBDA(x, [y], IF(ISOMITTED(y), x*2, x+y))
と定義すると、2番目の引数y が与えられなかった場合には x*2 を返し、与えられた場合には x+y を返すカスタム関数になります(この例ではISOMITTEDによりy の省略を検出しています)。
以上、Excel 2024で新たに追加された関数について、Excel 2021には無かったものを中心に解説しました。これらの新関数により、テキスト処理や配列操作、データ集計・取得の作業が大幅に効率化されています 54 55。ぜひ実際のデータ分析やシート作成で活用してみてください。
コメント