• 締切済み

文字列の分解

1つのセルに入力された文字列を分解したいのです。 例えばφ20 +0.010/+0.001と有る場合別のセルにφ20、+0.020、+0.001と分解したいのです。 =MID(C1,1,FIND(" ",C1)-1) =MID(C1,FIND(" ",C1)+1,6) =MID(C1,FIND("/",C1)+1,FIND("/",C1)) としているのですが、文字列に” ”や”/”がない場合は#VALUE!となり表示出来ませんし、+0.010の部分の桁が増減すると上手く表示が出来なく成ります。 何かいい方法は無いでしょうか?

みんなの回答

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.5

#4のmaronです ★B1の式を右と下にコピーしてください

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.4

>文字列に” ”や”/”がない場合は#VALUE!となり表示出来ません >+0.010の部分の桁が増減すると上手く表示が出来なく成ります。 ◆とりあえず、上の問題はクリアしています         A             B     C       D 1  φ20 +0.010/+0.001   φ20   +0.010   +0.001 2  φ20+0.010+0.00234   φ20   +0.010   +0.00234 B1=TRIM(INDEX(MID(SUBSTITUTE(SUBSTITUTE($A1,"/",),"+",REPT(" ",50)&"+"),ROW($1:$50)*50-49,50),COLUMN(A1)))

回答No.3

要するに、φの後に数値, 正負符号付き数値, 正負符号付き数値って分け ればいいんでしょ。「データ」→「区切り位置」で、スペースとスラッ シュを区切りに指定するって手口はどうでしょうね。 スペースやスラッシュが無い場合ってのがどういう状態で、どういう風に 区切りたいのか不明なんだけど、大量にあるのならExcelに執着するのは やめて、正規表現の使えるエディタで一気に整形してCSVにでもして読み 込み直すのが手っ取り早くて好きです。愛用のJEditは、 {φ[\d\.]+}.*{[+ー\+\-][\d\.]+}.*{[+ー\+\-][\d\.]+}を\1,\2,\3に 置換しろといえばスペースやスラッシュが欠落してたり符号が1バイトと 2バイトごちゃごちゃだったりしても、全部きれいに分離したCSVを作って くれます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

FIND関数は探索した文字が無いときはISERRORで捉えます。 ーー 次の2点を明確に区別して (区切りの問題) 第2と第3の区切りが、実例では良くわかりません。スペースですか 第1はスペース 第2は/ または/+か? ーー (有無を判別する問題) 有無の捉えるのは 第1はシータ 第2はスペース+「+」 第3は/+ かな。IFのネストでややこしくなるが、関数で不可能ではない。 しかし、小生なら、IFのネストと、関数の文字数が増えるのが嫌いで、VBAでユーザー関数を作るのが好みかな。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

下記のようにすれば#VALUE!と桁の増減に対処できます。 C2=MID(C1,1,FIND(" ",C1&" ")-1) C3=MID(C1,LEN(C2)+2,MAX(FIND("/",C1&"/")-LEN(C2)-2,0)) C4=RIGHT(C1,MAX(LEN(C1)-FIND("/",C1&"/"),0))

