• ベストアンサー

文字列検索で・・・

Instr関数で文字列の存在チェックを行っています。 この場合、変数indexに1が入った場合 Instr("aaa1_a.sql","index") <----- この場合問題はないのですが、 Instr("aaa12_a.sql","index") <-----となる場合も値がとれてしまうので どうしたものかと困っています。 うまく検索させる方法はないでしょうか? ちなみに検索する文字列には aaa数字.sql aaa数字_a.sql aaa数字_b.sql というパターンがあります。 どなたかよきアドバイスをいただけませんでしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 検索する文字列を、tempとすると、 Dim i As Long For i = 1 To Len(temp) - (2 + Len(index)) + 1   If Mid(temp, i, 2 + Len(index))) Like "a" & index & "[!0-9]" Then     MsgBox "あり"     Exit For   End If Next i こんな感じでしょうか。

tariran
質問者

補足

こんにちわ。早速のレスありがとうございます。 まことに恐縮なのですが、お返事でいただきましたコードでわからないところ があるので教えていただけませんでしょうか? わからなくって。。。 Len(temp) - (2 + Len(index)) + 1 上記で算出される数値は何にあたるのでしょうか?2と1はどういう意味の加算ですか? If Mid(temp, i, 2 + Len(index))) Like "a" & index & "[!0-9]" Then のLike "a" & index & "[!0-9]"の部分の解釈は? 質問ばかりしてすみません。 よろしくお願いいたします。m(_ _)m

その他の回答 (3)

noname#2009
noname#2009
回答No.4

根本を覆してしまって申し訳ないのですが 比較対象が3種類だけであるのなら、比較文字列の方を "aaa" & Trim(Str(index)) & ".sql" "aaa" & Trim(Str(index)) & "_a.sql" "aaa" & Trim(Str(index)) & "_b.sql" の3種類にして、=(イコール)比較した方が早いと 思われます。そうゆうこっちゃないのであれば 失礼します。

tariran
質問者

お礼

アドバイスありがとうございました。 数値部分を取得して、イコール比較することにしました。 ありがとうございました。

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.3

良くわかんないですけど、変数indexで指定されているのが個体と言うことなんでしょうか? それなら、パターンからの回答で以下の方法はどうでしょう。 dim lFind as long index = 1 lFind = Instr("aaa1_a.sql", index) if lFind > 0 and mid("aaa1_a.sql", lFind + 1, 1) = "." then   msgbox "OK!" else   msgbox "NG!" end if

tariran
質問者

お礼

ご回答ありがとうございました。 結局数値部分を取り出して、イコール比較することにしました。 お手数おかけしました。ありがとうございました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

もう文字列のパターンが決まっているのであれば、数字の部分を切り出してしまうのがいいのでは? 先頭のaaa(プレフィックス)さえ消してしまえばValで数値に変換できます。 If Val(Mid(SQLファイル名,プレフィックスの長さ)) = index Then MsgBox "一致" Else MsgBox "不一致" End If

tariran
質問者

お礼

アドバイスありがとうございます。 数値の部分を切り出してイコールで比較するようにしました。 ありがとうございました。