- ベストアンサー
エクセル 特定の文字の間を抜き出し
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
セルB3の式 ="【"&TRIM(MID(SUBSTITUTE(SUBSTITUTE($A3,"【",REPT(" ",LEN($A3))),"】",REPT(" ",LEN($A3))),LEN($A3)*((COLUMN(B:B)-1)*2-1),LEN($A3)))&"】" 後は横にコピーしてください。
その他の回答 (3)
- bunjii
- ベストアンサー率43% (3589/8249)
>抜き出したい文字は A列にあり【◎◎◎】 と すみつき括弧に囲まれているんですが、それをB列 、C列、D列に抜き出したいと思います。 A列の文字列にある"【"と"】"の位置を左から順次検出してA列の文字列からMID関数で切り出せば良いでしょう。 1番目の"【"は次の数式で検出できます。 =FIND("|",SUBSTITUTE($A3,"【","|",COLUMN(A3))) 文字の置き換え(SUBSTITUTE関数)で"|"を他の任意の文字に変えても良いのですがA列の文字列に含まれない文字としてください。 1番目の"】"は同様に次の数式で良いでしょう。 =FIND("|",SUBSTITUTE($A3,"】","|",COLUMN(A3))) A列の文字列から【】に囲まれた文字列(【】を含む)を切り出すには次の数式が分かり易いでしょう。 =IFERROR(MID($A3,FIND("|",SUBSTITUTE($A3,"【","|",COLUMN(A3))),FIND("|",SUBSTITUTE($A3,"】","|",COLUMN(A3)))-FIND("|",SUBSTITUTE($A3,"【","|",COLUMN(A3)))+1),"") FIND関数でエラーが発生する場合はIFERROR関数で空欄("")とするようにしてあります。 IFERROR関数はEXCEL 2007以降のバージョンから組み込まれています。
お礼
回答ありがとうございます。 うーん、関数って難解ですね、勉強します! ありがとうございます!
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! VBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, n As Long, cnt As Long, str As String For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row cnt = 1 For k = 1 To Len(Cells(i, "A")) str = Mid(Cells(i, "A"), k, 1) If str = "【" Then cnt = cnt + 1 n = k Do Until Mid(Cells(i, "A"), n, 1) = "】" n = n + 1 Loop Cells(i, cnt) = Mid(Cells(i, "A"), k, n - k + 1) k = n + 1 End If Next k Next i End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。m(_ _)m
お礼
マクロでの回答ありがとうござます。 意味は解らないのですが、使わせて頂きます!
- mshr1962
- ベストアンサー率39% (7417/18945)
B3=IF(LEN($A3)-LEN(SUBSTITUTE($A3,"【",""))<COLUMN()-1,"",MID(LEFT($A3,FIND("|",SUBSTITUTE($A3,"】","|",COLUMN()-1))),FIND("|",SUBSTITUTE($A3,"【","|",COLUMN()-1)),100)) で右に必要分コピー 数式の解説 ■LEN($A3)-LEN(SUBSTITUTE($A3,"【",""))<COLUMN()-1 A3の文字列にある"【"の数をカウントして必要分(COLUMN()-1)ない時は空白表示 ■MID(LEFT($A3,FIND("|",SUBSTITUTE($A3,"】","|",COLUMN()-1))),FIND("|",SUBSTITUTE($A3,"【","|",COLUMN()-1)),100) COLUMN()-1番目の"】"を"|"に置換してFIND関数で位置を求めて、それ以降の文字列をLEFT関数でカット COLUMN()-1番目の"【"を"|"に置換してFIND関数で位置を求めて、それ以前の文字列をMID関数でカット
お礼
わ、解説まで頂きましてありがとうございます。 解説を見ながら理解したいと思います!
お礼
回答ありがとうございます。 一発解決、とても気持ちが良い回答でした。 感謝いたします、ありがとうございました!