関連するQ&A

  • FIND関数の値が#VALUE!の場合の非表示

    エクセルで、セルの値に「virus」の文字列がある場合、「virus」と書く関数をFINDとMID関数で作ってみました。 =MID(C3,FIND("virus",C3),FIND("virus",C3)+4) この式だけだと、FINDの結果が無いときに、「#VALUE!」の文字が出てきます。この「#VALUE!」の文字を非表示にしたいと思い、IF文や条件付書式を試すのですが、「#VALUE!」は、長さ0の文字列””でもNULLでもないため、数式になりません。 良い方法をご存知の方教えてください。 よろしくお願いします。

  • エクセルで日付の文字列のシリアル値化

    E5セルに 2020年7月1日~2021年6月1日 という文字列があります。 AFセルに =IF(E5="","",LEFT(E5,FIND("日",E5))*1) AG5セルに =IF(E5="","",MID(E5,FIND("~",E5)+1,11)*1) として日付をシリアル値で取り出しています。 このエクセルを他の人にわたしたのですが、その方がE5に 2020年8月1日~2021年9月1日 という文字列をコピペしたところ AF5もAG5もVALUEエラーになってしまいました。 最初、入力した文字列の形式が誤っているのではと思って、メールでファイルをおくってもらったのですが、入力形式に問題はなく、VALUEエラーが出ていました。 わたしの端末で、そのセルにカーソルをあて、エンターキーを押すと日付に変わりました。 どのような原因でこうなるのでしょうか? VALUEエラーが出ないようにするのはどうすればいいのでしょうか?

  • 一つのセルの文字列を分解して別のシートへ

    いつもお世話になっております。 一つのセルの文字列を分解して別のシートの指定したセルに一文字ずつ入力したいと考えています。 (例)   A B C  D E       F ・・・・・・・・・・・    AD 1 2014/5/1 ・・・・   2014/5/6・・・・・・・・・・・2014/5/31 2 3               こ 4 5               ど 6 7               も 8                                 9               の 別シートには、祝日の一覧が作成してあり、一つのセル"こどもの日"のように入力してあります。 F1のセルが2014/5/6なので、別シートの祝日データからデータをとばして、F3のセルに"こ"、一つ飛ばしてF5のセルに"ど"、F6のセルに"も"のように自動で入力したいのですが(他の祝日も同じく)、そういったことはマクロで可能でしょうか? よろしくお願いいたします。

  • 文字列の比較

    excelvbaです。(excel2003) 3個のセル(a1,b1,c1)に文字列が入っています。 このそれぞれ文字列の右8桁を比較し、 最小の文字列が入っているセルに色を付けたいのです。 調べたら、minは使えませんし、dminがありましたが、 right(range("A1").value,8)をどう扱うかが分かりません。 出来ましたら、dminでなく他の方法が在ればベターです。 宜しくお願いします。

  • Excel2007のマクロで文字列を分解

    Excel2007のマクロで文字列を分解したいのですがうまくいきません。 1、セルA1からU1までかそれ以上にデータが3つずつ入ってます。 2、1のデータの1つずつをを3列ずつに分解してA3から列上にコピー。 例えば、セルA1あいう、セルB1えおか→ならA3あ、B3い、C3う、D3え、E3お、F3か という具合に。だれかお願いします。

  • VBAでセルデータの転記(文字列)

    VBAでセルのデータを下記のように他のセルに持っていく場合、文字として入れてある数字(例えば先頭に0がつくようなもの)は、自動的に数値に変えられて0が消えてしまいます。 また、長いものは指数表示になってしまい、15桁を超えるものは後ろが0になってしまいます。 持っていく先のセルを文字列に設定しておけばいいのでしょうが、持っていく元データが全て文字列ではなく、数値の場合もあります。 元データが数値であれば数値として、文字列であれば文字列として持っていくにはどうすればいいのでしょうか? Sub test() Cells(3, 3).Value = Cells(1, 1).Value End Sub

  • Excel 文字列の中から不要文字だけを削除したい

    以前にも同様の質問をして賢者の皆様から、ご教授いただき快適に使用しておりました。 今回もちょっと苦労しております。お力お貸しください。 Excel 2007で各セルに文字列として入力されている、中間にあるハイフン以降の3文字を 削除した文字列としたい。 数字は先頭から5桁-3桁となっておりますが5桁-のものもあります。(顧客コード) 最終的に5桁で集計を取れればと思っております。 例: 12345-001 ABC株式会社 98765-有限会社ごお商会 等 -XXXを削除し文字列だけで元のセルにセットしたいです。 きっと前回の応用なのでしょうけど、REPLACEやらMIDやら試しましたが良くわかりませんでした。 よろしくお願いいたします。

  • 文字列検索の参照文字列の指定について

    Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?

  • Excel:数式の前に文字列を書き込むには

    たとえばMID関数を使った場合です。 =MID(C9,38,2) この関数で98という値を返したとします。 =editentry&no=98 こんな感じに数字の前に文字列を付け足してセルに返したいときは、どういった感じに書き込めばいいんでしょうか? ちなみに =editentry&no= この部分は固定です。

  • スペースを含んだ文字列から文字列の抽出

    エクセルバージョン2007 スペースを含む文字列で、A列に文字列がある時、以下の式を組んで文字列を抽出しています。 先頭にIDの数字が有る場合は、それぞれの目的に合った文字列を抽出しています。 B1=LEFT(A1,SEARCH(" ",A1,1)-1) C1=LEFT(MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),SEARCH(" ",MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),1)-1) 3 3df-32654-10 CCCCHH 10 1ab-12345-00 AAABBBB この文字列の場合、B列に3と10が表示、C列に 3df-32654-10 1ab-12345-00が表示されます。 先頭に、IDの無い文字列は以下の様な構成です。 6rt-95132-00 PPPKKK この文字列の場合、B列に6rt-95132-00、C列にPPPKKKが表示されてしまい、この場合、IDの数字が無い場合はB列には表示させない又は、C列に6rt-95132-00させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

専門家に質問してみよう