MS Access 03 — нормализация данных из электронной таблицы Excel
-
18-09-2019 - |
Вопрос
У меня вопрос о способе разобрать что-то на части.Я получаю таблицу Excel, содержащую данные, необходимые для создания одного отчета.Это довольно просто и понятно, однако есть одна часть, которая меня немного огорчает.
В электронной таблице Excel есть столбец, в котором в одном столбце перечислены «участвующие стороны».Обычно это имена 12 человек, разделенные запятыми, но в скобках также указывается orgID:
Джо Смит (DIV32), Джон Доу (DIV12), Роджер Эндрюс (DIV14, DIV67, DIV01) и т. д.
и мне нужно разбить их на отдельные столбцы, чтобы они были отдельными полями, когда я импортирую их в доступ.Я знаю, как «текст в столбцы» в Excel, но когда это становится невозможным, jon doe
(DIV13, DIV54 и т. д.), имеет более одного деления.
Не знаю, как это сделать в Access, но хотелось бы знать.
У кого-нибудь есть формула Excel или метод доступа для этого, пожалуйста?
Решение
Я предполагаю, что вы импортируете это в свою базу данных.Если нет, то, вероятно, вам будет проще это сделать, даже если это временно;и переделывается каждый раз, когда вам нужно запустить отчет
В конечном итоге у вас будет три таблицы, представляющие эту ситуацию.
- сторона (человек)
- Организация
- thePartyOrg
theParty со столбцом ID
у организации будет собственный столбец идентификатора.
У thePartyOrder будет собственный столбец идентификатора: один для Party и один для организации.
Всякий раз, когда вы хотите представлять партию в качестве члена организации, вы должны убедиться, что партия существует/создана;Организация существует/создана, а затем создайте запись в таблице thePartyOrg, которая указывает на обе.
Поскольку эта информация о соединении просто хранится в виде текста в одном столбце, вероятно, проще всего сначала прочитать все это в промежуточной таблице, а затем проанализировать этот столбец в VBA.
Другие советы
Вот решение:
Я написал функцию, которая заменяет все вхождения строки strFind на strReplace, но только если strFind находится в круглых скобках.Таким образом, вы можете заменить все символы «,» чем-то другим (например,«*»), затем перенесите текст Excel в столбцы, а затем снова замените «*» на «,».
Function replace_paren(strSource As String, strFind As String, strReplace As String) As String
' Within strString, replaces any occurrence of strFind with strReplace *IF* strFind occurs within parentheses '
Dim intOpenParenIndex As Integer
Dim intCloseParenIndex As Integer
Do
intOpenParenIndex = InStr(intCloseParenIndex + 1, strSource, "(")
intCloseParenIndex = InStr(intOpenParenIndex + 1, strSource, ")")
If intOpenParenIndex = 0 Then
Exit Do
End If
Mid(strSource, intOpenParenIndex, intCloseParenIndex - intOpenParenIndex) = Replace(Mid(strSource, intOpenParenIndex, intCloseParenIndex - intOpenParenIndex), strFind, strReplace)
Loop
replace_paren = strSource
End Function
Итак, шаги:
1) скопируйте этот макрос в модуль в книге Excel.
2) Допустим, ваша строка находится в столбце A.В столбце B настройте функцию замены запятых вот так
=replace_paren(A1,",","*")
3) Заполните формулу вниз по столбцу
4) Скопируйте и вставьте столбец как значения.
5) Используйте текст Excel в столбцах для анализа столбца, используя «,» в качестве разделителя.
6) Снова используйте replace_paren, чтобы заменить все вхождения «*» на «,»