• ベストアンサー

VBA 曖昧一致CASE文のELSE

以下の様な曖昧一致CASE文でElse判定がとれず困っています。 どの様にするべきでしょうか Select Case True Case str Like "*AAAA*" ' 処理1 Case str Like "*BBBB*" ' 処理2 Case Else ' Else処理 End Select この例で実行すると、全ての曖昧検索が一致しなくても 結果として処理2が走ってしまいます。

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

> sStr = "CCCC" > の場合処理2が走ると思われるのですが、如何でしょうか? いいえ、Else処理になります。 実際のコードの抜粋を提示してみてはいかがですか。 思わぬところで変な処理をしているのかも知れませんよ。

popepon
質問者

お礼

御回答有難う御座います。 原因が解りました。 sStrに実際はファイルパスを代入しているのですが、 それが悪さをしていた様です。 きっかけを頂けましたのでベストアンサーとさせて頂きます。 有難う御座いました。

その他の回答 (2)

  • mike321
  • ベストアンサー率44% (4/9)
回答No.3

比較に使用している変数が1つなら、「Select Case True」ではなく「Select Case 変数」にした方がすっきりします。 sStr = "CCCC" Select Case sStr Case Like "*AAAA*" '「AAAA」が含まれている場合 ' 処理1 Case Like "*BBBB*" '「BBBB」が含まれている場合 ' 処理2 Case Else '上記以外 ' Else処理 End Select Like指定での文字列の前後に"*"を入れているので、指定した文字が含まれている場合、ということになりますので、sStrが”CCCC"であればElse処理になります。

参考URL:
http://accessvba.pc-users.net/syntax/select_case.html
popepon
質問者

お礼

御回答有難う御座います。 参考にさせて頂きましたが、 Case Like "*AAAA*" はエラーになる様で試行出来ませんでした。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

「str」を変数名として使っているつもりでしょうか? 「str」はstr関数で使用されている予約語ですので、変数名には使用できません。 sStrの様に別な変数名を使用しましょう sStr = "AAABBBBCCC" Select Case True Case sStr Like "*AAAA*" ' 処理1 Case sStr Like "*BBBB*" ' 処理2 Case Else ' Else処理 End Select

popepon
質問者

お礼

御回答有難う御座います。 strは質問させて頂くに中って置き換えたものですので 実際の変数名は異なります。 御回答者様の例ですと、 sStr = "CCCC" の場合処理2が走ると思われるのですが、如何でしょうか?

