IFステートメント内でWithステートメントの始まりを入れることは可能か?

このQ&Aのポイント
  • VBAの文法的にIFステートメント内にWithステートメントの始まり(先頭)だけを入れることはできない。
  • 上記のような使い方をすると、Elseの部分でコンパイルエラーが発生する。
  • 別の方法として、シートオブジェクトの中にWithステートメントを入れることで同様の結果を得ることができる。
回答を見る
  • ベストアンサー

IFステートの中にWithステートメントの始まり

IFステートの中にWithステートメントの始まりだけ入れることってできないのですか? Sub j() Dim a As String a = "aaa" If a = "aaa" Then With Sheets("作業用1") Else With Sheets("作業用2") End If End With End Sub このような事をやろうとすると、Elseの部分でコンパイルエラーになります。 別の方法として、シートオブジェクトの中に入れちゃえば入れちゃえば With の分岐をしなくていいことは分かったのですが、 このような使い方をしたいことが多々あるのですが、 VBAの文法的には、IFの中にWithの始まり(先頭)だけを入れることは不可能なのでしょうか?

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

有効範囲のブロックが異なってしまうので 無理かも 解決案として dim sh as Worksheet if a = "aaa" then   set sh = Sheets("作業用1") else   set sh = Sheets("作業用2") end if With sh End With といった具合なら うまくいくと思いますよ

