更新日:、 作成日:

エクセル セルや文字列をループする

はじめに

365:対応

エクセルのセルや文字列をループする方法を紹介します。

セルの範囲をループして合計を計算したり、各値を計算した配列を作成できます。

文字列を 1 文字ずつループしたり、指定した回数関数をループできます。

ループするのに「LAMBDA 関数」を使用するので、使用したことがない方は先にご覧ください。

セルの範囲をループして結果を取得する

セルの範囲をループして 1 つの結果を取得するには「REDUCE 関数」を使用します。

引数「LAMBDA」の処理から合計を計算したり、セルの数をカウントできます。好きなように処理を変更できます。

合計を求める

セルの範囲「B2」~「B4」の合計を求めます。「SUM 関数」のように合計を取得できます。

=REDUCE(0,B2:B4,LAMBDA(total,x,total+x))

引数「LAMBDA」の第 2 引数に「B4:B6」のセルを順番に渡します。引数「LAMBDA」の結果が、次の LAMBDA の第 1 引数に渡されます。次のように処理されます。

0+B2
10+B3
30+B4
1

セルの数をカウントする

セルの範囲「B2」~「B4」のセルの数をカウントします。「COUNT 関数」のようにセルの数をカウントできます。

=REDUCE(0,B2:B4,LAMBDA(total,x,total+1))

引数「LAMBDA」は次のように処理されます。

0+1
1+1
2+1
2

数値のセルの数をカウントするには次のようにします。「ISNUMBER 関数」を使用して数値か判定できます。

