Friday, 17 July 2020

ExcelのFIND関数で文字の位置を調べLEFT関数で文字を抽出する方法【DTP・InDesign向け】

テキスト整形用関数の紹介第3弾は、文字列内のある文字の位置を知る関数と、ある文字を抜き取る関数となります。

目次

はじめに

  • ある文字の位置を調べるFIND関数
  • 文字列の左端から指定された数の文字を調べるLEFT関数
これらは、テキスト整形においては単独で使用することは余りなく、2つを組み合わせて使用することが多い関数です。

使用する場面は、あるセル中の文字列のある文字の直前までの文字列を抽出する場合です。

具体例として、スペースなどが挿入された、ビル名まで入力された住所の内、ビル名を除いた住所を取り出したい時など。

ではどのように2つの関数を組み合わせて使用するのかを見ていきましょう。

ある文字の位置を調べるFIND関数

FIND関数は、指定された文字列を他の文字列の中で検索し、その文字列が最初に現れる位置を左端から数え、その番号を返します。
FIND 関数では、既定の言語の設定に関係なく、1 バイト文字も 2 バイト文字も、各文字が常に 1 つとして数えられます。

FIND関数の書式は以下の通りです。
=FIND(検索文字列, 対象[, 開始位置])
「検索文字列 」必須。 検索する文字列を指定します。
「対象 」必須。 検索文字列を含む文字列を指定します。
「開始位置」省略可能。 検索を開始する位置を指定します。 対象の先頭文字から検索を開始するときは 1 を指定します。 開始位置を省略すると、1 を指定したと見なされます。
参照:FIND 関数、FINDB 関数 - Office サポート
使用例は以下の通りです。
例1:全角スペース(全角アキ)の位置番号を調べる
A2:山田 花子
=FIND(" ",A2)
結果:3

例2:半角スペース(半角アキ)の位置番号を調べる
B2:東京都港区麻布百番100-100 山田百番ビル
=FIND(" ",B2)
結果:17

例3:ハイフンの位置番号を調べる
C2:000-0000
=FIND("-",C2)
結果:4

文字列の左端から指定された数の文字を調べるLEFT関数

LEFT関数は、文字列の先頭(左端)から指定された数の文字を返します。

LEFT関数の書式は以下の通りです。

=LEFT(文字列[,文字数])
「文字列」必須。 取り出す文字を含む文字列を指定します。
「文字数」省略可能。 取り出す文字数を指定します。
  • 文字数には、0 以上の数値を指定する必要があります。
  • 文字数が文字列の文字数を超える場合、文字列全体が返されます。
  • 文字数を省略すると、1 を指定したと見なされます。
参照:LEFT 関数、LEFTB 関数 - Office サポート
使用例は以下の通りです。
例4:氏名から氏を取り出す。
A2:山田 花子
=LEFT(A2,2)結果:山田

例5:住所から、ビル名を除いた住所を取り出す。
B2:東京都港区麻布百番100-100 山田百番ビル
=LEFT(B2,16)結果:東京都港区麻布百番100-100

例6:郵便番号の上3桁を取り出す。
C2:000-0000
=LEFT(C2,3)結果:000

FIND関数とLEFT関数とを使用して、住所からビル名を除いたものを取り出す

例5:住所から、ビル名を除いた住所を取り出す。
B2:東京都港区麻布百番100-100 山田百番ビル
=LEFT(B2,16)
結果:東京都港区麻布百番100-100
で、LEFT(B2,16)中の文字数「16」は目算で数えた数字です。
何百件、何千件もある住所録で目算で1件ずつ数えるのは非効率も甚だしいのは自明ですね。

では、文字数を効率的に算出できる方法は?
それが、FIND関数とLEFT関数とを使った合わせ技になります。

例5で行ったことは、ビル名付き住所からビル名を除いた住所を抽出すること。

この場合、半角スペース(半角アキ)が目印として使用できます。
ここで、半角スペース(半角アキ)が左から何番目にあるかを見出します。

それを見出すことができるのが、FIND関数なのです。
つまり、例2がまさしくそれに当たります。
例2:半角スペース(半角アキ)の位置番号を調べる
B2:東京都港区麻布百番100-100 山田百番ビル
=FIND(" ",B2)結果:17
結果、半角スペース(半角アキ)は左から17番目にあることが分かります。

そして、ビル名付き住所からビル名を除いた住所は、半角スペース(半角アキ)の直前までですので16文字分あることが分かります。

つまり、
【半角スペース(半角アキ)は左から17番目】-1=【ビル名を除いた住所の文字数】
FIND(" ",B2)-1=16
が成り立つことが分かります。

ということで、LEFT(B2,16)の「16」の代わりに「FIND(" ",B2)-1」を挿入すると、
【ビル名を除いた住所の文字数】=LEFT(B2,FIND(" ",B2)-1)
という式が成り立ちます。

これで、FIND関数とLEFT関数の合わせ技で、目算で数える必要のない汎用的で効率的な式を作ることができました。

具体的な使用例

InDesignで住所とビル名を別の行にしたレイアウトの場合、Excel上で分離して各々別セルにしておくとInDesignへのデータ結合時にきちんと各々の行に配置されて便利なのです。

Excel上で分離せずにInDesifnに流し込んでからビル名を改行させるとなると、何百件何千件も手作業で改行する手間と時間は膨大なものになりますので。









No comments:

Post a comment