Excel VBA質問箱 IV

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

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


18650 / 76738 ←次へ | 前へ→

【63527】Re:callで呼び出すとき
発言  ichinose  - 09/11/15(日) 21:35 -

引用なし
パスワード
   こんばんは。
>モジュール1で条件が合わない時は処理を抜けているのに
>次のCallに進んでしまうのはなぜでしょう?
サンプル3のコードは、

>Sub サンプル3()
>Call サンプル1
>Call サンプル2
>End Sub

これは、サンプル1を実行した後、
サンプル2を実行するコードですよね?

サンプル1は、

>Sub サンプル1()
>
>Dim i As Integer
>Dim a As Integer
>
>a = Cells(Rows.Count, 1).End(xlUp).Row
>  For i = 1 To a
>    If Cells(i, 1).Value = "みかん" Then
>    Cells(i, 2).Value = "おいしい"
>    Else
>    Exit For
>    
>    End If
>    
>  Next
End Sub

>モジュール1で条件が合わない時は処理を抜けているのに
このサンプル1の仕様が本当は何をしたいのか分かりませんが・・・。
上記のコードで処理を抜けているコードって、

>    Exit For
これのことですか?
これが抜けているのは For〜Nextのループを抜けているのですよ!!
プログラムの流れは、For〜Nextのループを抜ければ、End Subですから、
呼び出されたサンプル3に戻ります。
よって、戻ってきたサンプル3では、只、サンプル2を呼び出しているだけですから、
サンプル1の結果には、関係なく、サンプル2が呼び出されます。

仕様は想像ですが、

Sub サンプル3()
  Dim retcode As Boolean
  Call サンプル1(retcode)
  If retcode Then Call サンプル2
End Sub


Sub サンプル1(ret As Boolean)
  Dim i As Integer
  Dim a As Integer
  ret = False
  a = Cells(Rows.Count, 1).End(xlUp).Row
  For i = 1 To a
    If Cells(i, 1).Value = "みかん" Then
      Cells(i, 2).Value = "おいしい"
      ret = True '条件に合った
    End If
  Next
End Sub


Sub サンプル2()
  Dim i As Integer
  Dim a As Integer
  a = Cells(Rows.Count, 1).End(xlUp).Row
  For i = 1 To a
   If Cells(i, 1).Value = "いちご" Then
     Cells(i, 3).Value = "こっちもおいしい"
   End If
  Next
End Sub


というようにパラメータ(Retcode)を使って
サンプル1での実行結果がサンプル3のプロシジャーにわかるように
すると、そのパラメータの内容で処理を分けることが出来ます。

実際には、Functionを使う方が一般的ですが、今回は、Subを使って、
パラメータで結果を返す方法をとりました。

0 hits

【63524】callで呼び出すとき タルジャ 09/11/15(日) 19:58 質問
【63526】Re:callで呼び出すとき よろずや 09/11/15(日) 21:12 回答
【63527】Re:callで呼び出すとき ichinose 09/11/15(日) 21:35 発言
【63528】Re:callで呼び出すとき タルジャ 09/11/15(日) 22:30 お礼
【63532】Re:callで呼び出すとき ichinose 09/11/16(月) 7:11 発言
【63541】Re:callで呼び出すとき タルジャ 09/11/16(月) 19:36 お礼
【63530】Re:callで呼び出すとき タルジャ 09/11/15(日) 22:45 お礼

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