回答箱 No.115-1: Excelで会社データを会社/所属に分割したい

      ◆ 質問箱 No.115 質問者:  元山 よし子  2000年09月 224号 P.9
          ◆ 質問箱 目次へ
No.126-1   Excelで会社データを会社/所属に分割したい 回答者
  柏木 秀一
2000年10月
225号 P.13
 基本的にはPIPSもEXCELも同じような手順の処理になります。

  1. データを読み込む。
  2. 先頭に「(株)」があるとどうか調べる。あれば3.、なければ5.にいく。
  3. 会社名と組織名の区切りに使われているスペースがどこにあるか調べる。
  4. スペースの左側と右側を別々に読みこんで表示(出力)する。
  5. (株)がどこにあるか調べる。
  6. (株)を含む左側と含まない右側を別々に読みこんで表示する。
 PIPSではV変数に取りこんで上記のような処理、EXCELでもセルに上記の考えで関数を埋め込んでいきます。今回、EXCELの処理で使う関数を説明していきます。
 IF(条件,条件に合う場合,条件に合わない場合)オートのIF~THEN〜ELSE文と同じ働きです。
 LEFT(データ,文字数) データはセル番地で指定できます。データの左側から指定した文字数を表示(出力)します。
 LEFTB(データ,バイト数)LEFT関数と同じですが、文字数の代わりにバイト数で指定します。漢字は2BYTESで数えます。
 RIGHT(データ,文字数)、RIGHTB(データ,バイト数)LEFT、LEFTBを右側から数えます。
 LEN(データ)データの文字数を表示(出力)します。
 LENB(データ)データのバイト数を表示(出力)します。
 FIND(条件,データ)データの中に条件で指定したものがデータの左側からいくつめにあるかを表示(出力)します。
 FINDB(条件,データ)FIND関数では文字数で数えるがFINDBはバイト数で数えます。

 まず先頭に(株)があるかどうか、調べます。EXCELも検索や置換ではワイルドカードがつかるのですが、IF文の条件では使えませんので、しっかりと先頭の3文字が(株)かどうかを調べます。上記の使い方からA3セルに調べたいデータがあるとして

=IF(LEFT(A3,3)="(株)",先頭が(株)の場合の処理,先頭が(株)でない場合の処理)

となります。セルに関数を埋め込むときに式なのか、単なる文字なのかを区別するために、式ならば関数の先頭に=(イコール)をつけます。また、イコールを付けるのは最初(一番、左側)の関数だけで関数の中に関数を入れる場合、この例ではLEFT関数には=は必要ありません。それからPIPSと同じように文字列の場合は""(ダブルコーテーション)で囲みます。

 先頭が(株)の場合はスペースの位置を探します。式は

FINDB(" ",A3)

でスペースの位置をバイト数で表示(出力)します。このスペースの位置より左側が会社名、右側が組織名になりますので、データ全体のバイト数をLENB関数で取り出し、LEFT関数で会社名、RIGHT関数で組織名を取り出します。先頭に(株)がある会社名は

LEFTB(A3,FINDB(" ",A3)-1)

となります。スペースが17バイト目にあれば会社名は16バイトですから1を引くのがポイントです。同じように先頭に(株)がある場合の組織名は

RIGHTB(A3,LENB(A3)-FINDB(" ",A3))

となります。ここは素直に全体のバイト数からスペースある位置のバイト数を引けば組織名のバイト数になります。組織名に2つ以上のスペースがあっても、FINDB関数はデータの左から調べて最初のスペースの位置(バイト数)を表示(出力)しますので問題ありません。次に先頭に(株)がない場合の会社名、組織名の表示(出力)仕方です。(株)が先頭にある場合はスペースを区切りとしましたが、今度は(株)を区切りとして会社名と組織名に分けるので基本的には上記と同じような考えになります。会社名を表示(出力)させるには

LEFTB(A3,FINDB("(株)",A3)+3)

となります。(株)の位置は頭の"("の位置を出力しますので、株で2BYTES、")"で1BYTEの合計3BYTES分を足す必要があります。組織名は

RIGHTB(A3,LENB(A3)-FINDB("(株)",A3)-3)

となり、やはり3BYTES文の調整が必要です。これらを組み合わせて会社名は

=IF(LEFT(A3,3)="(株)",LEFTB(A3,FINDB(" ",A3)-1),LEFTB(A3,FINDB("(株)",A3)+3))

となり、組織名は

=IF(LEFT(A3,3)="(株)",RIGHTB(A3,LENB(A3)-FINDB(" ",A3)),RIGHTB(A3,LENB(A3)-FINDB("(株)",A3)-3))

となります。組織名はここの説明では2行になっていますが、実際のセルには2行ではなく、一つの固まりになっています。また、今回はBYTE数で処理していますが,単純に文字数でも処理できると思いますが、そのときは調整に気を付けてください。"株)"で3 BYTESの調整を行っていますが、文字数なら2文字で調整します。

 9月例会で簡単に説明したときに同じ(株)でもカッコが1 BYTE(半角)のもの、2 BYTES(全角)のもの、一文字で(株)になっているものがあるので注意が必要では、という指摘がありました。これをEXCELの式の中で対処することもできますが、式がさらに長くなり、わかりにくくなります。そこで、このような場合はEXCELの置換であらかじめ、(株)の表記を一つに統一するのが一番シンプルで簡単ではないかと思います。

 ちょっと見づらいかもしれませんが,画面のハードコピーを表示しておきます。


 一つのセルで一気に処理しようとすると式が長くなりますが,一つ一つを丁寧に分解すれば単純な式の集まりです。もしも分かりづらいときには途中結果を表示(出力)するダミーのセルを使いながら結果を求めることも可能ですので、ぜひともEXCELにも挑戦していただき、PIPS/EXCELの便利なところを使い分けていきましょう。


このページのTOPへ戻る