質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

4回答

1623閲覧

条件分岐が出来ません

S1234

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/02/04 04:36

前提・実現したいこと

VBAマクロで下記のように条件分岐をさせたいです。
①の条件分岐
1:条件
2:条件
3:条件

②の条件分岐
1:条件
2:条件
3:条件

(以下略)

のような分岐の仕方です。

上記のような条件分岐だと上手く動作しないのでしょうか。(VBA初心者でグーグルで検索しきれませんでした)
もしそうでしたら、どの構文を用いれば良いかご教示頂きたいです。
宜しくお願い致します。

発生している問題・エラーメッセージ

①の条件分岐は上手くいくのですが、②の時の条件分岐が上手くいきません。
2番目の条件で出力させようとすると、1番目の出力結果が出てしまう状況です。

繰り返し処理はせず、一回実行後はテキストファイルで出力させる仕様です。

該当のソースコード

xxxは伏字です。

VBA

1- リスト条件分岐① 2 3  If Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 4 5 Worksheets("xxx").Range("xxx").Value = "xxx" 6 7 If Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 8 Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value 9 10 ElseIf Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 11 Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value 12 13 Else: Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value 14 15 End If 16 17 Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value 18 19 20 ElseIf Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 21 22 Worksheets("xxx").Range("xxx").Value = "xxx" 23 24 25 ElseIf Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 26 27 Worksheets("xxx").Range("xxx").Value = "xxx" 28 29 30 ElseIf Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 31 32 Worksheets("xxx").Range("xxx").Value = "xxx" 33  End If 34 35- リスト条件分岐② 36 37 If Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 38 39 Worksheets("xxx").Range("xxx").Value = "xxx" 40 41 If Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 42 Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value 43 44 ElseIf Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 45 Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value 46 47 Else: Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value 48 49 End If 50 51 Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value 52 53 54 ElseIf Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 55 56 Worksheets("xxx").Range("xxx").Value = "xxx" 57 58 59 ElseIf Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 60 61 Worksheets("xxx").Range("xxx").Value = "xxx" 62 63 64 ElseIf Worksheets("xxx").Cells(xxx, xxx).Value = "xxx" Then 65 66 Worksheets("xxx").Range("xxx").Value = "xxx" 67   End If

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/02/04 04:48

情報不足です。①のいずれかに合致した場合、②の判定もするのですか?①に合致しないときだけですか?
S1234

2020/02/04 04:54

ttyp03様 情報不足で申し訳御座いません。 ①に合致してもしなくても、②の条件分岐をさせたいです。
ttyp03

2020/02/04 04:59

サンプルコードが全て同じ条件になっていて参考になりません。 ①と②で排他関係にないのならこれで正しいと思います。 ②の条件を見直してみては? 少なくとも今ある情報からは何も答えられません。
m.ts10806

2020/02/04 05:43

伏字だらけで全容が見えません。 本当にセキュアな情報だけ伏字にされたほうが良いかと思います
hit701

2020/02/04 05:53

値を入れて下さい。 "Sheet1", Sheet2", "Sheet3"など。 そして、それぞれのシートに具体的な値もダミーで良いので書き込んで下さい。例えば、セルの一行、一列には、xxxなど。 そうしないと、デバッグとか出来ないのでコメントが困難な状況です。 以上、よろしくお願いします。
AMK

2020/02/04 07:05

1と2の条件だけでも表示しないと解らないですね・・・
guest

回答4

0

ベストアンサー

条件分岐が深くなってきたときは、select caseとif-elseifを組みあわせてネスティングしたほうがいいと思います。

以下のようなサンプルは、参考になりますでしょうか・・

VBA

1Sub VeryComplexBranch() 2 3'A1セルに”男性””女性”が、B1セルに年齢がセットしてあるとして 4Select Case Range("A1").Value 5 Case "男性" 6 If 20 <= Range("B1").Value And Range("B1").Value < 30 Then 7 '20代男性の処理 8 ElseIf 30 <= Range("B1").Value And Range("B1").Value < 50 Then 9 '30代~40代男性の処理 10 ElseIf 50 <= Range("B1").Value Then 11 '50代以上の男性の処理 12 End If 13 Case "女性" 14 If 20 <= Range("B1").Value And Range("B1").Value < 30 Then 15 '20代女性の処理 16 ElseIf 30 <= Range("B1").Value And Range("B1").Value < 50 Then 17 '30代~40代女性の処理 18 ElseIf 50 <= Range("B1").Value Then 19 '50代以上の女性の処理 20 End If 21End Select 22 23End Sub 24

投稿2020/02/10 10:28

AkiSaito

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S1234

2020/02/12 03:05

会社案件のため伏字ばかりになっていたにも関わらず、私が質問したい意図を汲んでくださり、尚且つサンプルコードもご用意して頂いたので。ベストアンサーに選ばせて頂きます。有難う御座いました。
Zuishin

2020/02/12 03:37

if を switch に変えれば済むという話ではないと思います。元々動かないものを質問者さんが機械的に書き換えても恐らく動かないでしょう。他の回答者さんは、それで解決するとは思えなかったので一歩先のアドバイスをするために変数名の区別を求めていました。 もし動かなくて次の質問をする場合には伏せ字は止めてください。解決できないので。もちろん、この回答を参考に自力で解決できるなら結構なことです。
AkiSaito

2020/02/12 13:52

なにをどのように分岐させたいか?if-thenやselectやswitchをどう使い分けるか?を工夫するのが、プログラミングの基本中の基本だと思います。どんどん失敗して、スキルを磨いてくださいませ。 一例としていえるのは、「二者択一とか三者択一のときはselect case、◯◯イコールXXのときは”みたいなときはif-then」とかでしょうか。もちろん、これが正解!というのはないです。算数の授業でやった”集合図”のように図式化して考えるのも有効です。 がんばってください!
guest

0

ブレイクポイントを設置して
F8でステップ実行、どの条件式が思い通りになっていないか見てください。

何か見えてくるかも知れませんよ

投稿2020/02/09 08:40

sinzou

総合スコア392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ExcelVBA

1Sub test() 2 If ①の条件 Then 3 If "1)条件" Then 4 'なにかする 5 ElseIf "2)条件" Then 6 'なにかする 7 ElseIf "3)条件" Then 8 'なにかする 9 End If 10 11 ElseIf ②の条件 Then 12 'なにかする 13 If "1)条件" Then 14 'なにかする 15 ElseIf "2)条件" Then 16 'なにかする 17 ElseIf "3)条件" Then 18 'なにかする 19 End If 20 End If 21End Sub

②の条件?
ElseIFにすればいいんじゃないですか?

Select Caseの方が読みやすいかも?好みですが。

>Worksheets("xxx").Range("xxx").Value = Worksheets("xxx").Range("xxx").Value
一行が長くて読みにくいです。
オブジェクト変数を上手く使って少し纏めましょう。

投稿2020/02/04 08:00

mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

全部同じ伏字にしたら意味不明。
伏字にしなくてもよい所もあるはず。

「あっちの伏字とこっちの伏字は同じ文字」の所は同じ伏字に
違うところは違う伏字にするなどの工夫をしてください。

投稿2020/02/04 05:40

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/02/04 06:22

回答じゃないなら質問欄に書いてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問