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

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

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

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

Q&A

解決済

2回答

5305閲覧

Excel VBAの再帰処理上限について

entry4code

総合スコア14

VBA

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

0グッド

0クリップ

投稿2018/03/08 05:59

Excel VBA で再帰的な処理を行った際の上限は決まっているのでしょうか。

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 Target.Value = Target.Value + 1 3End Sub

例えばこんなコードを実行してセルに1と入力すると52になるため、51回実行されているように見えます。

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

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

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

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

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

guest

回答2

0

「スタックオーバーフロー」とエラーになりませんでしょうか?

仕様の上限は無いですが、
処理中の状態を覚えておかないといけないので、
その分のメモリが消費され続けていき、
無限ループの途中で上記エラーになる、
という感じだったと思います。

提示のコードだと、引数の「ByVal Target As Range」がメモリにストックされ続けるので、
ひょっとしたら、ByRef にすればもっと処理されるようになるかもです。

投稿2018/03/08 06:15

ExcelVBAer

総合スコア1175

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

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

entry4code

2018/03/08 06:16

エラーにはなりませんでした。 以前はたしかにオーバーフローになったと思うのですが、バージョンによるのかもしれません。
ttyp03

2018/03/08 06:18

再帰処理ではないので、メモリの消費はかわらないと思います。
ExcelVBAer

2018/03/08 06:19

チェンジイベントの話だったんですね~ 見落としてました汗
guest

0

ベストアンサー

当方の環境(Windows7+Excel2013)では95までカウントされました。
ちなみにこの手の処理は再帰ではなくイベントの連鎖と呼ばれるものです。
再帰は自分自身を呼び出す処理を指します。
このイベントの連鎖の上限回数が決まっているのかはわかりませんでしたが、「vba イベント 連鎖 何回」でググッたら書籍のプレビューにたどり着きました。
この解説によると、

Excelのバージョンなど環境によって異なります。

とのことです。
少なくともある程度の上限はありそうです。

投稿2018/03/08 06:13

ttyp03

総合スコア16998

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

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

entry4code

2018/03/08 06:18

ありがとうございます。 バージョンによって異なるのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問