• ベストアンサー

Excelで文字列の抽出をしたいので教えてください

Excelで下記の文字列を抽出したいのですがどなたか教えてください 例) - abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出 -- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出したいのですが宜しくお願いします

質問者が選んだベストアンサー

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

>- abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出 =TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",100)),100,100)) >-- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出 =TRIM(LEFT(SUBSTITUTE(TRIM(REPLACE(A1,1,FIND("--",A1,FIND("--",A1)+1)+LEN("--"),))," ",REPT(" ",100)),100))

Ringo7_1
質問者

お礼

ありがとうございます。 上記内容でやってみました。結果問題なく処理できました。 REPT関数は今回初めて使いました。 関数は煩雑になりやすいのですが、短く応用しやすいので助かりました。

その他の回答 (3)

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

エクセルでは文字列の抽出は関数では複雑になる。 そう答えても質問者には、仕様がないかもしれないが、VBAなら素直に考えたとおりコードを組めばできる面はある。 VBAでは変数と言う一時的なデータを次のステップで使えるから。具体的には始めて見つかったスペースなどの位置を次のステップで使えるが、関数では難しい場合が多い。 >先頭の文字が'-'かブランクで任意の文字を取得でブランクの前 例 データ A列  B列(答え) qqq asdf gh asdf wer-ghj erty ghj qwe ertu-dfg ertu B1にユーザー関数で =kiridasi(A1," ") 標準モジュールに Function kiridasi(a, b) a = Replace(a, "-", " ") p1 = InStr(a, b) If p1 = 0 Then kiridasi = 0 Else p2 = InStr(Right(a, Len(a) - p1), b) If p2 = 0 Then p2 = Len(a) + 1 Else End If kiridasi = Mid(a, p1 + 1, p2) End If End Function 参考 関数では =MID(SUBSTITUTE(A1,"-"," "),FIND(" ",SUBSTITUTE(A1,"-"," "))+1,FIND(" ",SUBSTITUTE(MID(A1,FIND(" ",SUBSTITUTE(A1,"-"," "))+1,LEN(A1)-FIND(" ",SUBSTITUTE(A1,"-"," "))),"-"," "))) 色んな場合にこれで正しいか自信がもてない。 ーー エクセルやそのVBAでは、こういう文字列の切り出しには向いてない。 ーー 「正規表現」などのことは、ややそれを目指している考えのようなので、今後こういう内容の問題を多用するなら勉強してはどうでしょう。 ーー >-- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出 例 データ --asd--dfg asd asd--ghyj--s ghyj sd--ddf-- ddf B1にユーザー関数 =kiridasi2(A1,"--")  と入れる。 ーー ユーザー関数 Function kiridasi2(a, b) p1 = InStr(a, b) 'MsgBox p1 'MsgBox Replace(a, b, " ", Count:=1) p2 = InStr(Replace(a, b, " ", Count:=1), b) 'MsgBox p2 kiridasi2 = Mid(a, p1 + 2, p2 - (p1 + 2)) End Function VBAのReplace関数には、countという引数で、置き換える文字列の個数を指定出来るので助かる。 エクセル関数には無いようだ。

Ringo7_1
質問者

お礼

ありがとうございます。 Excelを使用していると、知人からもVBAは覚えるべきだと言われます、作業効率をはかるため、この機会にやりたいと思います。 言語はCOBOLのプログラムを作成したことはあるのですが 手始めに何か良いVBAの入門書があれば教えてください。

noname#204879
noname#204879
回答No.3

》 任意の文字,桁も不明で2回目の'--'後の・・・ 「任意の文字,桁も不明」なのに「'--'後」と仰ってる!矛盾してませんか? 空白は何個あっても文字列と称さないと仮定すれば、 ご質問の意味は、 左端の文字列の個数が1個なら、1個目の同文字列の直後の文字列を、 左端の文字列の個数が2個なら、2回目の同文字列の直後の文字列を、 左端の文字列の個数が3個なら、3回目の同文字列の直後の文字列を、 左端の文字列の個数がn個なら、n回目の同文字列の直後の文字列を、 ということですか? それとも、左端の文字列は必ず「-」が1個以上あるので、その個数に応じて抽出位置を計算したいと?

Ringo7_1
質問者

補足

ありがとうございます 質問の内容ですが、1番目については、先頭の文字が'-'かブランクで任意の文字を取得でブランクの前までを取得したいのです。2番目めは'-'かブランクで2番目の任意の文字桁数でやはりブランクの前の文字列を取得したいのです。宜しくお願いします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

>- abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出  抽出開始位置は解りましたが、どこまでを抽出すれば良いのかが不明です。  2番目の空白の1文字前まででしょうか?  それとも最初に現れる"xxxx"の2文字前まででしょうか?  それとも最初に現れる"----"の部分から数えて後ろから2番目の空白の1文字前まででしょうか?  質問をなさるのでしたら、条件を明確にして頂く様、御願いします。  取り敢えず、「最初の空白の1文字後から、2番目の空白の1文字前まで」の場合に関して回答させて頂きます。  今仮に、元の文字列がA1セルに入力されているものとしますと、抽出結果を表示させるセルには、次の数式を入力されると良いと思います。 =IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",))>1,MID(A1,FIND(" ",A1)+1,FIND(" ",A1,FIND(" ",A1)+1)-FIND(" ",A1)-1),"") >-- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出  2番目の"--"の後は、"def"ではなく、" def zzz"だと思います。  もしかすると、抽出開始位置は2番目の"--"の後ではなく、2番目の"-- "の後からではないでしょうか?  仮にそうだとしても、どこまでを抽出すれば良いのかが不明です。  例えば、 -- abc -- def ghi zzz jkl という文字列の場合は、どこまでを抽出すれば良いのでしょうか?  " zzz"の直前までと考えて、 def ghi を抽出すれば良いのでしょうか?  それとも、最後の空白の直前までと考えて、 def ghi zzz を抽出すれば良いのでしょうか?  それとも、"-- "の後で最初に現れる空白の直前までと考えて、 def を抽出すれば良いのでしょうか?  此方も、条件を明確にして頂く様、御願いします。  取り敢えず、「2番目の"-- "の直後から、その後で最初に現れる空白の直前まで」の場合に関して回答させて頂きます。  今仮に、元の文字列がA1セルに入力されているものとしますと、抽出結果を表示させるセルには、次の数式を入力されると良いと思います。 =IF(ISNUMBER(FIND(" ",A1,FIND("゛",(SUBSTITUTE(A1,"-- ","゛",2)))+LEN("-- "))),MID(A1,FIND("-- ",A1,FIND("-- ",A1)+1)+LEN("-- "),FIND(" ",A1,FIND("゛",(SUBSTITUTE(A1,"-- ","゛",2)))+LEN("-- "))-FIND("-- ",A1,FIND("-- ",A1)+1)-LEN("-- ")),"")

Ringo7_1
質問者

お礼

上記内容でやってみました。結果がきちんと出せました。 関数のISNUMBERは今回初めて使いました。 いろいろ応用ができそうです。 ありがとうございます。

関連するQ&A

  • Excelにて任意の位置の文字列を抽出したい

    Excelにて任意の位置の文字列を抽出したい セルA1に、あたい1(837,1077,132) セルA2に、あたい2(657,100,32) セルA3に、あたい3(20,10000,888) のような値が入っています。 ここから、132、32、888を取り出したいのですが、どのような式を入れたら良いでしょうか? Right関数だと上記のように桁数が2桁と3桁と混在している場合に抽出できませんでした。

  • Excelでの文字列の結合

    Excelで文字列を結合したいのですが、可能でしょうか? 例えば、セルA1に「abc」、セルB1に「def」と入力し、 それをセルC1に「abcdef」と表示させたいのです。 方法がわからなかったので、 一度txtファイルに変換して保存し、 表示する時にスペースで区切らないようにし表示させたのですが、 うまくいきません。 表示は「abcdef」とキレイに表示されるのですが、 検索コマンドで「abcdef」と入力しても検索されません。 ですので、VLOOKUPなどの関数が使用出来なくて困っています。 どのようにすればいいのでしょうか? よろしくお願いします。

  • Excelで文字列を抽出したい。

    Excelで文字列を抽出したい。 Excelで商品コード一覧を作成しました。 商品コード ABC230 DE120 ABC333 XU203 の様にアルファベット+数値で構成されています。 このアルファベットの部分のみを抜き出したいと考えています。 アルファベットの文字数はバラバラです。 何か便利な関数などありましたら、アドバイスよろしくお願いいたします。

  • 文字列の抽出について

    A列に 500行位の文字列があり、 その行の中から以下を抽出したいです。 ただ、抽出したい文字列は、0123456で始まり、abcdという文字列まで。 しかも改行されています。 ※抽出したい文字列 【A列 0123456 ~ B列 abcd】という文字列 【F列 0123456 ~ B列 abcd】という文字列 A列 0123456 B列 xxxx abcd C列 1111 D列 2222 E列 3333 F列 0123456 G列 xxxx abcd H列 4444 I列 5555 J列 6666 宜しくお願い致します。

  • Excel 2007 マクロ 文字列の抽出について

    Excel 2007 マクロ 文字列の抽出について 元データのB列(番号)に5桁、3桁、7桁の数字が入っています。 その番号をSheet2にコピーして貼り付けます。 貼り付ける際に、5桁、3桁、7桁をそれぞれの列に入れます。 Sheet2のB列(番号2)で400番台はF列(種別)に国産 同じくB列(番号2)で900番台はF列(種別)に外国産 を反映するようにしたいです。 どのようなマクロになりますでしょうか。 サンプルがございましたら、お教えください。

  • 文字列から数値を抽出したいのですが・・。

    文字列から数値(integer型)を抽出したいのですが、うまくいきません。 val関数だと文字の途中の数値が判別できないし、困っています。 よろしくお願いします。 ※以下、文字列と数値の関係です。 ・"文字列" → 抽出したい数値  "0k,abc,5k,abc3.0" → 0530  "abc()_3t" → 3

  • マクロ(複数文字置換)についての質問です。

    現在、ExcelのA列に置換前の文字、B列に置換後の文字が入っているシート(シート名:"辞書")があります。 そのシートを辞書的役割で使用し別のシートの内容を置換したいと考えています(現在候補が1000文字程度あり、1つずつ置換をすることが難しいです) また、完全一致のみの置換、大文字とから小文字の置換も可能にし、件数も何件存在するかわかりません。 例:ABCをabcに変換したい場合、 ○ABC→abc ×ABCDEF→abcDEF のような感じです。 しかし、1つのセルの中に空白がある場合は置換可能とします。 例:ABC DEF→abc DEF このようなことは可能でしょうか? 何卒よろしくお願いいたします。

  • エクセル 文字列の中から数字を抽出する方法

    エクセル 文字列の中から数字を抽出する方法 以前 QNo.5823420 で質問させて頂いたんですが 再度質問させてください。 "オーダー番号"+"半角スペース"+"部品型番"+"半角スペース"+"個数"+"半角スペース"+"部品名" というような文字列の中から個数の数のみを抽出する方法を教えてください。 "文字列"+"半角スペース"+"文字列"+"半角スペース"+・・・と文字列の繋がる数は決まってませんので 個数は何番目のスペースの後にくるかは不定です。 数量の半角"ケ"とその前の半角スペースまでの間の数字を抽出したいです。 例1)文字列 :ABC110 XXYYZZ5566 2ケ ****   抽出文字:2 例2)文字列 :ABC XYZ 5566 DDEE11 3ケ FFGG   抽出文字:3 よろしくお願いします。

  • エクセルで、異なる文字列を抽出するには。

    エクセルで、A1からA10に文字列のデータがあるとします。 10個のセルのデータは「あああ」が4こ「いいい」が3こ「ううう」が2こ「えええ」が1こ順不同であった場合、B1に「あああ」B2に「いいい」B3に「ううう」B4に「えええ」と異なる文字列のみ1個ずつ抽出するにはどうすればいいでしょうか。

  • EXCELで、文字列を任意の文字数毎に分割するには

    ≪やりたい内容と条件≫ ◆EXCELで、文字列を任意の文字数毎に分割したいです。 ◆文字列は、全角・半角・記号を含みます。 ◆1つのセルが半角80桁という制限があり、その上限を超えると、右の次のセルに流し込まれるようにしたいです。(A1は元の文字列1500桁くらい、以降B1,C1,D1,E1・・・という具合に流し込み) ≪試した内容≫ MIDB関数を見つけ挑戦しましたが、1つ目のセルはうまくいきますが、その後が出来ません。例えば、文字列が「・・・・・・abcあいうえお」となっていた場合、B1は「・・・・・・abcあいう」、C1は「 お」(「お」の前は、半角スペース)となります。 何かよい方法はないでしょうか。 一度に出来ないようであれば、A1-B1で残りの文字列が表示できれば、それ以降はまた関数を入れて一つ一つやっていきたいと思っています。 よろしくお願いいたします。

専門家に質問してみよう