上のセルと同じ値で空白セルを穴埋めするには?|脱Excel プログラミング

脱Excel プログラミング 脱Excel
Excelは表データを扱うには便利なツールですが、すべてのことがやりやすいわけではありません。簡単なようで意外と難しいのが、空白セルをある一定ルールにしたがって穴埋めする作業です。Excel以外でこの作業を簡単に行う方法を紹介します。
スポンサーリンク

上のセルと同じ値で空白セルを穴埋めするには

表データの空白セルを埋める作業は、データサイエンスの世界では、「欠損値の補完」と言われています。
表データの空白(欠損値)を埋める方法には、近傍セルの平均値を入れたり、近傍セルのデータ変化の比率を計算しながら埋めるなど、様々な方法があります。
<欠損値の補完方法の一例>
平均値代入
欠損値に対し、観測された標本の値の平均値を代入する
回帰代入
欠損値に対し、回帰モデルに基づく推定値を代入する。
比率補完
欠損が発生している項目と他の項目との比率を利用して、代入値を算出する。
しかし、一般のビジネスマンには、エンジニアが使うようなこのように高度な欠損値補完は必要ありません。それでも、表データの空欄を一定ルールで埋めたい場合はあります。
例えば以下のような場合です。
発注日と商品名・個数が書かれた表があります。
同じ日に発注されたものは、最初の発注のみ日付が入り、その後のデータには日付が入っていません。
このままでは pivotなどの集計をかけにくいため、すべての行に日付をいれたい場合です。
表: dataA (欠損値あり)

欠損値がある表

欠損値がない表

欠損値がない表

これを Excel内の関数で簡単に行うことはできません。
これを行うにはVBAのようなプログラミングが必要になってきます。ただVBAはプログラミングとしては簡単なほうではありません。もっと直感的でわかりやすい方法を探してみます。

MATLABでプログラムを書いたら?

以下の記事にも書きましたが、MATLABはその成り立ちから表データの扱いを得意とします。
この処理をMATLABのプログラムで書くと以下のようにたったの5行で済みます。
for i = 2:height(dataA)
 if ismissing(dataA{i,1})
  dataA(i,1) = dataA(i-1,1);
 end
end
まず、プログラムの中のコマンドを簡単に解説します。
height dataAの行数を返します
dataA{i, 1} 表dataAの i行目1列のセルに入っているデータ
ismissing データが空欄であれば1 (Yes), 空欄でなければ 0 (No)を返します
さて、上の5行のプログラムの中身について説明します。
このプログラムの各行では、以下のような作業をしています。
for i = 2:height(dataA)
iが2行目からdataAの最後の行まで繰り返す
 if ismissing(dataA{i,1})
もし i行1列のデータが空欄なら
  dataA(i,1) = dataA(i-1,1);
i行1列に (i-1)行1列のデータ(前の行のデータ)を入れる
 end
次の行へ
end
おわり
もっとも昔と違って今では、プログラミングをするのに、分厚い本を読む必要も、これらのコマンドを一つ一つ覚える必要はありません。
ChatGPTやGeminiのような生成AIに やりたいことを日本語で入力すれば、似たようなコード見本が返ってきます。
脱Excel
スポンサーリンク