• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Like検索で一致した%の中身を解析できますか?)

Like検索で一致した%の中身を解析できますか?

このQ&Aのポイント
  • SQLのあいまい検索で抽出条件 WHERE 項目1 LIKE 'A%B%C' で抽出されたのが 'A1B2C' だとすると、%に該当するのは1と2ですが、これを導き出すことはできますか?
  • パターン文字列 A%B%C と対象文字列 A1B2B3C の場合、1と2B3 または 1B2と3 のいずれか一方が導き出せれば良いです。
  • SQLまたはVBA(Excel、Access)を使用して、1文字ずつ調べることで解析できますが、同じことを他の誰かが行っていないか確認したいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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・・・例外抽出 という関数を用意すれば、シコシコとコードを書く必要はありません。

fxgame1224
質問者

お礼

早速の回答ありがとうございます。 やはり例外処理も考慮に入れると、いくらかはコードを書かないと実現できないんですね。 MyCutStrの使い方はわかりませんでしたが、 CutStrでやっていることは理解できるので流用させてもらいます!

その他の回答 (2)

回答No.3

>事前に標準抽出か例外抽出かを調べた上で >CutStrかMyCutStrを使い分けるのですね。 いや、それは手間でしょう。 今、MyCutStr()は、4番目の引数がなけりゃ《標準抽出》処理に分岐しています。4番目の引数が1であれば《例外抽出》に分岐しています。この所を改善せべきかと思います。 改善1、4番目の引数はなくす。 改善2、《標準抽出》と《例外抽出》の分岐を自動化する  if strCount(Text, Separetor2)=0 Then    標準抽出  Else    例外抽出  End if  このように、区切子が幾つ存在するのかを調べるstrCount()を用意して自動分岐させたがよいかもしれません。まあ、先の補足回答では、そこまでは、質問者の事情もあって踏み込んでいませんが・・・。

fxgame1224
質問者

お礼

No.2のお礼コメントは、回答No.2で提示してもらったコードの使い方について確認したかっただけなので そのまま使おうと考えてるわけではないので大丈夫です。 いろいろ使いやすいように工夫してみます。 回答ありがとうございました。

回答No.2

【補足】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

fxgame1224
質問者

お礼

ありがとうございます。 事前に標準抽出か例外抽出かを調べた上で CutStrかMyCutStrを使い分けるのですね。

関連するQ&A