一連のシートを通過し、入力されたデータに基づいて名前を収集し、適切にフォーマットされた Word ドキュメントにすべてを配置する単純なマクロがあります。私はそれのほとんどを理解しましたが、1つのバグが私を悩ませています. 名前に基づいて携帯電話番号を取得するコードに関係しています。関数は次のとおりです。
Function findCell(namePerson As String) As String
Dim splitName As Variant
Dim lastName As String
Dim firstName As String
splitName = Split(namePerson, " ")
lastName = splitName(UBound(splitName))
ReDim Preserve splitName(UBound(splitName) - 1)
firstName = Join(splitName)
For Each b In Worksheets("IT").Columns(1).Cells
If b.Value = lastName Then
If Sheets("IT").Cells(b.row, 2).Value = firstName Then findCell = Sheets("IT").Cells(b.row, 4).Value
End If
Next
End Function
携帯電話番号は、「IT」と呼ばれる独自のシートにあります。最初の列は姓、2 番目の列は名、4 番目の列は携帯電話番号です。ファーストネームに複数の部分がある人もいます。そのため、奇妙な分割、ReDim-ing、および結合が見られるのはそのためです。その部分はうまく機能します。
問題は、姓が同じ人が複数いる場合に発生します。この関数は、最初の If ステートメントを実行して、正しい姓を持つ人を見つけます。次に、名を比較します。一致する場合は、携帯電話番号の値を返す必要があります。その後、最初の名前が一致しなくても for ループは停止します。したがって、誰かがたまたま同じ姓を持っていても、名がチェックアップされない場合、何も返されません。
return 呼び出しをループの外にまとめてみましたが、それでも違いはありません。