2016-09-08 5 views
0

通常、CMB1.I2.CB3.str01/02 +または01-02.01 +またはその設定のランダムなバリエーションとしてデータがあります。最悪のケースはAR1.IN2.CM3.ST04/05 +です。excel 2010可変長テキスト文字列のセクションを解析します

現在、私は列A2-A1000、列B、C、Dなどで完全な文字列データを持っています。部分ごとに完全な文字列を分離しようとしています。私はexcelでleft , mid, len and search関数を使用して文字列を区切ります。ユーザーに区切り文字を入力させることで(この場合はすべてですが、時には - 、/など)ので、私の式は、この例AR1.IN2.CM3.ST04/05+を使用して、この

のように見えるが、セルA5およびセパレータ/ deliminatorである細胞B2 - D2

A5である(の):AR1.IN2.CM3.ST04/05+
A6:A1.I2.CM3.ST06/07-
A7:01.03.4.8/9+

B5:B5内AR1
EQ:=LEFT(A5,SEARCH($B$2,A5,1)-1)

C5:C5でIN2
EQ:=MID(A5,LEN(B5&$B$2)+1,SEARCH($C$2,A5,LEN(B5&$B$2)+1)-LEN(B5&$B$2&$C$2))

D5:D5でCM3
EQ:=MID(A5,LEN(B5&$B$2&C5&$C$2)+1,SEARCH($D$2,A5,LEN(B5&$B$2&C5&$C$2&$D$2)+1)-LEN(B5&$B$2&$C$2&C5&$D$2))

E5:E5におけるST04/05 +
EQ:=RIGHT(A5,LEN(A5)-LEN(B5&$B$2&C5&$C$2&D5&$D$2))

私の方程式が正常に動作私はもっ​​と簡単な方法があると思っていたのですか?私はそれぞれの式は、あなたの数式を短くするために

+0

あなたは何を使い終わったのですか? –

答えて

1

をやっていることを彼らに説明しようとするときの目はあなたが、可能性がオーバー釉私の同僚:

  1. は、第一、第二、などの場所を保存ヘルパーの列を追加します。あなたのセパレータの出現。これにより、多くの読み書きが省かれますが、ほとんどの場合、数式をはるかに読みやすく理解しやすくなります。 これはプログラミングの重要な概念です。私はExcelの式もこのルールに従うべきだと考えています。
  2. 文字列の部分を部分的に削除したヘルパー列を追加します。これらは隠され、グループ化され、そして/または非常に狭いので、気にしないかもしれません。 SUBSTITUTEおよびFINDがここで便利です。
  3. VBA関数Splitを使用します(部分的にの式領域を残します)。私はこれをとても好きで、私はそれをUser Defined Formulaで頻繁に使います。
  4. テキストを列に使用する(完全にの式領域を残します)。

あなたの同僚は正常に戻って行くだろうに見える...

+0

データが分割されている列の上に区切り文字があります。それらは数式中のロックされたセルです。私はこのステップの周りを走るVBAコードを大量に持っています。私はそれを数式として残しました。私の同僚がそれを調整する必要があったならば、数式でできるようになりました。私は分割vba関数を調べます。私はすでにシートの側面にオフヘルパーの列を持っている –

1

容易にアプローチ。列のデータでは、B1には、次のように入力します

=TRIM(MID(SUBSTITUTE($A1,".",REPT(" ",999)),COLUMNS($A:A)*999-998,999)) 

コピーし、この全体と下向きの両方を。たとえば:

enter image description here

これは、「テキストツー列」のような、しかし式です。

+0

これは確かにきれいな公式です。私がセル参照に '' ''を変更すると、何も壊れないと仮定しています。セパレータはしばしば '.'ですが、文字通り任意の文字にすることができます。私は解決策を持っていると、これを取り乱し、結果を投稿します。 –

+0

非常に良い方法です! –

+0

この方法の唯一の問題は、何らかの理由で区切り記号が ' - '記号である場合、式は文字列の最後から - を省略することです。前に言及していないかもしれませんが、最後の「+」と「 - 」は極性であり、追跡する必要があります。そうでなければ素晴らしいフォーミュラ。 –

関連する問題