- ベストアンサー
VBAのIFステートメントがうまく機能しない問題について
- VBAのIFステートメントがうまく機能しない問題について質問です。
- 実行したコードでは、URLの値が正しいにもかかわらず、成功メッセージが表示されません。
- URLに「#」が含まれる場合のIFステートメントの使い方についてご教示いただけませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> #が曲者のような気がしますが、これ以上わかりません。 ここまでわかったら、もう一捻りでしたね。 比較する式にLike演算子を使っちゃったので、 「#はワイルドカード文字(任意の数字1文字)なんだろう」 と判断してしまったようですね。 なので、 > #があっても、IFステートメントが使えるように これの直接の回答としては If URL = "http://oshiete.coneco.net/mypage#tabs" Then として、#をワイルドカードと見せない方法が一番早いですね。 色々試してみるのが一番です。 例えば Sub test1() Dim URL As String URL = "http://oshiete.coneco.net/mypage2tabs" If URL Like "http://oshiete.coneco.net/mypage#tabs" Then MsgBox "成功!" End If End Sub これは動きます。 Ifで比較する文字列の#の位置が「2」と言う数字1文字だからです。 例えば、代入する文字列を URL = "http://oshiete.coneco.net/mypage12tabs" としてやると、これは動きません。 比較する文字列の#の位置に「12」と数字が2文字、入っていますから。 これを目的通り動かしたいなら、 If URL Like "http://oshiete.coneco.net/mypage##tabs" Then としてやる必要があります。 例えば、代入する文字列を URL = "http://oshiete.coneco.net/mypageAtabs" としてやると、これもやっぱり動きません。 Ifで比較する文字列の#の位置が「A」と言う文字だからです。 文字列も許可するのであれば、 If URL Like "http://oshiete.coneco.net/mypage?tabs" Then として、「任意(文字も数字も含めて)の1文字」としてやらないといけません。 「VBA Like」などで検索すると、噛み砕かれた説明をしてくれているサイトが バシバシヒットしてきますので、参考になさってくださいませ。
その他の回答 (2)
- emanon112
- ベストアンサー率28% (4/14)
正しい使い方か自信はありませんが、以下例文です。 (詳しい方から見ると場繋ぎ的な対処法かもしれません……。) Sub tset1() Dim URL As String URL = "http://oshiete.coneco.net/mypage#tabs" If URL Like "http://oshiete.coneco.net/mypage[#]tabs" Then MsgBox "成功!" End If End Sub 【解説】 Like関数では「*」や「#」がワイルドカードとして扱われるため、「[]」でワイルドカード文字を括ってワイルドカードとして認識させない方法です。 # (任意の1文字の数字 (0-9))を[#]とすることで、[]で括られた文字のどれかという認識のさせ方です。 ここでは#しかくくっていないので、必然的に#が選択されます。 もう少し詳しい[]の使い方の詳細は以下参照ください。 http://www.geocities.jp/cbc_vbnet/kisuhen/enzanshi.html#hikaku
お礼
ご回答ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
意図があってやってるのでなければ、Like演算子なんてわざわざ使わずふつーに If URL = "http://oshiete.coneco.net/mypage#tabs" Then としてください。 #補足 ダメな理由はVBAのヘルプでLike演算子の使い方をキチンと読んでみると、#の文字がパターンマッチングのワイルドカードになっていることが書いてあります。 どうしてもLikeを使いたいなら、#を含んだ文字をどうやって検査したらいいのかもそこに書いてあります。
お礼
ご回答ありがとうございました。
お礼
ご回答ありがとうございました。