Option Explicit
Sub SetCampaignFlag()
Dim stKonyuList() As String
Dim c As Long
For c = 2 To Range("F65536").End(xlUp).Row
ReDim Preserve stKonyuList(c - 2)
stKonyuList(c - 2) = Range("F" & c).Value
Next
For c = 2 To Range("B65536").End(xlUp).Row
'以下のIf文の中で、関数からの戻り値を利用している
'↓のif文がなぜ成り立つのかがピンときません。
’Functionプロシージャ戻り値がFalseかTrueならば
’ If IsExists(Range("B" & c).Value, stKonyuList) =False Then
'と書きたくなります。考え方を教えてください。
’よろしくお願いします。
If IsExists(Range("B" & c).Value, stKonyuList) Then
Range("C" & c).Value = "○"
Else
Range("C" & c).ClearContents
End If
Next
End Sub
Function IsExists(s As String, ary() As String) As Boolean
Dim c As Long
Dim B As Boolean
B = False
For c = LBound(ary) To UBound(ary)
If s = ary(c) Then
B = True
Exit For
End If
Next
IsExists = B
End Function
受講生さんの投稿
(投稿ID: 3049)
Chap 04-23
小川慶一さんのコメント
(コメントID: 4507)
この件は、本講座の最初でしつこく説明している「式と戻り値」の話が理解のための情報です。
以下の最初の6本の動画です。
https://forum.pc5bai.com/lesson/course/58
それを踏まえて、まずは抽象的な説明をしてみます。
まずは、以下の構文で考えてみましょう。
式には戻り値があります。
If構文中の以下の評価式は、True/False のどちらかを戻り値として返します。
ですので、[a]を含むIf構文から見ると、[a]の式の評価が終わった段階では、以下のどちらかの状態です。
そして、If文は、この式の値がTrueかFalseかによって条件分岐を行います。
ここまで、問題ないでしょうか。
問題なければ、続きです。
さて、こうしてできあがった上記の式を使って説明しますが、実は、If構文の中に、比較演算子が含まれている必要はないのです。必要なのは、IF構文が、True/Falseのどちらかとして扱える値を受け取ることだけなのです。
事実、以下のプロクラムは問題なく動きます。(以下は、「True/Falseのどちらかとして扱える値を受け取る」ことだけに特化したメチャメチャシンプルバージョンです)
であれば、True/False のどちらかを戻り値として返する関数がIf構文中に埋め込まれていたとしてもまったく問題はありませんね。
ということなのですが、この説明でまずはいかがでしょうか。