Excelによるゼロサプレス(zero zero suppress)、その周辺の話題(Excelの"暗黙の型変換"やCSVの取り込み)

<a href="https://qiita.com/to19830321/items/92358ff3cdd7b4223a59">Excelによる0埋め</a> でも書いた通り、Excelで0埋めをするのは何通りかの方法があり、値が数値かそれ以外かで方法はほぼ決まっていた。
では逆に0を排除する場合（ゼロサプレス）の場合はどうか、というのが今回の話題。

# ゼロサプレスとは
基本的には0を取ることなので、例えば「0123」→「123」とすることを言う。ただ、ゼロサプレスを使わないといけない場面ってそんなにあるのか、というのはありそう。
また、ゼロサプレスをしてはいけない場面がいくつか存在する。例えば
・電話番号
・郵便番号
・後続の工程で、一定の文字数を前提にしている場合
など。
後述するが、Excelの仕様で「気づかずに0が消えていた!」ということは往々にして起こりがちなので、むしろゼロサプレスをしないようにすることを意識したほうがいいのかもしれない。

# ゼロサプレスの方法
Excelによるゼロサプレスの方法は、基本的に数値に対してしかできない。
(0埋めの場合と異なり、アルファベット交じりの文字列のゼロサプレスの方法はケースバイケース。例えば、「文字数が一定」なら単純にRIGHT関数を使えばいいし、「アルファベットがある文字より右側を取り出す」といった処理であれば、最初にアルファベットが来るのが何文字目かを調べることになる）

## 方法1.数式で"0"を足す or "1"を掛ける
Excelでは、「数値に見える文字列」に対して数式を組むと、自動的に数値に置き換えて処理するという性質がある。このため、"0"を足すか"1を掛けることにより、勝手に数値に変換され、ゼロサプレスが行われる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/d8776b63-1dc4-2a77-d409-49a44d62cc3c.png)

## 方法2.「形式を選択して貼り付け」を活用する
上記のテクニックを応用して、「形式を選択して貼り付け」を活用することも可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/d1d86c68-7d6f-3151-303d-0c8cc602351a.png)
「形式を選択して貼り付け」には、「演算」というオプションがある。
普通の貼り付けであれば、コピー元のセルをそのまま貼り付けるが、この「演算」オプションを使うと、「ある数値を加減乗除」することが可能となる。
このテクニックを使って「0を加算」すれば、自動的にゼロサプレスされた数値となる。
具体的な手順は以下の通り。

**STEP1** 空白セルをコピーする。(空白セルは、"0"と扱われる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/255c1458-bf4e-7d09-294b-1a13aba4b110.png)

**STEP2** ゼロサプレスしたいセルを選択し、「形式を選択して貼り付け」→「貼り付け=値」「演算=加算」とする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/30f2cc25-ca9f-fd49-97eb-06df96e2c37e.png)

すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/b24332c7-bf45-bcca-830a-7f9041b31ad8.png)
ゼロサプレスされている。(数値に変換されただけ、ともいえる)

なお、この方法は元の値を上書きしてしまうので、元の値を保持したい場合には使えない。

# Excelの"データ型の暗黙変換"
プログラミングをかじったことがある方ならご存じだと思うが、データには「型(データ型)」というものが存在する。
今回のテクニックは、「数値に見えるものは勝手に数値だと思って計算する」というExcelの仕様を使ったものだが、これをプログラミング用語などでは「暗黙の型変換」という。
（参考：Wikipedia「<a href="https://ja.wikipedia.org/wiki/%E5%9E%8B%E5%A4%89%E6%8F%9B">型変換</a>」)

この型変換は、例えば以下のことが可能。
・「bool型(TRUE/FALSEで与えられるもの）」を「数値」に変換
・「文字列に見える数値」を「数値」に変換
・「数値」を「文字列」に変換

但し、関数の中では型変換は行われないので注意が必要。
例えば、以下の事例だと、B5セルは「"0123"と"0077"の合計で200」とはならない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/0da1660e-b4b2-06fa-41b5-139ab82c34c9.png)
これは、SUM関数が「文字列は無視する」という仕様になっているため。
足し算とは違い、"0123"と123は別物として扱われる。

# CSVの取り込みにおける型変換
ExcelでCSVを取り込む際の留意点は結構有名な話ではあるが、改めて記載しておく。

## ExcelによるCSVの取り込み方法
そもそも、ExcelではCSVの取り込み方法が2通りある。

### 1.普通のExcelと同じように「ファイルを開く」から読み込む
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/af1e74c2-933f-865b-cdfe-f7cc2c05ae8b.png)
この方法で開くと、数値に見えるものは自動的に数値に置き換わってしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/21820c9b-d676-9e82-a22c-539d46ca686e.png)

### 2.「データの取得」からCSVファイルを読み込む
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/cdbff234-bec1-4454-a78e-b7b09adcbe6b.png)

CSVのデータのまま取り込むためには、この後の画面で「データ型検出」のプロパティを「データ型を検出しない」にしておく必要がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656619/3bc2e5b2-7c06-d168-adeb-13bad52488a0.png)

また、詳細な設定をするためには「データの変換」を押して設定する必要がある。