- ベストアンサー
長い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)
- Excel(エクセル)
- 回答数1
- ありがとう数13
- みんなの回答 (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 のようにすれば「一行の長さ」は短くなって、見やすくなるでしょうというぐらいです。 もうちょっと具体的に、そんなにダラダラと何を判断しているのか、何か工夫のしどころがないものか実際の事例を示してご質問を投稿し直して下さい。
関連する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
- 締切済み
- Excel(エクセル)
- 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文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?
- ベストアンサー
- Visual Basic
- 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 よろしくお願いします。
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- Visual Basic
- 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文はこういう使い方はできないんでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
お礼
親切に教えていただきましてありがとうございます また、keithinさんには以前にも教えていただきました 変数の使い過ぎと素人ゆえに、IF文が長くなってしまいました ベーシックの時からの悪い癖で、なんでもIF文で条件判断してしまいます 変数を数値(文字)に直して補足を試みましたが、元のマクロがおかしくなってしまいました 私のレベルでは、教えていただいた方法で十分なので、使わせていただきます またマクロが正常になったら、再度質問させてください ありがとうございました