人に聞けない痔の悩み、これでスッキリ >>

お世話になります。

例えば、
sheet1のセルA1の値が"A"か"B"か"C"か"D"なら
Workbooks.OpenText Filename:="C::\Documents and Settings\abc.txt
としたいのですが

ORの使い方が調べてもなかなか出てきません。
ご存知の方、ご教示下さい。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

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
    • good
    • 0
この回答へのお礼

回答1行目で目からウロコです(泣

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

お礼日時:2011/10/02 21:43

標準モジュールで


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/10/02 22:13

下記のいずれかで記述して下さい。


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
    • good
    • 0
この回答へのお礼

とても解りやすい回答を2例も、ありがとうございます。
両方とも正常動作を確認しました。

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

お礼日時:2011/10/02 21:25

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング