• ベストアンサー

VBAでの"OR"の使い方

お世話になります。 例えば、 sheet1のセルA1の値が"A"か"B"か"C"か"D"なら Workbooks.OpenText Filename:="C::\Documents and Settings\abc.txt としたいのですが ORの使い方が調べてもなかなか出てきません。 ご存知の方、ご教示下さい。

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

  • ベストアンサー
  • tohru999
  • ベストアンサー率49% (76/154)
回答No.1

If文ならば、 If (セルA1 = "A") Or (セルA1 = "B") Or (セルA1 = "C") Or (セルA1 = "D") Then となりますが 個人的には、 Stringで1つ変数を定義して、それにセルA1の値を格納。 それをSelect Caseで判定としますね。 (例 : 作業用変数をstrWorkとして) Dim strWork As String strWork = セルA1の値 Select Case strWork Case "A", "B", "C", "D" Workbooks.OpenText Filename:="C::\Documents and Settings\abc.txt End Select

OKBob
質問者

お礼

回答1行目で目からウロコです(泣 以前からワークシート関数は常用していて、if文とか得意だったのですが先日VBAに手を広げ始めて調べていたら WorksheetFunctionが要るようで変数割り当ての際に以下の様にやってみましたが。。。 R1a = WorksheetFunction.Or(P1a, P1b, P1c, P1d, P1e) 全くダメでxxx ずっと悩んで後回しにしていました。 言われてみれば並べ方の違いだけでANDと同じ感覚で使えそうですね。実際やってみて問題なかったです。 セレクトケースももうすぐ手をつけ始めるところです。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

標準モジュールで Sub test01() x = Cells(1, "A") If x = "A" Or x = "B" Or x = "C" Or x = "D" Then MsgBox "該当" End If End Sub で判るだろう。 ーー 単なる確認テスト用ならSheet1のシートモジュールのChangeイベントで Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then x = Target.Value If x = "A" Or x = "B" Or x = "C" Or x = "D" Then MsgBox "該当" Else MsgBox "該当外" End If End If End Sub Sheet1のA1セルに値を入れるとメッセージが出る。 ========== SQLのInというようなのは使えない ーーー 配列にでもA,B,C,Dを入れて1つずつループで聞いていくとか。 ーーー エクセルらしく、VLOOKUP関数を使うとか。 "H1:H4"セルにはA,B,C,Dを入れておく。 Sub test02() Dim y As Variant For i = 1 To 10 x = Cells(i, "A") MsgBox x y = Application.VLookup(x, Range("H1:H4"), 1, False) If IsError(y) Then Cells(i, "B") = "NotFound" Else Cells(i, "B") = "OK" End If Next i End Sub

OKBob
質問者

お礼

回答ありがとうございます。 いろんなパターンで組めるんですね。 大変参考になります。 全て使ってみて教えられるようになりたいと思います。 ありがとうございました。

回答No.2

下記のいずれかで記述して下さい。 Sample_1は、if文内で条件をorでつなぐ方法で Sample_2は、同じことをselect caseで実現する方法です。 OR使用時のポイントは「work_str = "A" Or "B" Or "C" "D"」とは記述できない点です。 Sub Sample_1() ' ' Dim work_str As String ' '--- Sheet1のセルA1の値を、処理用変数(work_str)に代入    work_str = Sheet1.Range("A1").Value '--- work_strの値をチェック '   "A", "B", "C", "D"のいずれかの場合、指定ファイルをOPENする。    If work_str = "A" Or work_str = "B" Or work_str = "C" Or work_str = "D" Then      Workbooks.OpenText Filename:="C:\Documents and Settings\abc.txt"    Else '   "A", "B", "C", "D"以外の場合、処理なし。   End If End Sub Sub Sample_2() ' ' Dim work_str As String ' '--- Sheet1のセルA1の値を、処理用変数(work_str)に代入   work_str = Sheet1.Range("A1").Value '--- work_strの値をチェック '    "A", "B", "C", "D"のいずれかの場合、指定ファイルをOPENする。   Select Case work_str     Case "A", "B", "C", "D"       Workbooks.OpenText Filename:="C:\Documents and Settings\abc.txt"     Case Else '     "A", "B", "C", "D"以外の場合、処理なし。   End Select End Sub

OKBob
質問者

お礼

とても解りやすい回答を2例も、ありがとうございます。 両方とも正常動作を確認しました。 ちなみに、次回このQAを見る初心者の方の為に・・・ = Sheet1.Range("A1").Value は、このままで動くのでしょうか? 私(初心者)は = Worksheets("sheet1").Range("A1").Value に書き換えて実行しましたが、私の書き換えが必要がない のであればコメント頂ければ後々有用になるかと思います。 上級の方は裏技をお持ちだったりしますので。。。

関連するQ&A