テンプレート文字列を扱える数式を作成する。

 

以下の数式をFormatという名前で定義する。

=LAMBDA(template, values,
    REDUCE(
        template,
        SEQUENCE(LEN(template) - LEN(SUBSTITUTE(template, "$", ""))),
        LAMBDA(acc, i,
            SUBSTITUTE(acc, "$" & i, INDEX(TOCOL(values, 1), i, 1), 1)
        )
    )
)

 

使用例

A1    |  B1

世界 |  私

=Format("こんにちは! $1 と $2",A1:B1)

 

結果

"こんにちは! 世界と私"

 

文字列を右から検索できるようになりました。

EXCEL関数で右から検索するのは大変でしたが、

 

参考:

daitaideit.com

 

新しいSEQUENCE関数を利用することで少し楽になりました。(簡単とまで行きませんが)

 

■例■ 

A1セル: abcde/fghijk/m  から最後の"/"を探す

B1セル数式: =LEN(A1)-XMATCH("/",MID(A1,SEQUENCE(LEN(A1),,LEN(A1),-1),1))+1

B1セル値: 13

 

■解説■

SEQUENCE(LEN(A1),,LEN(A1),-1),1) でA1の文字数から1ずつ減っていく数列を作ります。

  14,13,12,....2,1

 

これにMID関数を使うことで MID(A1,SEQUENCE(LEN(A1),,LEN(A1),-1),1))

逆順に文字が入った配列ができます。

   m,/,k,j,i,h,g,f,/,e,d,c,b,a

 

"/"を XMATCHを使って探すと、最後から何文字目かが分かるので、文字列全体の長さから引いて1を足すと、最後の"/"の位置がわかる。

 

数値以外の値もランク付け

(対応バージョン:2021,WEB版,365版)

 

値の順位付けを行う関数にRANK関数がありますが、これは数値同士の比較にしか使えません。次の式で、任意の順位付けを行うことができます。

=XMATCH([何番目か知りたい値], SORT( [ランク付けに使う範囲] ))

 

使用例(結果):

数値以外でランク付け

使用例(結果):

数式表示

解説:

  SORT関数で並べ替えた中で何番目かをXMATCH関数で取得しています。

 

以上です。

 

参考:COUNTIFを使った方法

エクセルで順位を求めるRANK関数はある別の関数で代用できる! | [Excel]ためセル!

1セルで九九表(SEQUENCE関数)

どこでもいいので、以下の数式をセル一つに入力すると九九表ができる。

=SEQUENCE(9,1)*SEQUENCE(1,9)

 

応用1:アルファベット & 数字

=CHAR(CODE("a")-1+SEQUENCE(9,1))&SEQUENCE(1,9)

 

 

応用2: 1セルでカレンダー

=LET(_year,2022,_month,SEQUENCE(1,12),_day,SEQUENCE(31,1),_date,DATE(2022,_month,_day),IF(DAY(_date)<_day,"",_date))

 

カンマ区切りを分割する数式

私のEXCELにもLAMBDA関数がやってきたので、使ってみました。のメモ。

以下の数式をSPLITCSVという名前で名前の管理から登録します。

 

=LAMBDA(文字列,FILTERXML(SUBSTITUTE("<r><n>" &  文字列 & "</n></r>",",","</n><n>"),"r/n"))

 

上記は、"&"や"<"などの比較的使われる文字が入っているとエラーになってしまうので、改善した版が以下です。

 

=LAMBDA(文字列,SUBSTITUTE(FILTERXML(SUBSTITUTE("<r><n>" & SUBSTITUTE( 文字列,"<","🦁") & "</n></r>",",","</n><n>"),"r/n"),"🦁","<"))

 

以下のサイトを参考にしました。

(Excel)区切り文字による文字列の分割を関数で行う - いきなり答える備忘録 (officeisyours.com)

 

時間とニーズがあればもう少しわかりやすく書き直します。