| 
    
     |  | ▼ichinose さん: >こんばんは。
 >>モジュール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を使って、
 >パラメータで結果を返す方法をとりました。
 
 
 ichinoseさん、ありがとうございます。
 パラメータ(Retcode)がよくわかりません。
 ichinoseさんのアドバイスを元に勉強しなおします。
 ありがとうございました。
 
 
 |  |