|
こんばんは。
>モジュール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を使って、
パラメータで結果を返す方法をとりました。
|
|