- ベストアンサー
Excelの文字数が決まっていない文字列の抽出
教えてください。Excelで、文字数の決まっていない文字列を抽出したいのですが、例えば、 セルA1 : プロジェクト1 簡単な文章 2352 PD_JOK セルA2 : プロジェクト13 複雑な文章列とは決まっていない 2453 AO_JKI ・・・・・・ というセルから、 プロジェクト名から、半角数字前までの文字数が決まっていない文字列「簡単な文章」や「複雑な文章~」をセルB列に抽出する方法を教えていただきたいのですが、 そして、半角数字後の半角英字「PD_JOK」をセルC列に抽出する方法も同時に教えてください。 万単位でデータがあるので、関数を使わないと難しいです。 よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 スペースのない場合を想定しました。 以下は、汎用性がありますので、他にも使用できます。 '----------------------------------------------------------- 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] は、非数字 なお、万単位ある場合は、コピーして、値貼り付けで、定数化して、数式は取り除いたほうが、ワークシートは軽くなります。
その他の回答 (5)
- NCU
- ベストアンサー率10% (32/318)
データ-区切り位置でスペースを区切り文字としてバラしてからお好きなように処理すればよろしいのでは?
お礼
助かりました。ありがとうございました。遅くなってすいませんでした。
- mu2011
- ベストアンサー率38% (1910/4994)
区切り位置がスペース、半角英字が6桁として、異化の方法は如何でしょうか。 B1に=MID(A1,1,FIND(" ",A1,FIND(" ",A2,1)+1)-1) C1に=RIGHT(A1,6)
お礼
助かりました。ありがとうございました。遅くなってすいませんでした。
C1: =MID(A7,FIND("!",SUBSTITUTE(A7," ","!",3))+1,99)
お礼
助かりました。ありがとうございました。遅くなってすいませんでした。
- mshr1962
- ベストアンサー率39% (7417/18945)
最後の文字列が6桁で統一なら C1=RIGHT(A1,6) 桁数が固定でなく、区切り位置が半角スペースの4番目の文字列なら C1=RIGHT(A1,LEN(A1)-FIND("!",SUBSTITUTE(A1," ","!",3)))
お礼
助かりました。ありがとうございました。遅くなってすいませんでした。
- deadline
- ベストアンサー率63% (1239/1943)
プロジェクト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のときは省略可)
お礼
助かりました。ありがとうございました。遅くなってすいませんでした。
お礼
助かりました。ありがとうございました。遅くなってすいませんでした。