• ベストアンサー

長いIF文を短くしたい

よろしくお願いします いつもgooのみなさんに大変お世話になっております マクロは2カ月ほど前から勉強しています お陰様で、私のマクロも日々進歩できています エクセルのバージョンは2013です 質問内容 長いIF文を短くしたい IF 条件1 and 条件2 and 条件3 and 条件4 and 条件5 Then   処理 End If このようにIF文が長いために、マクロ編集画面が見にくくなっています Select Case を使わずに短くする方法はないでしょうか?

  • maamaa
  • お礼率85% (274/322)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

肝心の条件の内容がナイショでは、判断を統合して短くする具体的な方法をアドバイスする事もできません。 >このようにIF文が長いために、マクロ編集画面が見にくくなっています いま言えることは if 条件1 then  if 条件2 then   if 条件3 then    if 条件4 then     if 条件5 then      処理     end if    end if   end if  end if end if のようにすれば「一行の長さ」は短くなって、見やすくなるでしょうというぐらいです。 もうちょっと具体的に、そんなにダラダラと何を判断しているのか、何か工夫のしどころがないものか実際の事例を示してご質問を投稿し直して下さい。

maamaa
質問者

お礼

親切に教えていただきましてありがとうございます また、keithinさんには以前にも教えていただきました 変数の使い過ぎと素人ゆえに、IF文が長くなってしまいました ベーシックの時からの悪い癖で、なんでもIF文で条件判断してしまいます 変数を数値(文字)に直して補足を試みましたが、元のマクロがおかしくなってしまいました 私のレベルでは、教えていただいた方法で十分なので、使わせていただきます またマクロが正常になったら、再度質問させてください ありがとうございました

