質問

教えてください。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] は、非数字

なお、万単位ある場合は、コピーして、値貼り付けで、定数化して、数式は取り除いたほうが、ワークシートは軽くなります。

この回答へのお礼

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

区切り位置がスペース、半角英字が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)

この回答へのお礼

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

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

この回答へのお礼

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

プロジェクト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のときは省略可)

この回答へのお礼

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

このQ&Aは役に立ちましたか?1 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

おしトピにAndroid版アプリが登場

話題のトピックにさくっとコメントできる「おしトピ」に Android版アプリが登場! もっと身近に使いやすくなりました。
今ならダウンロードで話題の掃除ロボットや全天球カメラが 当たるプレゼントキャンペーンも実施中。

このQ&Aを見た人が検索しているワード


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集