後綴我在例如像一列全名的列表中提取的名字:從一系列具有使用VBA
Dave M. Butterworth
Dave M. Butterworth,II
H.F. Light jr
H.F. Light ,jr.
H.F. Light sr
Halle plumerey
的名字都在列。首字母不僅限於這些。
我想使用通用函數提取姓氏。可能嗎?
後綴我在例如像一列全名的列表中提取的名字:從一系列具有使用VBA
Dave M. Butterworth
Dave M. Butterworth,II
H.F. Light jr
H.F. Light ,jr.
H.F. Light sr
Halle plumerey
的名字都在列。首字母不僅限於這些。
我想使用通用函數提取姓氏。可能嗎?
考慮以下UDF:
Public Function LastName(sIn As String) As String
Dim Ka As Long, t As String
ary = Split(sIn, " ")
Ka = UBound(ary)
t = ary(Ka)
If t = "jr" Or t = ",jr" Or t = "sr" Or t = ",jr." Then
Ka = Ka - 1
End If
t = ary(Ka)
If InStr(1, t, ",") = 0 Then
LastName = t
Exit Function
End If
bry = Split(t, ",")
LastName = bry(LBound(bry))
End Function
注:
你將不得不擴大這一行:
If t = "jr" Or t = ",jr" Or t = "sr" Or t = ",jr." Then
要包含您希望排除的所有其他初始集。
您還必須更新此代碼才能處理其他例外情況!
感謝您的答覆。我根據自己的需要做了一些小的調整,並且工作。 –
@SahilOberoi感謝您的反饋! –
刪除標點符號,拆分爲數組並向後走,直到找到與「ii/jr/sr/dr」等可忽略的標記的查找不匹配的字符串。
您還可以添加一個支票以消除基於其長度的令牌。
Function LastName(name As String) As String
Dim parts() As String, i As Long
parts = Split(Trim$(Replace$(Replace$(name, ",", ""), ".", "")), " ")
For i = UBound(parts) To 0 Step -1
Select Case UCase$(parts(i))
Case "", "JR", "SR", "DR", "I", "II"
Case Else:
LastName = parts(i)
Exit Function
End Select
Next
End Function
Hii Alex, 你能解釋一下替換$和修剪$的作用,以及它們與普通函數的不同之處。 –
感謝您的回答。我根據自己的需要做了一些小的調整,併發揮了作用。 –
查看http://stackoverflow.com/questions/519579/mid-vs-midmid –
那麼LastNames是'Butterworth','Light'和'Plumerey'? – PaulFrancis