[[20050926150913]] 『特殊記号を含む文字の抜き出し方法』(yu_mama) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特殊記号を含む文字の抜き出し方法』(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.