1つ1つ手作業でやると非常に面倒ですが、少し工夫すれば一括で処理することができます。
- 関数を使って空白セルを「上にある値」で埋めた結果を得ることができます。
- フィルタを使って実現することもできます。
関数を使う方法
IF関数を使う方法
もっとも簡単な方法です。
次の画像ではB2:B12の範囲が表になっていますが、空白セルが多数含まれています。
そこでD2セルに「=IF(B2="",D1,B2)」という式を入力します。
D2セル
=IF(B2="",D1,B2)
B2セルが空白なら1つ上のD1セルを参照し、そうでなければB2セルの値をそのまま出力するという式です。
B列の値が空白であるときの参照先が(B列の値ではなく)D列であるというのがポイントです。
確定するとD2セルの値は「青森県」となりました。
そのままD2セルの右下にある青いマル(フィルハンドル)をD12セルまでドラッグすると…
式がコピーされ、空白セルが「上にある値」で埋められた結果を得ることができました。
SCAN/LAMBDA関数を使う方法
ここではD2セルに式を入力するだけで、表内の空白セルを「上にある値」で埋めた結果を得ています。
D2セル
=SCAN(B2,B2:B12,LAMBDA(a,b,IF(b="",a,b)))
SCAN/LAMBDA関数を使ったやや難解な式ですが、これは次のように機能します。
- B2セルの値をaと、B2:B12の範囲をbと名付ける
- bの1つ1つの値について空白かどうかIF関数でチェックする
- 空白ならaをそのまま表示する。空白でなければその値を表示してその値を新たなaとする
なお、最初のIF関数の例では各セルから上方のセルを参照しているので1行目に式を置くことができません(ただし単に「=B1」などとすれば済みます)が、このやり方の場合は上方のセルを参照しているわけではないので、1行目に式を置いても破綻しません。
D1セル
=SCAN(B1,B1:B11,LAMBDA(a,b,IF(b="",a,b)))
フィルタを使う方法
フィルタを使うことで表内の空白セルに直接入力する方法です。
まずは表の範囲(B2:B12)を選択して、メニューから「データ」→「フィルタ表示」→「新しいフィルタ表示を作成」と選択します。
(※この例の場合、表が小さいため表の範囲を自動選択してくれません。よって表を全選択した状態でメニュー操作をする必要があります)
フィルタがかかった状態となります。
B2セルが見出しとして扱われていますが、特に気にする必要はありません。
B2セルの右側にあるマークをクリックして、メニューから「条件でフィルタ」→「空白」と選択します。
メニューを下にスクロールさせていきOKボタンをクリックします。
空白セルが選択された状態になります(見出しとして扱われているB2セルも残っています)。
ここで、最初の空白セルであるB3セルに、その1つ上のセル番地を入力します。つまり「=B2」と入力すればOKです。
フィルタがかかっている状態だと「最初の空白セル」の番地を間違えやすいので注意が必要です。
確定したら、いま入力したばかりのB3セルの右下にある青いマル(フィルハンドル)を最後の空白セル(B12セル)までドラッグします。
これにより値が入っているセルを書き換えることなく、空白セルだけを「1つ上のセルを参照する式」で置き換えることができます。
空白セルがすべて値で埋まりました。
あとはメニューから「データ」→「フィルタ表示」→「フィルタ表示をすべて削除」と選択してフィルタを解除します。
以上で完了です。
ただし、表内は文字列と関数が混在する状態になっていますので、コピーして「値のみ貼り付け」を行い、すべて文字列に置き換えておくのがよいでしょう。
また、表が複数列にわたる場合は1列ずつ作業しなければならず効率が悪いため、関数を使うやり方の方が簡単です。