MS Access 03 — нормализация данных из электронной таблицы Excel

StackOverflow https://stackoverflow.com/questions/1159697

Вопрос

У меня вопрос о способе разобрать что-то на части.Я получаю таблицу Excel, содержащую данные, необходимые для создания одного отчета.Это довольно просто и понятно, однако есть одна часть, которая меня немного огорчает.

В электронной таблице Excel есть столбец, в котором в одном столбце перечислены «участвующие стороны».Обычно это имена 12 человек, разделенные запятыми, но в скобках также указывается orgID:

Джо Смит (DIV32), Джон Доу (DIV12), Роджер Эндрюс (DIV14, DIV67, DIV01) и т. д.

и мне нужно разбить их на отдельные столбцы, чтобы они были отдельными полями, когда я импортирую их в доступ.Я знаю, как «текст в столбцы» в Excel, но когда это становится невозможным, jon doe (DIV13, DIV54 и т. д.), имеет более одного деления.

Не знаю, как это сделать в Access, но хотелось бы знать.

У кого-нибудь есть формула Excel или метод доступа для этого, пожалуйста?

Это было полезно?

Решение

Я предполагаю, что вы импортируете это в свою базу данных.Если нет, то, вероятно, вам будет проще это сделать, даже если это временно;и переделывается каждый раз, когда вам нужно запустить отчет

В конечном итоге у вас будет три таблицы, представляющие эту ситуацию.

  1. сторона (человек)
  2. Организация
  3. 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, чтобы заменить все вхождения «*» на «,»

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top