[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特殊記号を含む文字の抜き出し方法』(yu_mama)
1つのセルにブランクで区切られている不規則な文字列があります。その不規則な文字列に 括弧が()含まれている文字列を抜き出したいと思います。どんな方法があるでしょうか。 例
12 222 ASD8(HHH)NJ 111 2219 0.5 NN 234W SS(112) 222 1098 AA 123(TTT) 123 22 222222222 A(A) 1233 ↓
ASD8(HHH)NJ SS(112) 123(TTT) A(A)
すご〜く、長い式ですが、、、 もう少し何とかできそうな気がしますが、たたき台程度に・・・
A B 1 12 222 ASD8(HHH)NJ 111 2219 ASD8(HHH)NJ 2 0.5 NN 234W SS(112) 222 1098 SS(112) 3 AA 123(TTT) 123(TTT) 4 123 22 222222222 A(A) 1233 A(A)
B1 =MID(A1,MAX(IF(MID(A1,ROW(INDIRECT("A1:A"&FIND("(",A1))),1)=" ",ROW(INDIRECT("A1:A"&FIND("(",A1))),""))+1, MIN(IF(MID(A1,ROW(INDIRECT("A"&FIND(")",A1)&":A"&LEN(A1))),1)=" ",ROW(INDIRECT("A"&FIND(")",A1)&":A"&LEN(A1))),"")) -MAX(IF(MID(A1,ROW(INDIRECT("A1:A"&FIND("(",A1))),1)=" ",ROW(INDIRECT("A1:A"&FIND("(",A1))),""))-1) ↑配列数式 Ctrl + Shift + Enter で確定。 { 数式 }になればOK。
(キリキ)(〃⌒o⌒)b
さすがキリキさん。自分は数式を放棄して、ユーザー定義関数を 作ってみました。下記コードを標準モジュールにコピー、 B1セルには、=test(A1) と入力します。 (純丸)(o^-')b
Function test(hani As Range)
Dim k1 As Integer Dim k2 As Integer Dim s1 As Integer Dim s11 As Integer Dim s2 As Integer Dim mydata As String
mydata = hani.Value
k1 = Application.WorksheetFunction.Find("(", mydata, 1) k2 = Application.WorksheetFunction.Find(")", mydata, 1)
Do If s1 > k1 Then s1 = s11 Exit Do End If s11 = s1 s1 = Application.WorksheetFunction.Find(" ", mydata, s1 + 1) Loop
s2 = s1 Do If s2 > k2 Then Exit Do s2 = Application.WorksheetFunction.Find(" ", mydata, s2 + 1) Loop
test = Mid(mydata, s1 + 1, s2 - s1 - 1)
End Function
私も数式で処理するものを試しに作成してみましたが、どうでしょう? (LOOKUP)
=REPLACE(LEFT(A1,FIND(" ",A1&" ",FIND(")",A1&")"))-1), 1,FIND("!",SUBSTITUTE(A1," ","!", MAX(1,LEN(LEFT(A1,FIND("(",A1&"(")-1)) -LEN(SUBSTITUTE(LEFT(A1,FIND("(",A1&"(")-1)," ",))))&"!"),)
懲りずに、また挑戦!!
=MID(MID(A1,LOOKUP(FIND(")",A1),IF(MID(A1,ROW($A$1:$A$100),1)=" ",ROW($A$1:$A$100)+1,"")),100),1, FIND(" ",MID(A1,LOOKUP(FIND(")",A1),IF(MID(A1,ROW($A$1:$A$100),1)=" ",ROW($A$1:$A$100)+1,"")),100))-1) 配列数式です。
(キリキ)(〃⌒o⌒)b
UDFでもう一つ
Function kakko(txt As String) As String Dim x, i As Integer x = Split(txt) If UBound(x) > -1 Then For i = LBound(x) To UBound(x) If InStr(x(i), "(") > 0 Then kakko = Trim(x(i)) Exit Function End If Next End If End Function
(seiya) 忘れてました。Split関数はExcel2000 からですので、それ以前のバージョンですと 使用できません。(Split関数を作らないといけませんね)
Excel97以前のバージョンには以下を追加
Function Split(txt As String, Optional delim = " ") Dim i As Integer, x As Integer, result(), temp As String Do x = InStr(Trim(txt), delim) If x = 0 Then temp = txt: Exit Do temp = Left(txt, x - 1) ReDim Preserve result(i) result(i) = temp txt = Right(txt, Len(txt) - x) i = i + 1 Loop ReDim Preserve result(i) result(i) = temp Split = result End Function
ダメ、↑こんなにすっきり作っちゃ。 (純丸)(o^-')b ※やっぱり熟練者は違う
みなさん ありがとうございました。色々な方法があるのですね。早速試してみました。バッチリでした。 (yu_mama)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.