更新日:、 作成日:
エクセル セルや文字列をループする
はじめに
エクセルのセルや文字列をループする方法を紹介します。
セルの範囲をループして合計を計算したり、各値を計算した配列を作成できます。
文字列を 1 文字ずつループしたり、指定した回数関数をループできます。
セルの範囲をループして結果を取得する
セルの範囲をループして 1 つの結果を取得するには「REDUCE 関数」を使用します。
引数「LAMBDA」の処理から合計を計算したり、セルの数をカウントできます。好きなように処理を変更できます。
合計を求める
セルの範囲「B2」~「B4」の合計を求めます。「SUM 関数」のように合計を取得できます。
引数「LAMBDA」の第 2 引数に「B4:B6」のセルを順番に渡します。引数「LAMBDA」の結果が、次の LAMBDA の第 1 引数に渡されます。次のように処理されます。
10+B3
30+B4
セルの数をカウントする
セルの範囲「B2」~「B4」のセルの数をカウントします。「COUNT 関数」のようにセルの数をカウントできます。
引数「LAMBDA」は次のように処理されます。
1+1
2+1
数値のセルの数をカウントするには次のようにします。「ISNUMBER 関数」を使用して数値か判定できます。
LAMBDA(total,x,
IF(ISNUMBER(x),total+1,total)))
集計方法
引数「LAMBDA」の処理を変更して好きなように合計や平均などを求められます。
「SUM 関数」のように合計を求めるには、引数「LAMBDA」を LAMBDA(total,x,total+x) のように入力します。
「COUNT 関数」のようにセルの数をカウントするには、引数「LAMBDA」を LAMBDA(total,x,total+1) のように入力します。
「AVERAGE 関数」のように平均を求めるには、REDUCE 関数で求めた 合計/件数 のように入力します。条件を付けて平均を求めるには次のように入力します。値が 100 以上の平均を求めます。何度も同じ関数を使用しないために「LET 関数」を使用します。
条件,MAP(B3:B6,LAMBDA(x,IF(x>=100,x,FALSE))),
合計,REDUCE(0,条件,LAMBDA(total,x,total+x)),
件数,REDUCE(0,条件,LAMBDA(total,x,IF(x,total+1,total))),
合計/件数)
「MAP 関数」を使用すると、そのまま集計関数が使用できます。
条件や複数の範囲
条件を満たす値だけ合計したり、複数のセルの範囲を合計するには「REDUCE 関数」をご覧ください。「MAP 関数」を使用してできます。
スポンサーリンク
セルの範囲をループして各値を計算した配列を作成する
セルの範囲をループして各値を計算した配列を作成するには「MAP 関数」を使用します。「スピル」でも同じ結果を取得できます。
他のループ処理に条件を入力したり、複数のセルの範囲をまとめたりできます。
セルの範囲を足し算する
=B4:B6+10 の数式を MAP 関数にします。
引数「LAMBDA」の第 1 引数に「B4:B6」のセルを順番に渡します。引数「LAMBDA」の結果が配列の要素になります。次のように処理されます。
B5+10
B6+10
2 つのセルの範囲を掛け算する
セルの範囲「B4」~「B6」と「C4」~「C6」を掛け算します。B4:B6*C4:C6 と同じ式です。
引数「LAMBDA」は次のように処理されます。
B5*C5
B6*C6
条件を指定
条件を満たす値だけ取得するには「MAP 関数」をご覧ください。
セルの範囲を行単位にループして計算した配列を作成する
セルの範囲をループして行単位に計算した配列を作成するには「BYROW 関数」を使用します。
引数「LAMBDA」の処理から最大値を取得したり、合計を計算したりできます。好きなように処理を変更できます。
行単位の最大値を取得する
セルの範囲「B4」~「C6」の行単位の最大値を取得します。「MAX 関数」を使用して最大値を取得できます。
引数「LAMBDA」の第 1 引数に「B4:C6」の行を順番に渡します。引数「LAMBDA」の結果が配列の要素になります。引数「LAMBDA」は次のように処理されます。
MAX(B5:C5)
MAX(B6:C6)
行単位の合計を求める
セルの範囲「B4」~「C6」の行単位の合計を求めます。「SUM 関数」を使用して合計を取得できます。
引数「LAMBDA」は次のように処理されます。
SUM(B5:C5)
SUM(B6:C6)
セルの範囲を列単位にループして計算した配列を作成する
セルの範囲をループして列単位に計算した配列を作成するには「BYCOL 関数」を使用します。
引数「LAMBDA」の処理から最大値を取得したり、合計を計算したりできます。好きなように処理を変更できます。
列単位の最大値を取得する
セルの範囲「C2」~「E3」の列単位の最大値を取得します。「MAX 関数」を使用して最大値を取得できます。
引数「LAMBDA」の第 1 引数に「C2:E3」の列を順番に渡します。引数「LAMBDA」の結果が配列の要素になります。引数「LAMBDA」は次のように処理されます。
MAX(D2:D3)
MAX(E2:E3)
列単位の合計を求める
セルの範囲「C2」~「E3」の列単位の合計を求めます。「SUM 関数」を使用して合計を取得できます。
引数「LAMBDA」は次のように処理されます。
SUM(D2:D3)
SUM(E2:E3)
文字列を 1 文字ずつループする
文字列を 1 文字ずつループするには「MID 関数」を「スピル」します。
1 文字ずつループする
「MID 関数」の引数「開始位置」に「SEQUENCE 関数」を使用して、文字列を 1 文字ずつ抽出します。「LEN 関数」を使用して文字数を取得できます。
文字列が ABCDE なら次の結果を返します。
それを「MAP 関数」の引数「範囲」に入力して 1 文字ずつ処理できます。
MID(B3,SEQUENCE(LEN(B3)),1),
LAMBDA(文字,文字))
「LAMBDA 関数」の第 1 引数に 1 文字ずつ渡されます。第 2 引数を変更して好きなように処理できます。
ループした文字列を結合するには「TEXTJOIN 関数」を使用します。
MID(B3,SEQUENCE(LEN(B3)),1),
LAMBDA(文字,文字)))
数字を削除する
文字列の中に入っている数字を削除します。「ISNUMBER 関数」を使用して数値か判定できます。「VALUE 関数」を使用して数字を数値に変換できます。
MID(B3,SEQUENCE(LEN(B3)),1),
LAMBDA(文字,
IF(ISNUMBER(VALUE(文字)),"",文字))))
指定した回数ループする (For Next)
関数や数式を指定した回数だけ実行するには「REDUCE 関数」を使用します。VBA の「For Next」のようにループできます。
指定した回数ループする
「REDUCE 関数」の引数「範囲」に「SEQUENCE 関数」を使用して、ループする回数を入力します。引数「LAMBDA」でその回数だけ関数や数式を実行できます。
ループした回数を取得します。
LAMBDA(total,回数,total+1))
何番目を指定して検索する
「FIND 関数」をループして何番目の検索ワードを検索します。
LAMBDA(total,x,
FIND($B$3,$C$3,total+1)))
ループする回数だけ「FIND 関数」を実行します。その 結果 + 1 を次の「FIND 関数」の引数「開始位置」に指定して、何番目の検索ワードを検索できます。
SEQUENCE(B5) の部分に何番目の検索ワードを検索するかを入力します。
total+1 の部分で前回の検索結果 + 1 を開始位置にしています。
スポンサーリンク