=REDUCE(0,B2:B4,
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 関数」を使用します。

=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 関数」を使用すると、そのまま集計関数が使用できます。

=SUM(MAP(B3:B6,LAMBDA(x,IF(x>=100,x,FALSE))))
=COUNT(MAP(B3:B6,LAMBDA(x,IF(x>=100,1,FALSE))))
=AVERAGE(MAP(B3:B6,LAMBDA(x,IF(x>=100,x,FALSE))))

条件や複数の範囲

条件を満たす値だけ合計したり、複数のセルの範囲を合計するには「REDUCE 関数」をご覧ください。「MAP 関数」を使用してできます。

セルの範囲をループして各値を計算した配列を作成する

セルの範囲をループして各値を計算した配列を作成するには「MAP 関数」を使用します。「スピル」でも同じ結果を取得できます。

他のループ処理に条件を入力したり、複数のセルの範囲をまとめたりできます。

セルの範囲を足し算する

=B4:B6+10 の数式を MAP 関数にします。

=MAP(B4:B6,LAMBDA(x,x+10))

引数「LAMBDA」の第 1 引数に「B4:B6」のセルを順番に渡します。引数「LAMBDA」の結果が配列の要素になります。次のように処理されます。

B4+10
B5+10
B6+10
1

2 つのセルの範囲を掛け算する

セルの範囲「B4」~「B6」と「C4」~「C6」を掛け算します。B4:B6*C4:C6 と同じ式です。

=MAP(B4:B6,C4:C6,LAMBDA(x,y,x*y))

引数「LAMBDA」は次のように処理されます。

B4*C4
B5*C5
B6*C6
3

条件を指定

条件を満たす値だけ取得するには「MAP 関数」をご覧ください。

セルの範囲を行単位にループして計算した配列を作成する

セルの範囲をループして行単位に計算した配列を作成するには「BYROW 関数」を使用します。

引数「LAMBDA」の処理から最大値を取得したり、合計を計算したりできます。好きなように処理を変更できます。

行単位の最大値を取得する

セルの範囲「B4」~「C6」の行単位の最大値を取得します。「MAX 関数」を使用して最大値を取得できます。

=BYROW(B4:C6,LAMBDA(row,MAX(row)))

引数「LAMBDA」の第 1 引数に「B4:C6」の行を順番に渡します。引数「LAMBDA」の結果が配列の要素になります。引数「LAMBDA」は次のように処理されます。

MAX(B4:C4)
MAX(B5:C5)
MAX(B6:C6)
2

行単位の合計を求める

セルの範囲「B4」~「C6」の行単位の合計を求めます。「SUM 関数」を使用して合計を取得できます。

=BYROW(B4:C6,LAMBDA(row,SUM(row)))

引数「LAMBDA」は次のように処理されます。

SUM(B4:C4)
SUM(B5:C5)
SUM(B6:C6)
1

セルの範囲を列単位にループして計算した配列を作成する

セルの範囲をループして列単位に計算した配列を作成するには「BYCOL 関数」を使用します。

引数「LAMBDA」の処理から最大値を取得したり、合計を計算したりできます。好きなように処理を変更できます。

列単位の最大値を取得する

セルの範囲「C2」~「E3」の列単位の最大値を取得します。「MAX 関数」を使用して最大値を取得できます。

=BYCOL(C2:E3,LAMBDA(col,MAX(col)))

引数「LAMBDA」の第 1 引数に「C2:E3」の列を順番に渡します。引数「LAMBDA」の結果が配列の要素になります。引数「LAMBDA」は次のように処理されます。

MAX(C2:C3)
MAX(D2:D3)
MAX(E2:E3)
2

列単位の合計を求める

セルの範囲「C2」~「E3」の列単位の合計を求めます。「SUM 関数」を使用して合計を取得できます。

=BYCOL(C2:E3,LAMBDA(col,SUM(col)))

引数「LAMBDA」は次のように処理されます。

SUM(C2:C3)
SUM(D2:D3)
SUM(E2:E3)
1

文字列を 1 文字ずつループする

文字列を 1 文字ずつループするには「MID 関数」を「スピル」します。

1 文字ずつループする

MID 関数」の引数「開始位置」に「SEQUENCE 関数」を使用して、文字列を 1 文字ずつ抽出します。「LEN 関数」を使用して文字数を取得できます。

=MID(B3,SEQUENCE(LEN(B3)),1)

文字列が ABCDE なら次の結果を返します。

{A; B; C; D; E}

それを「MAP 関数」の引数「範囲」に入力して 1 文字ずつ処理できます。

=MAP(
MID(B3,SEQUENCE(LEN(B3)),1),
LAMBDA(文字,文字))

LAMBDA 関数」の第 1 引数に 1 文字ずつ渡されます。第 2 引数を変更して好きなように処理できます。

ループした文字列を結合するには「TEXTJOIN 関数」を使用します。

=TEXTJOIN("",TRUE,MAP(
MID(B3,SEQUENCE(LEN(B3)),1),
LAMBDA(文字,文字)))
1

数字を削除する

文字列の中に入っている数字を削除します。「ISNUMBER 関数」を使用して数値か判定できます。「VALUE 関数」を使用して数字を数値に変換できます。

=TEXTJOIN("",TRUE,MAP(
MID(B3,SEQUENCE(LEN(B3)),1),
LAMBDA(文字,
IF(ISNUMBER(VALUE(文字)),"",文字))))
2

指定した回数ループする (For Next)

関数や数式を指定した回数だけ実行するには「REDUCE 関数」を使用します。VBA の「For Next」のようにループできます。

指定した回数ループする

REDUCE 関数」の引数「範囲」に「SEQUENCE 関数」を使用して、ループする回数を入力します。引数「LAMBDA」でその回数だけ関数や数式を実行できます。

ループした回数を取得します。

=REDUCE(0,SEQUENCE(B3),
LAMBDA(total,回数,total+1))
9

何番目を指定して検索する

FIND 関数」をループして何番目の検索ワードを検索します。

=REDUCE(0,SEQUENCE(B5),
LAMBDA(total,x,
FIND($B$3,$C$3,total+1)))
16

ループする回数だけ「FIND 関数」を実行します。その 結果 + 1 を次の「FIND 関数」の引数「開始位置」に指定して、何番目の検索ワードを検索できます。

SEQUENCE(B5) の部分に何番目の検索ワードを検索するかを入力します。

total+1 の部分で前回の検索結果 + 1 を開始位置にしています。