首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果姓有多个部分,则将全名分为姓、名(即van、de)

如果姓有多个部分,则将全名分为姓、名(即van、de)
EN

Stack Overflow用户
提问于 2019-07-03 00:59:18
回答 2查看 66关注 0票数 1

我有一个有多个名字的列表,但是,有些名字有多个姓氏:例如。"Eddie van Halen。我不能让我的代码输出:"van Halen,Eddie",而是输出:"Van,Eddie“

有没有办法检查names()是否有两个以上的部分,如果有,就把names(1) & names(2)作为姓氏,而不是检查"van“。也就是说,如果一个姓氏包含其他部分,比如"de“。

另外,如果全名没有多个部分,例如:“志愿者”,代码应该跳过这个名称。

下面是我当前的代码:

代码语言:javascript
复制
Sub Filter()

Dim r As Range
Dim c As Range
Dim names() As String
Dim lastrow As Long

lastrow = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row

With ActiveSheet

Set r = .Range("K3:K" & lastrow)

For Each c In r
    names = Split(c.Value, " ")

    If IsEmpty(c.Value) Then Exit Sub

    ElseIf InStr(c.Value, "van") > 0 Then

        c.Value = names(1) & names(2) & ", " & names(0)

    Else
        c.Value = names(1) & ", " & names(0)

    End If
Next c

End With

End Sub
EN

回答 2

Stack Overflow用户

发布于 2019-07-03 01:13:07

Split接受第三个参数"Limit",一旦结果有那么多条目,就可以用它来停止拆分。

代码语言:javascript
复制
    names = Split(c.Value, " ", 2)

在这种情况下,names将始终具有最多2个元素。

票数 2
EN

Stack Overflow用户

发布于 2019-07-03 01:57:35

作为选择,您可以使用正则表达式。下面的正则表达式匹配所有不以van、von、de等开头的单词。您可以随意添加您的单词。作为边缘情况,名称本身可以以van或von开头(例如,Vonder)。为了处理这种情况,我在排除的match中添加了\b,因此这些前缀必须是独立的。另一种情况,正如@ScottCraner所指出的,是三个部分的名称(就像他示例中的Mary Lou Smith )。在这种情况下,您可以使用Count of matches (x变量)来处理这些情况。例如,如果有三个名称,您可以连接任何部分。

代码语言:javascript
复制
Sub F()

    '// Tools -> References -> Microsoft VBSscript Regular Expressions 5.5
    Dim re As RegExp, mc As MatchCollection, m As Match, s$, x%

    Set re = New RegExp
    re.IgnoreCase = True
    re.Global = True
    re.Pattern = "\b(?!(van|von|de)\b)[a-z]+"
    Set mc = re.Execute("van Halen, Vanzen")
    If mc.Count > 0 Then
        For x = 0 To mc.Count - 1
            MsgBox mc(x)
        Next
    Else
        MsgBox "No matches were found.", vbExclamation
    End If

    '// Output:
    '//   Halen
    '//   Vanzen

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56857103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档