関連するQ&A

  • 再質問 長いIF文を短くしたい

    お世話になっております 先日1/24に、条件を示さずに「長いIF文を短くしたい」という質問をしてしまいました こちらの手抜きをお詫びします 前回keithinさんにアドバイスいただいた方法で書き直しましたので これをさらに簡単に書く方法があれば教えてください 以下は、Private Sub Worksheet_Change(ByVal Target As Range)内のマクロです If Target.Row >= 15 And Target.Row <= 100 And Target.Column = 9 Then If Range("I" & Target.Row).Value < Range("J" & Target.Row).Value Then If Range("G" & Target.Row).Value >= 1 Then If Range("I" & Target.Row).Value >= Range("G" & Target.Row).Value Then If Range("I" & Target.Row).Value Mod Range("G" & Target.Row).Value = 0 Then  処理 End If End If End If End If End If

  • if文からcase文への置き換え

    ピクチャボックスをクリックしたら、チェック ボックスがチェックされるメソッドを作りたいと 思っています。 Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click 'ここから If sender Is PictureBox1 Then If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If ElseIf sender Is PictureBox2 Then If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End If 'ここまで End Sub 上記のif文をCase文に置き換えたくて、 'ここから Select Case sender Case PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select 'ここまで 上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。 Case文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?

  • If文の条件文の書き方

    お世話になります。 Excelでマクロを作成しております。 内容:  あるセルに、X<=300 というような条件を入れておきます。  ある値、たとえば、500 が来たときに、Xに代入して、  500<=300 という条件式を作り、それが、正しいか、正しくないか  の結果を求めたいと思っています。 このとき、if文の条件文は、値によって、変わらなくてはいけないので、 文字列の置き換え等をして、変数として条件文を作ると、「型が違います」 のエラーになります。 どのように条件文を作ればいいでしょうか?? hani = Cells(1,1).value 'セル1,1に、X<=300 が書かれています。 exp = Replace(hani, "X", 500) '"X"を500と置き換えます。 If exp Then Check = 0 Else Check = 1 End If よろしくお願いします。

  • VBA IF文をCASE文にしたいのですが

    お尋ねします。VBAで以下のようなIF文をCASE文に書き換えたいのですが、うまくいきません。 どなたかアドバイスをいただけないでしょうか。 よろしくお願いします。 部分だけ抜き出していますが、文字列が日本語かどうかを判定しています。 CD = Asc(strNm) If CD >= -30561 And CD <= -26510 Then    '漢字(第一水準)"   i = i + 1 '文字数記録 ElseIf CD >= -26415 And CD <= -5468 Then   '"漢字(第二水準)"   i = i + 1 ElseIf CD >= -31936 And CD <= -31850 Then  '"カタカナ"   i = i + 1 ElseIf CD >= -32097 And CD <= -32015 Then  '"ひらがな"   i = i + 1 ElseIf CD >= -1444 And CD <= -949 Then    '"漢字(その他)"   i = i + 1 End If

  • VBAでIF文を作成したが、もう少しまとめたい。

    以下のようなVBAを作成しました。 動作に問題はないのですが、 もっと簡単にまとめることができる気がしますが、うまくできません。 何かやりかたはあるのでしょうか。 宜しくお願い致します。 If Cells(5, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(5, 1) End If If Cells(6, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(6, 1) End If If Cells(7, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(7, 1) End If If Cells(8, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(8, 1) End If If Cells(9, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(9, 1) End If If Cells(10, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(10, 1) End If

  • IF文

    (A)IF 条件 THEN 単純実行文1 ELSE 単純実行文2 (B)IF 条件 THEN 実行処理1 ELSE 実行処理2 Aの文では単純実行分なのになぜ改行すると(B)の文みたいに実行処理になるのでしょうか? 実行処理と単純実行文の違いを教えてください

  • if文がbegin - endな訳は?

    if 条件 > 0 then  begin   条件あり  end else  begin   それ以外。  end; Delphiでは、こうなるのですがなぜ{}を使わないのでしょうか? {}はコメントになるけど、//でも/* */ でもいいじゃないですか。 それに比べて、begin - end って面倒じゃないですか? 何かの本でif文が多いのは汚いプログラムだ、と読んだのですが、当時はPerl,PHPしか知らなかったので、それほど汚くないじゃん。と思ったのですが、Delphiを使ってみると、やっぱりif文が汚く感じます。 もちろん、コンパイルするので、書き方は開発者の自由なのは分かりますが、{}ではいけない明確な理由があるんでしょうか? 豆知識を持っている方、プログラム経験上分かった方、よろしくお願いします。

  • CASE文のきじゅつについて

    帳票フォームである明細を照会する画面を作成しています。 そこで、詳細のテキストボックスにデータの値が 1の場合"○" 2の場合"×" 3の場合"☆" と表示したいのですが、テキストボックスのコントロールソースに1行で書く場合、 どのように書けばいいのでしょうか? IF文だと下記の場合、BBB=IIF(AAA="1","○","×")と書けますよね。 IF AAA="1" then BBB="○" ELSE BBB="×" END IF SELECT文だと下記の場合、1行で書くことができますか? SELECT CASE AAA CASE "1" BBB="○" CASE "2" BBB="×" CASE "3" BBB="☆" END SELECT

  • IFの使い方

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim ANS As Integer ANS = MsgBox("Aをクリアしてもいいですか?", _ vbYesNoCancel + vbInformation, "クリア実行") If Sheets("A").Range("6D").Value <> "" Then Select Case ANS Case vbYes Sheets("営業確認").Range("b6:e1000,g6:k1000").Select Selection.ClearContents Sheets("入力").Select MsgBox "クリアしました" Case vbNo MsgBox "キャンセル" Case Else MsgBox "中止します" End Select Else End If End Sub 説明 (1)『A』というシートのセル『D6』に値が残っていれば メッセージボックスを出す。 (2)メッセージボックスはyes,no,cancelボタンがある (3)YESなら指定したセルの値を消す (4)NOなら消さない (5)キャンセルなら(3)、(4)以外 (6)『A』の『D6』に値がなければメッセージは出ない 上記のようにマクロを組みましたが、IFの所がエラーになってしまいます。

  • UWSCのSELECT文の記述方法

    UWSCのSELECT文について教えてください。 今IFB-ELSE-ENDIFを使って行っている条件文を SELECT文でスマートに書き直しできますか? たとえば ifb cnt < 3 then print "3未満" elseif cnt >=3 and cnt <= 5 then print "3~5" else print "6以上" endif みたいな範囲を持った条件式なんですが、 select文の範囲指定みたいな記述方法が分かりません。 select case cnt < 3 print "3未満" case cnt >=3 and cnt <= 5 print "3~5" default print "6以上" endif の様に書いても上手く動きません。 select文はこういう使い方はできないんでしょうか?

専門家に質問してみよう