62
78

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-03-26

よくあるお悩み

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)

参考

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

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

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

おわり

62
78
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62
78

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?