|
▼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さんのアドバイスを元に勉強しなおします。
ありがとうございました。
|
|