関連するQ&A

  • VBA Select Caseについて

    エクセルVBAでLike演算子とSelectCase構文を組み合わせたいのですが、以下ではエラーになってしまいます。 どう修正すればいいのでしょうか? ABCを含む文字列、DEFを含む文字列、その他、についての処理の分岐方法です。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Value Case Like "*ABC*" `処理A Case Like "*DEF*" `処理B Case Else `処理C End Select End Sub

  • case文

    こんにちは、SQL初心者です。 値を判定して、trueなら「*」をfalseなら表示なしとするのですが、 判定項目がかなりありまあす。 case文だとtrue、falseで二通り書かないといけないと思うのですが、簡単な方法はありますか? if文みたいにelseを使えればいいのですが。

  • Select Case文でこのようなことは可能でしょうか?

    こんにちは。 「Select Case」の条件の一つに、文字列で○○を含むというのは指定できるのでしょうか? 例えば・・・ Select Case strName Case "ABC" 処理1 Case "D"を含む 処理2 Case Else 処理3 End Select 上記の様なことがしたいのですが、可能でしょうか? 可能でしたら、「"D"を含む」の部分はどのように書いたらいいですか?? 教えてください。宜しくお願いしますm(_ _)m

  • VBA: Select Caseを短くしたい

    Excel2003 の VBA でクラスモジュールを作成しています。 Select Case文で Caseが多い場合にコードを短くするテクニックがありませんか。 Select Case i   Case 1     str = "momo"   Case 2     str = "sakura"       ・       ・       ・   Case 100     str = "tsubaki" End Select のようなコードです。 配列に入れることも考えましたが、 str(1) = "momo" str(2) = "sakura"      ・      ・      ・ str(100) = "tsubaki" となって、コードを短くする効果は僅かです。 クラスモジュールなので、ワークシートにデータを入れておくテクニックは使えません。 また、外部ファイル(*.txt など)も管理の面から使いたくありません。 クラスモジュール内だけで完結させるテクニックがないでしょうか。

  • if else文のフローチャート

    c言語です。 if else文のフローチャートを教えてほしいです。 Trueの場合は処理1、Falseの場合は処理2を実行したいです。 最初に条件と書きます。

  • VBA case判定で

    Excel2010 Win7使用 VBA独学中の初心者です。 下記のcase判定でTrueなのに、Trueと判定してもらえません。 解決策を教えて頂けると助かります。 また、もっとスマートな方法があれば、 併せて教えて頂けると助かります。 例) hの中に"早い"という文字列がある場合  Case InStr(h, "早い") > 0 において、InStr=1が入っている場合でも Trueと判定されず、次のcaseに移行してしまいます。 Sub chg2() Dim r As Long Dim c As Long Dim day As Long Dim dc As Long Dim h As String day = Right(Range("S5"), 2) Select Case day Case 28 dc = 30 Case 29 dc = 31 Case 30 dc = 32 Case 31 dc = 33 End Select For r = 53 To Range("A52").End(xlDown).Row Step 2 For c = 3 To dc h = Cells(r, c) Select Case h Case InStr(h, "早い") > 0   h = Replace(h, "早い", "a")   Case InStr(h, "遅い") > 0 h = Replace(h, "遅い", "b")   ・   ・   ・  End Select Next c Next r End Sub

  • select case文について

    VB6.0のSelect Case文について質問です。 現在、ある文字列(mojiretu)の中から特定の文字を検索して その文字が文字列(mojiretu)の中に存在したらチェックボックスにチェックという一連の処理を行いたいのですがうまくいきません>< このSelect Case文のどこを直すべきでしょうか? select case mojiretu case instr(mojiretu,"abc") chk1.value=1 case instr(mojiretu,"def") chk2.value=1 case else chk3.value=1 end select

  • if文からcase文への置き換え

    ピクチャボックスをクリックしたら、チェック ボックスがチェックされるメソッドを作りたいと 思っています。 Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click 'ここから If sender Is PictureBox1 Then If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If ElseIf sender Is PictureBox2 Then If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End If 'ここまで End Sub 上記のif文をCase文に置き換えたくて、 'ここから Select Case sender Case PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select 'ここまで 上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。 Case文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?

  • Accessオプションボタン vba case

    どなたか教えて下さい。 Access2002を使っています。 オプションボタンが9個ありオプション値は1~8の数字で商品分類コードが選べるようになっています。 問題は最後のオプション値「9」なのですが、 9を選んだときには総ての商品分類を選びたいのです。 これをCaseとSQLで、作ってみようともったのですが、 select optionCode case 1 1 case 2 2 ・ ・ case 9 true End select そして、sqlに代入させたいのです。 mysql="select * from 商品 " _ & "where 商品分類コード = " optionCode もんだいは、Case文で「true」と使えないことです。 like"*" もしくは -1 など色々して見ましたが エラーになってしまいます。 SQLで総ての条件を出すのにはTRUE以外になにかあるのでしょうか? Caseを使って組みたいのですが、その発想自体がおかしいのでしょうか? 今は、if文で、動かしています。 Caseで動かしたいのです。 どなたか、よろしくお願いします。 aki

  • CASE文での問い合わせ

    下記のSQLでWHEREでnow_tが存在しないとでてSQLを実行できません。 どのようにしたらnow_tをWHEREで判定できるでしょうか。 WHEREが先に実行される為に存在しないというエラーがでるのは わかるんですが、でないようになんとかできないでしょうか? SELECT CASE WHEN s = 1 THEN 1 ELSE 2 END AS now_t FROM test WHERE now_t = 1

専門家に質問してみよう