スペースで区切られた文字列の後半を取り出す方法は?

Question 13.1   Previous Next
エクセルのセルに下記のような形でデータが入っております。
        A列      B列    …
   1行  AAA N-001  BBB N-012  …
   2行  AAA N-011  BBB N-014  …
   3行  AA VA-104  BB VA-084  …
   4行  AA VA-144  BB VA-119  …
          :        :
セルの中には、2種類のデータを合わせて、種別AAAと番号N-001というような内容になっており、その間はスペースで区切られております。
このデータをすべて番号だけにしたいのです。つまり、マクロ・VBAを使って、セルの中のある一部分の値を、削除したいのです。
削除したい値(データ)は8種類くらいあり、1文字から5・6文字まで、文字数も バラバラです。
一括で削除できなくとも、削除したい値の種別に、何回かに分けて行う方法でも構いません。ただ、データが20万件ほどあるので、できればマクロでやりたいのです。
あるいは、マクロでできない場合は、セルの表示形式のユーザー定義で、任意の文字列を非表示にする方法があれば、教えてください。
Answer   Copyright (C) 1998.12.1 永井善王
いろいろな方法が考えられます。ポイントとしては、対象データ量が多いので、処理速度が重要になります。また、エクセルシートの最大行数と、パソコンのメモリ容量も関係が出るでしょう。
ここでは、データのレイアウトの全貌が不明のため(1件の項目数など)、質問の「番号だけにする」ことに的を絞ってお答えします。

1) 元データの種別と番号の間に、スペースが1個だけあるならば、そのスペースが「先頭から何文字目」にあるのかを探します。
2) その文字列の「文字数」を調べます。
3) 「文字数」から「先頭から何文字目」を差し引くと、「番号の文字数」が出ます。
4) その文字列の右端から、「番号の文字数」分の文字を取り出します。
番号取り出し


 (注)
・わかりやすく説明するために、C列とD列の式を分けましたが、実務では1つにまとめてください。

・元データのB列に対する式は、A列に対する式と同様てすから省略しました。
もう、おわかりかも知れませんが、あらかじめ上図のように計算式を埋め込んだシートを作っておき、元データのシートからキー部分をこのシートのA列に写せば、D列に答えが出ます。
数千件のデータとか少量データの場合は、マクロを組む必要は少ないでしょう。質問のケースは「20万件もある」とのことですので、マクロとしては、
1) 元データのA列をそっくりコピーして、計算式を埋め込んであるシートのA列に貼りつける
2) 元データ全体を、変換結果(答)を格納するシートに複写する
3) 計算式を埋め込んであるシートのD列をコピーして、変換結果を格納するシートのA列に値だけ貼りつける。
以上の機能だけで、済むと思います。

ただし20万件もあると、1枚のシートに全データが入っているのではないでしょうから、数回に区切って反復処理する工夫が、必要になると思います。
絶対してはいけないことは、1件づつ順に番号を取り出して、20万回ループさせるという古来の手法です。処理時間のムダは大きな損失ですし、せっかくエクセルを使っているのですから、エクセルの機能を活用して、すばやく処理しましょう。
では、頑張って組んでみてください。ご成功を祈ります。

 

Excel VBA Macro