- 締切済み
IF VBA 1つの条件で複数の処理
IF関数で、1つの条件(セルに特定の文字があったら) セルA1=B1+C1 セルB1=D1+E1 のように2つの処理を行ないたい場合、どんな構文を作成 したらいいでしょうか。 IF~Then ElseIf~Then End If というのが基本構文ですが、条件が複数あるのではなく 条件1つで処理は2つというのが分かりません。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- SI299792
- ベストアンサー率47% (772/1616)
済みません、質問内容を見間違えていました。回答No.3は無視して下さい。 IfとEnd Ifを使えばその間にいくつでも命令が書けます。 F1が「あ」の時2つの処理をする例です。 ' Sub Macro1() ' If [F1] = "あ" Then [A1] = [B1] + [C1] [B1] = [D1] + [E1] End If End Sub
- quindecillion
- ベストアンサー率48% (87/180)
No2です。 「条件を2つにし、処理も2つ出したい」とのことですが、No4及びNo5の回答者様の回答が最善の様に感じます。 callを省略されているのだと思われますが、Callステートメントの勉強にもなるのではないかと考えます。 デバッグの際も確認しやすいと思います。 1つ目の条件につき複数の処理。2つ目の条件につき複数処理・・・という形で条件分岐していきます。それぞれの場合で結果がでます。 条件分岐はselect caseもあるので、一緒に覚えるとよろしいかと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
#4です。 其の後、書き洩らしたことに、気づいたのですが、(質問が予想外のタイプのものだったので) IFを使って、Trueの場合(Falseの場合も同じ)、 複数行のVBAコードで処理を書くべき事態になった時、形だけですが、IF文のTRUEの部分では、1行で済ますには、処理を独立のSUBプロシージャーにして、そのSUBプロシージャーの名前を記述すれば、実現できます。 Sub test01() If Cells(1, "A") = 1 Then shoriA Else shoriB End If End Sub Sub shoriA() MsgBox "Aです" End Sub Sub shoriB() MsgBox "A以外" End Sub MsgBox "Aです"(簡単にするための例でこうしたが)の行に、 実際の複雑な、やりたい処理を、複数行で書き連ねれて記述すればよい。
- imogasi
- ベストアンサー率27% (4737/17069)
IF文で1条件に該当した場合に、VBAコードで、複数行の記述で処理を行うのはよくある(ほとんどの場合がこちら)です。プログラムの処理について、セルA1=B1+C1のような簡単な例(関数でやった方がましの例)しか意識してないのは、初心者らしい発想です。VBAの解説書の例題も読んでないのでは? 複数行の記述は、文ごとに縦に並べて記述するのが普通ですが、 文の間に「:」(半角)をいれて、1行に2文以上も書けます。 ーー 違った観点から、 https://excel-ubara.com/MOS_VBA/mosvba003.html のような説明も理解する必要があります。 やはり、ベテランの側で教えてもらうか、VBAのスクールに行くのが良いのでは。
- SI299792
- ベストアンサー率47% (772/1616)
' If [A1] = [B1] + [C1] Then 処理① ElseIf [A1] = [B1] + [C1] Then 処理① End If の様な処理をしたいのでしょうか。であれば ' If [A1] = [B1] + [C1] And [A1] = [B1] + [C1] Then 処理① End If の様な書き方ができます。 ちなみに、[]内にセル位置やExcel の関数が書けます。
- quindecillion
- ベストアンサー率48% (87/180)
複数条件では無く単一条件であれば if 条件 then セルA1=B1+C1 セルB1=D1+E1 end if でよろしいのではないでしょうか。 三つの処理の場合はifとend ifの間にもう一行増やすと対応できます。 この場合、セルA1はrange(A1)であり、B1はrange(B1)ではないです。 B1,C1,D1,E1という定義があると考えます。 B1=1,C1=2みたいな感じです。 そうではなく range("A1")=range("b1")+range("c1") range("b1")=range("d1")+range("e1") の事とお考えなのだとすれば if 条件 then range("B1")=range("D1")+range("E1") range("A1")=range("B1")+range("C1") end if となります。 もしくは if 条件 then cells(1,2)=cells(1,4)+cells(1,5) cells(1,1)=cells(1,2)+cells(1,3) end if コードは上から順番に実行されていきます。 F8を押しながら1行1行進めながら色々と確認しつつ試し試しやって頂ければ動きが見やすいかと思います。 ご参考になれば幸いです。
- t_hirai
- ベストアンサー率28% (222/788)
ん? if (セルに特定の条件がある) { セルA1 = B1 + C1 ・・① セルB1 = D1 + E1 ・・② } 上記のように2つの処理を書けばいいと思いますよ。
お礼
有難うございます。 単純に、処理したいものを2行、並べればいいのですね。 申し訳ありませんが、 条件を2つにし、処理も2つ出したいときも 同様に「Else」のあとに2つ処理したいことを並べれば いいのでしょうか? cells(1,2)=cells(1,4)+cells(1,5) cells(1,1)=cells(1,2)+cells(1,3) というように。