Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


24 / 13196 ツリー ←次へ | 前へ→

【80163】VBA Do Loop Untilでエラー まよい人 18/10/2(火) 15:16 質問[未読]

【80171】Re:VBA Do Loop Untilでエラー γ 18/10/4(木) 19:23 発言[未読]
【80173】Re:VBA Do Loop Untilでエラー γ 18/10/6(土) 11:44 発言[未読]
【80175】Re:VBA Do Loop Untilでエラー γ 18/10/6(土) 17:22 発言[未読]

【80171】Re:VBA Do Loop Untilでエラー
発言  γ  - 18/10/4(木) 19:23 -

引用なし
パスワード
   スマフォで見ているので詳細わかりませんが
エラー時の関連する変数の値を教えてください。

【80173】Re:VBA Do Loop Untilでエラー
発言  γ  - 18/10/6(土) 11:44 -

引用なし
パスワード
   時間がとれたので内容を見てみました。
下記の例で、エラーとなりますね。
そもそもですが、Loop処理の中で再帰呼び出しは不可避なんでしょうか?
何をしようとされているか説明が無いのでよくわかりませんが。

理由は不明ですが、
記法によってエラーが避けられるならそれに従うのがよろしいかと。

Sub test()
  [H1:H5].Value = Application.Transpose(Array(1, 2, 3, 5, 1)) 'データ設定
  Call 支(1, False, 1)  'エラーとならない
End Sub

Sub test2()
  [H1:H5].Value = Application.Transpose(Array(1, 2, 3, 5, 1)) 'データ設定
  Call 支2(1, False, 1)  '「式が複雑すぎます」というエラーとなる
End Sub

Function 支(ByRef currentRow As Long, ByVal flag As Boolean, ByVal 列 As Byte)
  Dim myLevel As Byte
  Dim I_Flag As Boolean

  With ActiveSheet
    myLevel = Val(.Range("H" & currentRow))
    Do Until myLevel > Val(.Range("H" & currentRow))
      
      ' ここで作業
      
      currentRow = currentRow + 1
      If myLevel < Val(.Range("H" & currentRow)) Then Call 支(currentRow, I_Flag, 列)
    Loop
  End With
End Function

Function 支2(ByRef currentRow As Long, ByVal flag As Boolean, ByVal 列 As Byte)
  Dim myLevel As Byte
  Dim I_Flag As Boolean

  With ActiveSheet
    myLevel = Val(.Range("H" & currentRow))
    Do
      
      ' ここで作業
      
      currentRow = currentRow + 1
      If myLevel < Val(.Range("H" & currentRow)) Then Call 支2(currentRow, I_Flag, 列)
    Loop Until myLevel > Val(.Range("H" & currentRow))
  End With
End Function

【80175】Re:VBA Do Loop Untilでエラー
発言  γ  - 18/10/6(土) 17:22 -

引用なし
パスワード
   内部的な処理の話なので正確なことは不明だが、
再帰処理が関係していると想像。
いわゆる末尾再帰となる書き方(エラーが
でない方の書き方)が推奨されるということでしょう。

24 / 13196 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free