- ベストアンサー
Like検索で一致した%の中身を解析できますか?
- SQLのあいまい検索で抽出条件 WHERE 項目1 LIKE 'A%B%C' で抽出されたのが 'A1B2C' だとすると、%に該当するのは1と2ですが、これを導き出すことはできますか?
- パターン文字列 A%B%C と対象文字列 A1B2B3C の場合、1と2B3 または 1B2と3 のいずれか一方が導き出せれば良いです。
- SQLまたはVBA(Excel、Access)を使用して、1文字ずつ調べることで解析できますが、同じことを他の誰かが行っていないか確認したいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Q、'A1B2C'で'A'と'B'とC'とに挟まれた文字を抽出できますか? A、できますよ。 ただし、 1、'A'と'B'とC'とが必ず存在すること。 2、'A'と'B'とC'とが重複していないこと。 3、'A'と'B'とC'とが順番が固定であること。 が条件です。 >'A1B2B3C' この場合は、"1"は条件に合致しているので簡単です。 が、"1B2"は例外処理となります。 VBAでシコシコとやるしかないと思います。 ということで、条件を満たしているとして・・・。 その場合は、CutStr()で抜き出せます。 Public Function CutStr(ByVal Text As String, _ ByVal Separator As String, _ ByVal N As Integer) As String Dim strDatas() As String strDatas = Split("" & Separator & Text, Separator, , 0) CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function 【補足】敢えて CutStr()で例外を抽出する場合は・・・ ? CutStr(CutStr("A111B222B333C", "A", 2),"B",1) "B" & CutStr(CutStr("A111B222B333C", "A", 2),"B",2) 111B222 ということは、 Function MyCutStr(XXXX,XX,XX,A) AS String ・・・・・ End Funccion A=0・・・標準抽出 A=1・・・例外抽出 という関数を用意すれば、シコシコとコードを書く必要はありません。
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
>事前に標準抽出か例外抽出かを調べた上で >CutStrかMyCutStrを使い分けるのですね。 いや、それは手間でしょう。 今、MyCutStr()は、4番目の引数がなけりゃ《標準抽出》処理に分岐しています。4番目の引数が1であれば《例外抽出》に分岐しています。この所を改善せべきかと思います。 改善1、4番目の引数はなくす。 改善2、《標準抽出》と《例外抽出》の分岐を自動化する if strCount(Text, Separetor2)=0 Then 標準抽出 Else 例外抽出 End if このように、区切子が幾つ存在するのかを調べるstrCount()を用意して自動分岐させたがよいかもしれません。まあ、先の補足回答では、そこまでは、質問者の事情もあって踏み込んでいませんが・・・。
お礼
No.2のお礼コメントは、回答No.2で提示してもらったコードの使い方について確認したかっただけなので そのまま使おうと考えてるわけではないので大丈夫です。 いろいろ使いやすいように工夫してみます。 回答ありがとうございました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足】MyCutStr()について Public Function MyCutStr(ByVal Text As String, _ ByVal Separator1 As String, _ ByVal Separator2 As String, _ Optional P As Integer = 0) As String Dim strReturn As String strReturn = CutStr(CutStr(Text, Separator1, 2), Separator2, 1) If P = 0 Then Else strReturn = CutStr(CutStr(Text, Separator1, 2), Separator2, 1) & Separator2 & CutStr(CutStr(Text, Separator1, 2), Separator2, 2) End If MyCutStr = strReturn End Function
お礼
ありがとうございます。 事前に標準抽出か例外抽出かを調べた上で CutStrかMyCutStrを使い分けるのですね。
お礼
早速の回答ありがとうございます。 やはり例外処理も考慮に入れると、いくらかはコードを書かないと実現できないんですね。 MyCutStrの使い方はわかりませんでしたが、 CutStrでやっていることは理解できるので流用させてもらいます!