Excel

Excelで数字のみを抽出する関数、文字のみを抽出する関数

よくあるお悩み

Excelでセルから数字のみを抽出したい、文字のみを抽出したい。
既存の関数だけでは、数字や文字の量が変わると対応できない。
VBAはよくわからないから、手っ取り早く関数を教えて!

これ、配列数式と関数を組み合わせだけで、簡単に解決できます。
(数字や文字の長さが一定であれば、LeftやRight関数だけを使えばラクです)

いきなり答え

例えばA1(数字+文字)がある場合、A2(数字のみ),A3(文字のみ)のように自動で出力したい時。

@Excel2010
A1 = "50mg" 
A2 = 50
A3 = "mg" 

以下の関数で、数字だけ/文字だけを抽出できます。

@Excel2010
A1 = 50mg ;元データ
A2 = LOOKUP(10^17,LEFT(A1,COLUMN($1:$1))*1) ;A1から数字のみ"50"を抽出
A3 = SUBSTITUTE(A1,A2,"") ;A1から文字のみ"mg"を抽出

解説

巷にはこの関数の解説が少ないので、ここで解説します。

数字のみを抽出する関数

@Excel2010
A2 = LOOKUP(10^17,LEFT(A1,COLUMN($1:$1))*1) ;A1から数字のみ"50"を抽出

3つの関数が入り組んでいます。LEFT関数に1を乗じているのもポイントですね。

関数の動きを、ひとつひとつ見ていきましょう。

COLUMN($1:$1) ;配列数式
;1から256までの連続した数字が入る単純な配列。
;INDEX(配列,n)で、配列n番目のデータが見れます。中身を確認した結果は以下の通り。
;INDEX(COLUMN($1:$1),1)=1
;INDEX(COLUMN($1:$1),2)=2
;INDEX(COLUMN($1:$1),256)=256

ここまでは、(1,2,3・・・,256)というただの配列です。
次に元データ(A1セル)にアクセスします。

LEFT(A1,COLUMN($1:$1)) ;配列数式
;元データが入るA1セルを、配列番号の数分だけ左から切り出した配列。
;INDEX(配列,n)で、中身を確認した結果は以下の通り。
;INDEX(LEFT(A1,COLUMN($1:$1)),1)=5
;INDEX(LEFT(A1,COLUMN($1:$1)),2)=50
;INDEX(LEFT(A1,COLUMN($1:$1)),3)=50m
;INDEX(LEFT(A1,COLUMN($1:$1)),4)=50mg

元データから文字データを切り出しました。すべて"文字データ"の扱いなので、これをうまく利用します。

LEFT(A1,COLUMN($1:$1))*1)  ;配列数式
;配列へ1を掛けることで、"文字データ"を"数字データ"にします。
;INDEX(配列,n)で、配列n番目のデータを見れます。中身はこんな感じでした。
;INDEX(LEFT(A1,COLUMN($1:$1))*1,1)=5
;INDEX(LEFT(A1,COLUMN($1:$1))*1,2)=50
;INDEX(LEFT(A1,COLUMN($1:$1))*1,3)=#VALUE
;INDEX(LEFT(A1,COLUMN($1:$1))*1,4)=#VALUE

文字データ配列へ1を乗じたことで、数字データだけ残りました。

LOOKUP(10^17, 配列)
;配列の最後にあるデータを返します。
;10^17は、超大きい数字の意味。
;今回、最後の配列は[2]です。50が入っていましたね。
;10^17,LEFT(A1,COLUMN($1:$1))*1=50

一番桁数が大きい配列を取り出せました。これで数字のみの抽出は完了。

文字のみを抽出する関数

@Excel2010
A3 = SUBSTITUTE(A1,A2,"") ;A1から文字のみ"mg"を抽出

こちらは簡単です。

SUBSTITUTE(A1,A2,"")
;元データから数字を除きます。

"50mg"から50を除いて、"mg"が残りました。これで文字のみの抽出は完了。

応用例

関数で単位を抽出したい場合に便利ですね。使い回しも利きます。単位がわかれば、CONVERT関数で単位合わせもできますよ。

例1: 10Mドル vs 100百万円、100mg vsと0.1g、どちらが大きい?などを自動処理
例2: M$10, €100を比較(単位の文字が左側にあるので、LEFT関数ではなくRIGHT関数を使えばOK)

参考

こちらも参考にしてください。

office 並行輸入 2013 のおすすめ安く手に入れよう! | 五六郎
http://jp.gorocro.com/hikaku_office.html

正規品を並行輸入品して日本語化すれば、お安くofficeが手に入ります。

一番下のデータを取得する LOOKUP関数
http://www.relief.jp/itnote/archives/003450.php

誰がはじめに見つけたのかわかりませんが、Excelを使いこんでいる方の間では結構有名な、「裏ワザ」といっていい方法です。

おわり