🍎
Google Sheetsでfill blank
Google Sheets関数: fill_blank_by_upper
Google Sheetsでデータを扱っていると、欠損値や空白がある場合があります。特にセル結合を用いた表では、値は左上にしか入らないため下のような欠損値を含む表となってしまいます。
A | B | |
---|---|---|
1 | red | apple |
2 | strawberry | |
3 | yellow | banana |
4 | lemon | |
5 | green | asparagus |
このfill_blank_by_upper
関数は、カラム内の欠損値をそのカラムの直上の非欠損値で埋めるための関数です。
対象読者
Google Sheetsで上記のような欠損値入りのデータをlambda関数で処理したいと思っている方
パラメータ
パラメータ | 説明 |
---|---|
range |
埋めるセルの範囲。 |
例
=fill_blank_by_upper(A1:B5)
元のデータ
A | B | |
---|---|---|
1 | red | apple |
2 | strawberry | |
3 | yellow | banana |
4 | lemon | |
5 | green | asparagus |
結果
A | B | |
---|---|---|
1 | red | apple |
2 | red | strawberry |
3 | yellow | banana |
4 | yellow | lemon |
5 | green | asparagus |
実装
lambda(
range,
let(
fill_col_blank,lambda(
col,
scan(
,
col,
lambda(
prev,
current,
if(
isBlank(current),
prev,
current
)
)
)
),
byCol(range,fill_col_blank)
)
)
この関数の実装は、lambdaを用いていて、具体的な動作は以下の通りです:
-
fill_col_blank
では1列のデータを対象に欠損値を埋めます。 -
scan
関数は、カラムのデータを上から下へと順に走査し、前回の値(prev
)と現在の値(current
)を比較します。 -
if(isBlank(current), prev, current)
の部分で、現在のセルの値が空白(欠損値)であれば、前回の値(直上のセルの値)を返し、そうでなければ現在の値を返します。 - これをカラムの最後まで繰り返し、欠損値を埋めたカラムのデータを生成します。
-
byCol
を用いて全ての行を処理します。
名前付き関数として登録する場合は、パラメータとしてrange
を登録した上で、以下を関数の本体として登録してください
=let(
fill_col_blank,lambda(
col,
scan(
,
col,
lambda(
prev,
current,
if(
isBlank(current),
prev,
current
)
)
)
),
byCol(range,fill_col_blank)
)
この関数を用いれば、セル結合のせいで欠損値がある表も簡単に扱うことができます。
Discussion