2009-07-21 3 views
0

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

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

Джо Смит (DIV32), John Doe (DIV12), Роже Andrews (DIV14, DIV67, DIV01) и т.д.

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

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

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

ответ

1

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

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

  1. theParty (человек)
  2. theOrganisation
  3. thePartyOrg

theParty с колонкой ID

theOrganisation будет иметь его ' s собственный идентификатор столбца

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

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

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

1

Вот решение:

I 'написана функция, которая заменяет все вхождения строки 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.В столбце В, настроить функцию, чтобы заменить запятые как этого

= replace_paren (A1, "", "*")

3) Заполните формулу вниз по столбцу

4) Скопировать и вставить столбец в качестве значений

5) текст Использования Excel для столбцов разбора столбца с помощью «» в качестве разделителя

6) Используйте replace_paren снова, чтобы заменить все вхождения „*“ на «»

+0

Обратите внимание, что разрывы кода, если есть вложенные круглые скобки. – Emily

Смежные вопросы