-1

我有一个无法解决的简单问题(我不擅长 VBA)。我正在尝试分离如下所示的数据:

[Buckley, Peter J.] Univ Leeds, Sch Business, Ctr Int Business, Leeds LS2 9JT, W Yorkshire, England; [Hashai, Niron] Hebrew Univ Jerusalem, Jerusalem Sch Business Adm, IL-91905 Jerusalem, Israel

基本上 - 方括号内的作者(可能不止一位作者),然后是他/他们的单位,然后是方括号内的第二位作者和他的单位,依此类推(在某些情况下有10-15作者)。我希望将每一行分开,以便我将彼此放在一列中,并将他的从属关系放在旁边的列中。如果两个作者有相同的单位,他们应该在不同的行中,他们的单位写在他们每个人旁边。

我将衷心感谢您的帮助!

4

1 回答 1

0

您可以考虑使用 Regex 进行模式匹配。例如,如果您在单元格 A1 中有这样的条目:

[Buckley, Peter J.] Univ Leeds, Sch Business, Ctr Int Business, Leeds LS2 9JT, W Yorkshire, England; 

将您的 VBA 项目的引用添加到:“Microsoft VBScript 正则表达式 5.5”

有关更多详细信息,请参阅此帖子


此代码将提取作者并将其显示在消息框中:

Sub splitUpRegexPattern()
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim Myrange As Range

    Set Myrange = ActiveSheet.Range("A1")

    For Each C In Myrange
        strPattern = "(^\[)([a-zA-Z]*\,\s[a-zA-Z]*\s[a-zA-Z]\.?)(\])(.*)"

        If strPattern <> "" Then
            strInput = C.Value
            strReplace = "$1"

            With regEx
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = strPattern
            End With

            If regEx.test(strInput) Then
                MsgBox ("Author: " & regEx.Replace(strInput, "$2"))
            Else
                MsgBox ("Not Matched")
            End If
        End If
    Next
End Sub

结果:

在此处输入图像描述

于 2014-03-29T14:29:33.273 回答