Простое разделение библиографических полей в 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
Результаты: