Простое разделение библиографических полей в Excel

У меня есть простая проблема, которую я не могу решить (я не очень хорош в 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 ответ

Вы можете рассмотреть возможность использования 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

Результаты:

Другие вопросы по тегам