Excelは表データを扱うには便利なツールですが、すべてのことがやりやすいわけではありません。簡単なようで意外と難しいのが、空白セルをある一定ルールにしたがって穴埋めする作業です。Excel以外でこの作業を簡単に行う方法を紹介します。
上のセルと同じ値で空白セルを穴埋めするには
表データの空白セルを埋める作業は、データサイエンスの世界では、「欠損値の補完」と言われています。
表データの空白(欠損値)を埋める方法には、近傍セルの平均値を入れたり、近傍セルのデータ変化の比率を計算しながら埋めるなど、様々な方法があります。
<欠損値の補完方法の一例>
平均値代入
|
欠損値に対し、観測された標本の値の平均値を代入する
|
回帰代入
|
欠損値に対し、回帰モデルに基づく推定値を代入する。
|
比率補完
|
欠損が発生している項目と他の項目との比率を利用して、代入値を算出する。
|
(出典: 総務省 欠測値の補完に係る主な方法等について)
しかし、一般のビジネスマンには、エンジニアが使うようなこのように高度な欠損値補完は必要ありません。それでも、表データの空欄を一定ルールで埋めたい場合はあります。
例えば以下のような場合です。
発注日と商品名・個数が書かれた表があります。
同じ日に発注されたものは、最初の発注のみ日付が入り、その後のデータには日付が入っていません。
このままでは pivotなどの集計をかけにくいため、すべての行に日付をいれたい場合です。
表: dataA (欠損値あり) | 欠損値がない表 |
これを Excel内の関数で簡単に行うことはできません。
これを行うにはVBAのようなプログラミングが必要になってきます。ただVBAはプログラミングとしては簡単なほうではありません。もっと直感的でわかりやすい方法を探してみます。
この処理を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に やりたいことを日本語で入力すれば、似たようなコード見本が返ってきます。