onfwkcce6
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • IFステートメントの使い方 どちらでもないならば

    「出金も入金も0じゃないならば」としたい場合、どのようなifステートメントを作ればいいでしょう? Sub test() Dim 出金 As Currency Dim 入金 As Currency 出金 = 0 入金 = 0 '(1) If Not (出金 = 0) And Not (入金 = 0) Then MsgBox "出金0入金0ではありません" End If '(2) If (出金 = 0) And (入金 = 0) Then Else MsgBox "出金0入金0ではありません" End If End Sub (1)だとうまくいきません。 (2)のように Elseを使って対応するしかないのでしょうか? (2)でいけますが、今後の勉強の為にelseを使わずに、「どちらでもないならば」の方法を教えてください。

  • ExitでIFステートメントを抜けたい

    Sub test() Dim n As Byte, i As Byte For i = 0 To 5   If n = 0 Then    n = n + 1   Else    Exit For '(1)ここから   End If i = i + 1 '(2)ここへ来たい(IFステートメントだけ抜けたい) Next i End Sub のように(1)から(2)へ行きたいのですが このコードを実行すると Forステートメントを抜けてしまい、マクロが終了してしまいます。 「Exit If」にするとエラーになってしまいます。 Exitを使用してIFステートメントだけ抜け、 Forステートメントに戻るにはどうすればいいでしょうか? ご教授よろしくお願いします。

  • IFステートメントで半角でも全角でもtrueとさせ

    IFステートメントで半角でも全角でもtrueとさせるには? Sub test1() Dim str As String str = "ABC"’←全角のA If str Like "*A*" Then ’←半角のA MsgBox "Aがあります" End If End Sub これで、半角Aもメッセージを表示させたいのですが、 マッチバイトみたいなのってありますか?

  • Selectステートメントの入れ子について

    Ifステートメントで  If 条件1   If 条件2 … とするのが見づらいと思い、Notをつけて並べてみました。 Sub ()  If Not 条件1 Then    End Sub  End If  If Not 条件2 Then    End Sub  End If  処理 End Sub これをSelectステートメントで行いたいのですが、入れ子にしないで書く方法はあるのでしょうか? (Select Not(?)のような…) もしあれば、お教えください。

  • ifステートメントで、[が含まれるかどうかを調べた

    ifステートメントで、[が含まれるかどうかを調べたいのですが ****************************** Sub test1() Dim myStr As String myStr = "[aaa]" If myStr Like "*[*" Then MsgBox "[を含んでいます。" End If End Sub ****************************** をやろうとすると 「実行時エラー93 パターン文字列が不正です」 となってしまいます。 ヘルプを見ると ************************************************************ 検索の Like 演算子で指定されているパターン文字列が無効です。 エラーの原因と対処方法を次に示します。 たとえば、文字リスト式 [a-b は、右かっこ (]) がないため、無効です。 リスト式の文字を確認します。 詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。 ************************************************************ との事なので、 If myStr Like "*[*]" Then としたら、問題なくできましたが、 [だけが含まれているかどうかを調べることは不可能なのでしょうか?

  • excelのifステートメントのテストで…

    御観覧ありがとうございます。 スパテクという本を買って、excelを勉強しようと、 サンプルを打ち込んでいて、何度かエラーになったりしましたが、 調べることや、入力ミスの確認で回避出来ていたのですが、 本通りに打っているのに、 「エラー438、オブジェクトは、このプロパティまたはメソッドをサポートしてません。」 と出ます。 エクセル2007です。入力したプロシージャは、 Option Explicit Dim nSample1_12 As Integer Sub Sample1_12() nSample1_12 = nSample1_12 + 1 ThisWorkbook.Worksheets("sheet1").Range("A1") = nSample1_12 End Sub Sub Sample1_13() Dim sA2 As String sA2 = ThisWorkbook.Worksheets("sheet1").Range("A2") If sA2 = "" Then ThisWorkbook.Worksheets("sheet1").Renge("A2") = "Sample1_13" ElseIf sA2 = "Sample1_13" Then ThisWorkbook.Worksheets("sheet1").Range("A2") = "基本の文法 ifステートメント" Else ThisWorkbook.Worksheets("sheet1").Range("A2") = "" End If End Sub このサンプル13を実行すると、A2にsample1_13と出るはずなそうなんですが…エラーになります。

  • ifステートメント notと!は同じ意味ですか?

    VBAのifステートメントで、notと!は同じ意味ですか? 「a」で始まらない。 と言う意味で、下記のコードを作ったのですが、どちらも思い通りの結果が得られます。 If "あabc" Like "[!a-z]*" Then Debug.Print "OK" End If If Not "あabc" Like "[a-z]*" Then Debug.Print "OK" End If End Sub ネットからのサンプルをコピペしたので、いまいち理解できてないのですが notと!は同じ意味ですか?

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • VBA IFステートメントがうまくできません

    Sub tset1() Dim URL As String URL = "http://oshiete.coneco.net/mypage#tabs" If URL Like "http://oshiete.coneco.net/mypage#tabs" Then MsgBox "成功!" End If End Sub を実行すると、URL の値は"http://oshiete.coneco.net/mypage#tabs"なのに、 "成功!"が表示されません。 #が曲者のような気がしますが、これ以上わかりません。 URL = "http://oshiete.coneco.net/mypage"にすれば、うまくいきした。 #があっても、IFステートメントが使えるようにするにはどうすればいいでしょうか? ご回答よろしくお願いします。

  • IF文で該当の処理を通らない

    VB6 SP5 フォームのロードで構造体変数に 値を入れ、ボタンを押したときに IF文の処理を通したのですが aaaに20以上の数値を入れると 該当の処理を通らず全てELSEを 通ってしまいます 以下コード ////// 標準モジュール ////// Type Strct_Dat □□start_no(5) As Integer □□end_no(5) As Integer End Type Global StrctDat As Strct_Dat ////// フォーム ////// Private Sub Form_Load() □□With StrctDat □□□□.start_no(0) = 1 □□□□.start_no(1) = 10 □□□□.start_no(2) = 20 □□□□.start_no(3) = 30 □□□□.start_no(4) = 40 □□□□.end_no(0) = 9 □□□□.end_no(1) = 19 □□□□.end_no(2) = 29 □□□□.end_no(3) = 39 □□□□.end_no(4) = 49 □□End With End Sub Private Sub Command3_Click() □□Dim aaa As Integer □□aaa = 20 □□With StrctDat □□□□If .start_no(0) <= aaa And aaa <= .end_no(0) Then □□□□□□MsgBox ("0") □□□□ElseIf .start_no(1) <= aaa And aaa <= .end_no(1) Then □□□□□□MsgBox ("1") □□□□ElseIf .start_no(2) <= aaa And aaa <= .end_no(2) Then □□□□□□MsgBox ("2") □□□□ElseIf .start_no(3) <= aaa And aaa <= .end_no(3) Then □□□□□□MsgBox ("3") □□□□ElseIf .start_no(4) <= aaa And aaa <= .end_no(4) Then □□□□□□MsgBox ("4") □□□□Else □□□□□□MsgBox ("ELSE") □□□□End If □□End With End Sub 構造体の型をLONGにすると ちゃんと該当処理をとおります また、デバッグ時は正常で EXE化したときのみ該当処理を 通らなくなります 回避方法はあるのですが 何かご存知の方いらっしゃいましたら 教えて下さい よろしくお願い致します