MS Access 03 - нормализация данных из электронной таблицы Excel - PullRequest
0 голосов
/ 21 июля 2009

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

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

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

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

Не уверен, как это сделать при доступе, но хотел бы знать.

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

Ответы [ 2 ]

1 голос
/ 23 июля 2009

Вот решение:

Я написал функцию, которая заменяет все вхождения строки 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, чтобы заменить все вхождения "*" на ","

1 голос
/ 21 июля 2009

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

В итоге у вас будет три таблицы для представления этой ситуации

  1. Вечеринка (человек)
  2. theOrganisation
  3. thePartyOrg

theParty с идентификатором столбца

Организация будет иметь свой собственный столбец идентификаторов.

thePartyOrder будет иметь свой собственный столбец ID, один для theParty и один для theOrganisation

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

Поскольку эта информация о соединении просто хранится в виде текста в одном столбце, вероятно, проще всего сначала прочитать все это в промежуточной таблице, а затем проанализировать этот столбец в VBA

...