• ベストアンサー

Excelの文字数が決まっていない文字列の抽出

教えてください。Excelで、文字数の決まっていない文字列を抽出したいのですが、例えば、 セルA1 : プロジェクト1 簡単な文章 2352 PD_JOK セルA2 : プロジェクト13 複雑な文章列とは決まっていない 2453 AO_JKI ・・・・・・ というセルから、 プロジェクト名から、半角数字前までの文字数が決まっていない文字列「簡単な文章」や「複雑な文章~」をセルB列に抽出する方法を教えていただきたいのですが、 そして、半角数字後の半角英字「PD_JOK」をセルC列に抽出する方法も同時に教えてください。 万単位でデータがあるので、関数を使わないと難しいです。 よろしくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 スペースのない場合を想定しました。 以下は、汎用性がありますので、他にも使用できます。 '----------------------------------------------------------- Function ReReplace(myStr As String, strPattern As String) 'myStr 元の文字, strPattern 正規表現パターン  Dim Matches As Object  Dim Match As Object   With CreateObject("VBScript.RegExp")     .Pattern = strPattern     .Global = False   If .Test(myStr) Then     Set Matches = .Execute(myStr)     Set Match = Matches(0)     If Match.SubMatches.Count > 0 Then      ReReplace = Trim$(Match.SubMatches(0))     Else      ReReplace = Trim$(Match.Value)     End If     Set Match = Nothing     Set Matches = Nothing   End If   End With End Function '-------------------------------------------------------- Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以上のコードを貼り付けて、Alt + Q で、画面を閉じます。 ワークシートに戻ったら、 「プロジェクト1 簡単な文章 2352 PD_JOK」 (スペースがあるなしは関係がありません) 抜き出し; 簡単な文章 =REREPLACE(A1,"\d([^\d]+)") 抜き出し; PD_JOK =REREPLACE(A1,"\d{4}([^\d]+)$") \d は、数字のこと [^\d] は、非数字 なお、万単位ある場合は、コピーして、値貼り付けで、定数化して、数式は取り除いたほうが、ワークシートは軽くなります。

kaishi0823
質問者

お礼

助かりました。ありがとうございました。遅くなってすいませんでした。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • NCU
  • ベストアンサー率10% (32/318)
回答No.6

データ-区切り位置でスペースを区切り文字としてバラしてからお好きなように処理すればよろしいのでは?

kaishi0823
質問者

お礼

助かりました。ありがとうございました。遅くなってすいませんでした。

すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

区切り位置がスペース、半角英字が6桁として、異化の方法は如何でしょうか。 B1に=MID(A1,1,FIND(" ",A1,FIND(" ",A2,1)+1)-1) C1に=RIGHT(A1,6)

kaishi0823
質問者

お礼

助かりました。ありがとうございました。遅くなってすいませんでした。

すると、全ての回答が全文表示されます。
noname#204879
noname#204879
回答No.3

C1: =MID(A7,FIND("!",SUBSTITUTE(A7," ","!",3))+1,99)

kaishi0823
質問者

お礼

助かりました。ありがとうございました。遅くなってすいませんでした。

すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

最後の文字列が6桁で統一なら C1=RIGHT(A1,6) 桁数が固定でなく、区切り位置が半角スペースの4番目の文字列なら C1=RIGHT(A1,LEN(A1)-FIND("!",SUBSTITUTE(A1," ","!",3)))

kaishi0823
質問者

お礼

助かりました。ありがとうございました。遅くなってすいませんでした。

すると、全ての回答が全文表示されます。
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

プロジェクト1_簡単な文章_2352_PD_JOK ↑で『_』で示した所は、半角スペースですか?もし、半角スペースと決まっているなら、 セルB1: =LEFT($A1,FIND("_",$A1,FIND("_",$A1)+1)-1)    (←『_』は半角スペース。ご質問の『_』が全角スペースなら全角スペースに置き換えてください。) セルC1: =RIGHT($A1,LEN($A1)-FIND("_",$A1,FIND("_",$A1,FIND("_",$A1)+1)+1))    (同上) 『find("文字列",A1,文字数)』は、セルA1の左端から数えた『文字数』で示された文字位置から『文字列』を探して、見つかると、その『文字列』の左端から数えた文字数を返します。(文字数が1のときは省略可)

kaishi0823
質問者

お礼

助かりました。ありがとうございました。遅くなってすいませんでした。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう