VBAのマクロで[と”の意味を教えてください
- VBAのマクロで[と”の意味が分からない状況です。[と”はそれぞれ特別な意味を持っています。
- 作成したマクロの中で、[1-10]のような表記が行われていますが、これは特定の範囲の数字を表すパターンマッチングの一種です。
- 作成したマクロの中での条件分岐の結果、想定と異なる動作が起こっているようです。
- ベストアンサー
[と”の意味を教えてください。
http://okwave.jp/qa/q5945112.html を参考に、 Sub test1() Dim i As Integer i = 2 If i Like "[1-3]" Then MsgBox i & "です" End If End Sub Sub test2() Dim i As Integer i = 2 If i Like "[1-5]" Then MsgBox i & "です" End If End Sub Sub test3() Dim i As Integer i = 2 If i Like "[1-10]" Then MsgBox i & "です" End If End Sub を作ったのですが、 test3はうまく行きません。 意味としては、 iが "[1-10]"の中の数字の間のどれかであれば、 MsgBox i & "です" を表示させたいです。 でも上記のマクロを実行させた結果、 "[1-10]"の中で計算が行われてるのではないかと思います。 だから、test3は、1-10=-9 という事になり、msgboxが反応しないのではないかと思っています。 でもそうすると、test2だって "[1-5]"は、-4になって、i=2とは違う値なのに なぜMsgBoxが反応してしまうのかわかりません。 でもそもそも[と”の意味が分からないのでそこから教えていただけませんか? “の意味、は二つで挟んで文字列にすると思っています。
- u8y787
- お礼率100% (29/29)
- オフィス系ソフト
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です! 前回の投稿で間違いがありました。 >>If i Like "[1-9 10]" Then は10の場合まったく反応しませんね! 仮に1~13までの範囲を無理やりLIKE演算子でやると >If i Like "[1-9]" Or i Like 1 & "[0-3]" Then のような感じでないとダメのようです。 という訳で、今回の質問にあるように 1~10 だと >If i Like "[1-9]" Or i = 10 Then もしくは >If i Like "[1-9]" Or i Like 10 Then といった感じでしょうか? これならわざわざLIKE演算子を使うより、単純に >If i >= 1 And i <= 10 Then の方が簡単ですね!m(_ _)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! LIKE演算子を使う場合 [ ]でくくられている前後に必ずダブルクォーテーションがついています。 すなわち文字列扱いで、「あいまい検索」の場合に使用することが多いと思います。 たとえば A-Z(A~Z) a-z(a~z) 0-9(0~9) といったような感じで・・・ 質問にある"[1-5]"は 「1マイナス5」という意味ではなく、1・2・3・4・5 のどれかと一致すれば「真」となります。 ハイフンでつながっている場合は一文字ずつの検索となりますので、 どうしてもLIKE演算子を使って 1~10までを指定したいのであれば >If i Like "[1-9 10]" Then のようにすれば可能だと思いますが、数値の場合は >If i >= 1 And i <= 10 Then のような感じの方が好ましいのではないかと思います。(←あくまで私的見解です) この程度で参考になりますかね?m(_ _)m
お礼
[]とダブルコクォーテーションはセットなのですか。 1さんと同様andを使うのが良いようですね。 とても参考になりました!ありがとうございました。
- ariseru
- ベストアンサー率56% (930/1659)
>でも上記のマクロを実行させた結果、 >"[1-10]"の中で計算が行われてるのではないかと思います。 > >だから、test3は、1-10=-9 >という事になり、msgboxが反応しないのではないかと思っています。 これはありません。 仮に、そうなっているのなら"[1-5]"の時も1-5=-4という計算をしていなければおかしいですから。 質問者さんがやっている方法で上手く処理されないのはLike演算子の仕様の問題っぽいですね。 "[1-9]"とか"[0-9]"でやってみると何の問題も無く処理されますので、Like演算子で数字を判断する場合、[]の中に入れて判定できるのは一桁の数字までなんでしょうね。 そもそも、何でLike演算子なんかを使っているのかが分かりません。 変数の中身が1~10の範囲なのかの確認ならIf文でも簡単に出来ると思うのですが…… If i>=1 And i<=10 Then 「If i Like "[1-10]" Then」という行を上記のように書き換えるだけで解決しますよ。
お礼
難しいですが >Like演算子で数字を判断する場合、 >[]の中に入れて判定できるのは一桁の数字までなんでしょうね。 が理由のようですね。 andを使うのが良いようですね。ありがとうございました。
関連するQ&A
- 「1から5の間なら」とするには?
「1から5の間なら」とするには? エクセルvbaです。 Sub test1() Dim i As Integer i = 1 If i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Then MsgBox "1-5までのどれかです" End If End Sub は、最大でも5なので手入力でできますが、 これが1から100までならor演算子で繋ぐのは大変なので Sub test2() Dim i As Integer i = 1 If i = [1-5] Then MsgBox "1-5までのどれかです" End If End Sub みたいなことをやりたいのですが、うまくいきません。 デバッグしてもエラーにもなりません。 自分でコードを書いといて聞くのもおかしいですがtest2の意味と、表題の方法を教えてください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- iと言う変数の値が1から10の間にないならば
「iと言う変数の値が1から10の間にないならば」、としたいのですが どのようなコードを書けばいいのでしょうか? Sub test1() Dim i As Integer i = 11 If 1 < i < 10 Then MsgBox i & "は1から10の間にはありません" End If End Sub だと、メッセージが表示されてしまいます。
- ベストアンサー
- オフィス系ソフト
- 符号付きの係数の出力(散布図近似式)
QNo.4257168 にて質問したものです。 図の中で表現されている5次の式の係数(6個あります)を セルの中に書き出すマクロに関して 下記のコードを教えて頂いたのですが、係数は数字のみ出力され、-の符号は出力されません。どのようにしたら符号付きの係数の出力が可能になるでしょうか。(大変簡潔なコードで感心しています) Sub test() Dim str As String Dim strv As Variant Dim i As Integer str = "y = 0.0452x5 - 8.6275x4 + 658.58x3 - 25133x2 + 4795.20x - 4E+0.6" strv = Split(str, " ") For i = 0 To UBound(strv) If strv(i) Like "*E+*" Then MsgBox strv(i) Else If Val(strv(i)) > 0 Then MsgBox Val(strv(i)) End If End If Next i
- ベストアンサー
- オフィス系ソフト
- エクセル、ワークシートが保護されているかどうかを判断するVBAは?
以下のように書いてもダメでした。 どう直せばよいでしょうか? Sub TEST2() Dim n As Integer n = ThisWorkbook.Worksheets.Count For i = 1 To n If Worksheets(i).Protect = False Then MsgBox Worksheets(i).Name End If Next End Sub
- ベストアンサー
- オフィス系ソフト
- Excel VBAで検索(Win2000 Excel2000)
現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub
- ベストアンサー
- オフィス系ソフト
- 「:」を使えば、一行のコードにできるわけではない?
「:」を使えば、一行のコードにできるわけではないのですか? ifステートメントを1行にしたいのですが Sub test() Dim a As String a = "aiu" If a Like "*i*" Then: Stop: End If End Sub これだと End If に対応する If ブロックがありません。 となってしまいます。 ちゃんと、 Sub test() Dim a As String a = "aiu" If a Like "*i*" Then Stop End If End Sub こうしないとダメですか? なぜ、:は使えないのですか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- like演算子で大カッコがあるか判断するには
Sub test() Dim R As String R = "あ[あ]あ" If R Like "[" Then MsgBox "文字の中に大カッコがあります" End If End Sub を実行すると、 実行時エラーでパターン文字列が不正です。 になります。 If R Like "(" Then なら、問題なく動きます。 どうすればいいでしょうか?ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- マクロでの次の実行マクロへの記述
下記のマクロを記述しました。 一つのマクロ処理を終わらせて、次のマクロ(例:test)を動かしたいのですが何処に 記述したら良いかわかりません。 教えてください。 Sub Macro1() Dim i As Integer Dim buff As String i = 2 While 1 If Range("B" & i).Value = "" Then End End If buff = Range("B" & i).Value Range("B" & i).Value = Left(buff, 7) + " " + Mid(buff, 8, 5) + " " + Right(buff, 6) i = i + 1 Wend Call test →ここに仮に記述したのですが、testのマクロに行きません。 End Sub 以上
- ベストアンサー
- オフィス系ソフト
- VBAコード実行を中止する方法は?(1プロシージャだけでなく)
Exit Subは子だけしか中止できないのですね。 子でエラー起きたら、親もその他もまとめて中止することはできないのでしょうか? Sub 子() Dim i As Integer For i = 0 To 5 If 3 < i Then '' ここで親も終了したい End If MsgBox i Next End Sub Sub 親() 子 MsgBox "エラーならここまで来ないで" End Sub
- ベストアンサー
- Visual Basic
- 元のプロシージャーを取得するプロパティ
Sub test1() Call test2 End Sub Sub test2() If ?? Then MsgBox "test1から実行されたマクロです。" End If End Sub 上記のコードで どこから実行されたプロシージャ化を取得する方法はありますか? 現在は、 Dim bl_test1_yes As Boolean Sub test1() bl_test1_yes = True Call test2(bl_test1_yes) End Sub Sub test2(bl_test1_yes) If bl_test1_yes = True Then MsgBox "test1から実行されたマクロです。" End If End Sub としていますが、 元のプロシージャーを取得するプロパティがあれば教えてください。
- ベストアンサー
- オフィス系ソフト
お礼
likeで行うのは難しそうなので素直にandを使うようにします。 再度ありがとうございました。