- ベストアンサー
文字列検索で・・・
Instr関数で文字列の存在チェックを行っています。 この場合、変数indexに1が入った場合 Instr("aaa1_a.sql","index") <----- この場合問題はないのですが、 Instr("aaa12_a.sql","index") <-----となる場合も値がとれてしまうので どうしたものかと困っています。 うまく検索させる方法はないでしょうか? ちなみに検索する文字列には aaa数字.sql aaa数字_a.sql aaa数字_b.sql というパターンがあります。 どなたかよきアドバイスをいただけませんでしょうか? よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。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 こんな感じでしょうか。
その他の回答 (3)
根本を覆してしまって申し訳ないのですが 比較対象が3種類だけであるのなら、比較文字列の方を "aaa" & Trim(Str(index)) & ".sql" "aaa" & Trim(Str(index)) & "_a.sql" "aaa" & Trim(Str(index)) & "_b.sql" の3種類にして、=(イコール)比較した方が早いと 思われます。そうゆうこっちゃないのであれば 失礼します。
お礼
アドバイスありがとうございました。 数値部分を取得して、イコール比較することにしました。 ありがとうございました。
- BlueRay
- ベストアンサー率45% (204/453)
良くわかんないですけど、変数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
お礼
ご回答ありがとうございました。 結局数値部分を取り出して、イコール比較することにしました。 お手数おかけしました。ありがとうございました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
もう文字列のパターンが決まっているのであれば、数字の部分を切り出してしまうのがいいのでは? 先頭のaaa(プレフィックス)さえ消してしまえばValで数値に変換できます。 If Val(Mid(SQLファイル名,プレフィックスの長さ)) = index Then MsgBox "一致" Else MsgBox "不一致" End If
お礼
アドバイスありがとうございます。 数値の部分を切り出してイコールで比較するようにしました。 ありがとうございました。
補足
こんにちわ。早速のレスありがとうございます。 まことに恐縮なのですが、お返事でいただきましたコードでわからないところ があるので教えていただけませんでしょうか? わからなくって。。。 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