일련의 시트를 통과하고 입력 된 데이터를 기반으로 이름을 수집 한 다음 간단한 형식의 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"라는 고유 시트에 있습니다. 첫 번째 열에 성이 있고 두 번째 열에는 이름이 있고 네 번째 열에는 휴대 전화 번호가 있습니다. 어떤 사람들은 이름에 대해 여러 부분을 가지고 있습니다. 그래서 그 이상한 분열, ReDim-ing 및 다시 합류하는 것을 보았습니다. 그 부분은 잘 작동합니다.
같은 성을 가진 사람이 여러 명일 때 문제가 발생합니다. 함수는 첫 번째 If 문을 통해 성을 가진 사람을 찾습니다. 그런 다음 이름을 비교합니다. 일치하면 휴대 전화 번호의 값을 반환해야합니다. 그 후 첫 번째 이름이 일치하지 않는 경우에도 for 루프가 중지됩니다. 따라서 누군가가 같은성에 생기면 이름은 확인하지 않고 아무 것도 반환하지 않습니다.
나는 루프 밖에서 모두 리턴 콜을 시도했지만, 여전히 차이를 만들지는 못했다.
Brad가 보여 주듯이 이후 처리를 중단하려면 반환 값을 설정 한 직후에 'Exit Function'또는 'Exit For'를 추가해야합니다. 반환 값을 설정하면 함수 코드가 * 완료 * 일 때 반환 할 내용 만 결정됩니다. 함수가 즉시 종료되어 해당 값을 반환하지는 않습니다. –