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

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

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

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

Q&A

解決済

3回答

2317閲覧

Excel VBA イミディエイトウィンドウで「分岐のあるループ処理」を実行したい

kamikazelight

総合スコア305

VBA

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

0グッド

0クリップ

投稿2018/01/27 02:51

編集2018/01/27 04:56

Excel VBA イミディエイトウィンドウで「分岐のあるループ処理」を実行したい

VBA

1For i = 1 To Sheets.Count 2 If InStr(1, Sheets(i).Name, "変更") <> 0 Then 3 Sheets(i).Activate 4 End If 5Next i

上記のコードを改行の代わりに「:」(コロン)を使って、
イミディエイトウィンドウに書いて実行してみたのですが、

コンパイルエラー: 行頭のみ許されるステートメントです。

と表示されて実行できません。
このようなケースの場合はイミディエイトは使えないのでしょうか?

###試したこと
標準モジュールに改行を「:」(コロン)に変える前のコードを書いて
一行ずつ改行を「:」(コロン)に変えてみたのですが、
for文 の行の後に if文 が来るとエラーになってしまうようです。
ifをやめてsheets(i).Activateだけの時は問題なく動作しました。

補足情報(FW/ツールのバージョンなど)

--追記--
良く 使い捨てのコードを 書いて消し忘れてしまうので
イミディエイトウィンドウで実行出来たら...
と思っての投稿です。

Excel 2013
VBA: Retail 7.1.1078

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

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

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

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

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

guest

回答3

0

ベストアンサー

下記の構文でも、コンパイルエラーになります。

vba

1If 1=1 then: MsgBox "test!": End If

If構文は : で1行にできないようです。
代わりにSelect Case を使うとエラーなく動作ました。

vba

1For i = 1 To 3: Select Case InStr(1, Sheets(i).Name, "変更") <> 0: Case True: Sheets(i).Activate: End Select: Next

ただ、複数行で書いて、それを1行につなげてなどと、するほうが面倒のような気がします。

使い捨て用モジュールを作成しておいて、一時的なものはそこに記述するようにすればどうでしょうか。

投稿2018/01/27 05:49

hatena19

総合スコア33715

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

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

kamikazelight

2018/01/27 06:00

返信ありがとうございます。 無事 Select Case で動きました! ありがとうございました。 If構文ですが If 1=1 then: MsgBox "test!" として「End if」を除くと問題なく実行出来るようです。 「Then」のあと改行してから条件一致時の処理を書いた場合は 「End if」が必要なのに「:」(コロン)の場合はいらないようなので 不思議です ? ホントにをありがとうございました!!
hatena19

2018/01/27 06:40

If 1=1 then MsgBox "test!" でも動きますね。もともと、この1行構文はありますので。 ただ、これを For ・・・Next に入れると動かないようです。 不思議ですね。
kamikazelight

2018/01/27 07:26

「:」(コロン)はラベル を指定する時に使ったりもあるので その当たりが絡んでいるのかもしれませんね 又宜しくお願い致します!
guest

0

単純にモジュール名に規則を持たせて用意し、完成後に検索しては、削除かコメントアウトかするといいでしょう。

投稿2018/01/27 05:33

seastar3

総合スコア2285

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

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

kamikazelight

2018/01/27 05:49

返答ありがとうございます。 すみません。 「良く消し忘れるので出来ることならば イミディエイトウィンドウを使いたいのです。」 とゆうのも 実際はとってつけた理由で 好奇心からの質問です。 ですので「イミディエイトウィンドウで「分岐のあるループ処理」を実行したい」の部分がミソなので そのあたりが知りたいです。
guest

0

試していませんが、デバッグ中のイミディエイトウィンドウ内でのコマンドは、回数カウントのためのスタック記憶場所を用意していないのではないでしょうか。
モジュールに示されたコードを組み込んだプロシージャを作っておいて、そのプロシージャをcallとかすることになるでしょう。

投稿2018/01/27 04:50

seastar3

総合スコア2285

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

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

kamikazelight

2018/01/27 04:52

返答ありがとうございます。 実行するタイミングは デバック中 ではありません。 普通に標準モジュールなどに記載すれば問題ないのですが 良く消し忘れるので出来ることならば イミディエイトウィンドウを使いたいのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問