[[20200519162635]] 『(マクロ) IFで条件をORで7コ指定する方法について』(マイン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『(マクロ) IFで条件をORで7コ指定する方法について』(マイン)

いつもお世話になります。

IF〜OR〜Then について質問をお願いします。

選択セルが
指定された列「3列.8列.13列.18列.23列.28列.33列」以外の場合は
メッセージを表示させる

といった処理を作成しております。

下記のコードで実行した際に

ORが多すぎるのでしょうか?

正しいセルを選択しているにも関わらず、メッセージが表示されます。

    '選択セル列の取得
    Dim Col As Long: Col = Selection.Column

    '指定列が選択されてあるかを判定
    If Col <> 3 Or Col <> 8 Or Col <> 13 Or Col <> 18 Or Col <> 23 Or Col <> 28 Or Col <> 33 Then

        MsgBox "指定列を選択してください": Exit Sub'指定列を選択していない場合は終了

    End If

試しに If Col <> 3 Then とした所、正しく処理されました。

すみませんが、アドバイスのほどよろしくおねがいします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


条件指定が間違えてます
「3以外の時」または「8以外の時」 ということは
3の時=8以外の時 となるので3でも8でも該当してしまいます。

この場合は

If Col = 3 Or Col = 8 Or Col = 13 Or Col = 18 Or Col = 23 Or Col = 28 Or Col = 33 Then

else

 MsgBox "指定列を選択してください": Exit Sub'指定列を選択していない場合は終了

endif

とするべきでしょう
(無慈悲) 2020/05/19(火) 16:45


またはOr→And
(きまぐれ) 2020/05/19(火) 16:48

 この場合はOrではなくてAndですかね。
 If Col <> 3 And Col <> 8 And Col <> 13 And Col <> 18 And Col <> 23 And Col <> 28 And Col <> 33 Then

 もしくはこんな風にまとめてしまうか。
    '選択セル列の取得
    Dim Col As Long: Col = Selection.Column
    '指定列が選択されてあるかを判定
    Select Case Col
        Case 3, 8, 13, 18, 23, 28, 33
        Case Else: MsgBox "指定列を選択してください"
    End Select
(助六) 2020/05/19(火) 16:49

ぶつかりましたが、そのままで失礼します。

様々な方法があるので参考になれば。

     Select Case col
     Case 3, 8, 13, 18, 23, 28, 33
         '指定列選択
     Case Else
         MsgBox "指定列を選択してください": Exit Sub
     End Select

 Dim n As Variant
     For Each n In Array(3, 8, 13, 18, 23, 28, 33)
         If col <> n Then
             MsgBox "指定列を選択してください"
             Exit Sub
         End If
     Next n

(tkit) 2020/05/19(火) 16:57


無慈悲さん ありがとうございます

※3の時=8以外の時 となるので3でも8でも該当

こういうことだったんですね。

きまぐれ さん
助六さん
tkitさん

ありがとうございます。

今回はSelect Caseで組み直します。

場面によって色々使い分けできそうで感謝します。

(マイン) 2020/05/19(火) 17:09


話がおわっちゃってるようなので、参考まで。

質問とは関係ありませんが、マルチステートメントは理解して使ってますか?
単に、見た目がカッコイイとかおもっているだけなら、あんまりおすすめはしないです。

質問のほうは、以前紹介した「Intersectメソッド」を使ってみてはどうですか?

    Sub 実験04()
        Dim MyRNG As Range
        Dim 列 As Long

        If Selection.Columns.Count > 1 Then
            MsgBox "複数列を選択してはだめなのです"
            Exit Sub
        End If

        Set MyRNG = Cells(1, 3)
        For 列 = 8 To 33 Step 5
            Set MyRNG = Union(MyRNG, Cells(1, 列))
        Next

        If Intersect(Selection, MyRNG.EntireColumn) Is Nothing Then
             MsgBox "指定列を選択してください"
             Exit Sub '指定列を選択していない場合は終了
        End If

    End Sub

(もこな2 ) 2020/05/19(火) 17:12


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.