• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロの条件別分岐について)

マクロ条件分岐について:エクセルVBAで複数の条件に基づいて処理を分岐する方法

このQ&Aのポイント
  • エクセルVBAを使って、複数の条件に基づいて処理を分岐する方法を解説します。
  • セル範囲内の行に対して条件を検索し、該当する条件に基づいて処理を分岐させる方法を紹介します。
  • 具体的な例を挙げながら、処理の内容や各条件に対する分岐の方法を詳しく説明します。

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

  • ベストアンサー
  • gt-t
  • ベストアンサー率41% (7/17)
回答No.4

#3です。 >E列に倉庫コード・G列に数量 を見逃していました。 1列空くので、条件チェックしている部分を次のように変更してみてください。 ----変更前----  If Rng(i, 2) >= 1 And Not (InStr(Rng(i).Value, "B") = 0) Then Bol1 = True  If Rng(i, 2) >= 1 And InStr(Rng(i).Value, "B") = 0 Then Bol2 = True ----変更後----  If Rng(i, 3) >= 1 And Not (InStr(Rng(i).Value, "B") = 0) Then Bol1 = True  If Rng(i, 3) >= 1 And InStr(Rng(i).Value, "B") = 0 Then Bol2 = True また、判定後の処理の「B」と「C」が反対になっていたので、その点も確認しながら処理してみてください。 Case Bol1 = True '「処理B」 → 「処理C」  MsgBox ("B") → MsgBox ("C")  Case Bol2 = True '「処理C」 → 「処理B」 MsgBox ("C") → MsgBox ("B")

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • gt-t
  • ベストアンサー率41% (7/17)
回答No.3

次のようにフラグを2つ使い判定すればいいかと思います。 ---参考コード--- Sub test() Dim Rng As Range Dim Bol1 As Boolean Dim Bol2 As Boolean Dim i As Integer Bol1 = False Bol2 = False Set Rng = Worksheets("sheet1").Range("a1") For i = 1 To 300  If Rng(i, 2) >= 1 And Not (InStr(Rng(i).Value, "B") = 0) Then Bol1 = True  If Rng(i, 2) >= 1 And InStr(Rng(i).Value, "B") = 0 Then Bol2 = True  If flg1 And flg2 Then Exit For Next Select Case True Case Bol1 = True And Bol2 = True '「処理A」  MsgBox ("A") Case Bol1 = True '「処理B」  MsgBox ("B") Case Bol2 = True '「処理C」 MsgBox ("C") Case Else  MsgBox ("発生しない条件です。") End Select Set Rng = Nothing End Sub

donald1982
質問者

補足

「貼り付け」というシート名なので、Worksheets("貼り付け")として、 倉庫コードはE列から始まるので Range("e1")としました。 その結果、質問の「2」の条件に合わないにも関わらず「a」の処理に 進むマクロへと進んでしまいます。 解答のマクロは正しいか、もう一度見ていただけると助かります。 条件分岐から処理「a」までのVBAは以下のように記述しました。 Dim Rng As Range Dim Bol1 As Boolean Dim Bol2 As Boolean Dim i As Integer Bol1 = False Bol2 = False Set Rng = Worksheets("貼り付け").Range("e1") For i = 3 To 300 If Rng(i, 2) >= 1 And Not (InStr(Rng(i).Value, "B") = 0) Then Bol1 = True If Rng(i, 2) >= 1 And InStr(Rng(i).Value, "B") = 0 Then Bol2 = True If flg1 And flg2 Then Exit For Next Select Case True Case Bol1 = True And Bol2 = True 処理「a」

すると、全ての回答が全文表示されます。
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

いろいろ有ると思いますが、こんなのはどうでしょう 図で G列とH列を作業用に使います G1 =IF(E1="","",(F1>0)*2-(RIGHT(E1,1)="B")*1) とし、下にコピー H1 =COUNTIF(G$1:G$300,1) H2 =COUNTIF(G$1:G$300,2) H3 =IF(H2>0,IF(H1>0,"a","c"),"b") とします あとは、VBAでH3セルを読んで、判断します ----------------------------------- Select Case Cells(3, "H") Case "a"    処理「a」 Case "b"    処理「b」 Case "c"    処理「c」 End Select

すると、全ての回答が全文表示されます。
  • chuchuo
  • ベストアンサー率45% (99/217)
回答No.1

シートのrow方向の数が浮動するのかによってスクリプトが 若干かわりますが コラムE列の文字情報を一文字ずつ評価する必要がありますね。 倉庫のコードが3桁固定なのかそうでないのかでも スクリプトが変わります。 先頭の番号もセルですか?

donald1982
質問者

補足

先頭の番号はセルではありません。 BDEFG列にデータが投入されていて、その中の EとGから条件を判断しようと思っています。

すると、全ての回答が全文表示されます。

関連するQ&A