Excel中书目字段的简单分离

时间:2014-03-29 11:47:22

标签: excel vba bibliography

我有一个我无法解决的简单问题(我对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位作者)。 我希望将每一行分开,以便我在一列中互相拥有,并在其旁边的列中加入。如果两个作者具有相同的隶属关系,则他们应该在不同的行中,并且他们的联盟会在每个作者旁边写下。

我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您可以考虑使用Regex进行模式匹配。例如,如果您在单元格A1中有一个条目,如下所示:

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

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

有关详细信息,请参阅此post


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

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

结果:

enter image description here