Простой способ нормализовать листы Excel?

У меня есть несколько рабочих листов Excel довольно хорошего размера (индексированных WorksheetID), которые по существу представляют собой плоские таблицы базы данных: строки — это записи (индексированные DataRecordID на одном листе), столбцы — это поля (индексированные DataFieldID на одном рабочем листе), а ячейки содержат значения полей (Value) для соответствующих записей (или пусты).

Я заинтересован в том, чтобы разбить их на (многие) записи, подобные этой, чтобы я мог импортировать их в MS Access:

ID | WorksheetID | DataRecordID | DataFieldID | Value

Я уже сделал это вручную. Я вижу, что написать сценарий VBA, который пролистывает листы и (необязательно) удалять записи в итоговой таблице, вероятно, несложно.

У меня вопрос: прежде чем я закатаю рукава и начну программировать, есть ли уже встроенная возможность в Excel 2010, для которой мне даже не нужно писать сценарий?


person John    schedule 14.08.2012    source источник
comment
Разве в Access нет встроенного нормализатора? У меня смутные воспоминания о том, как я использовал его в версии 97 года.   -  person Marc B    schedule 14.08.2012
comment
@Марк Б. Ты прав. Позвольте мне проверить это.   -  person John    schedule 14.08.2012
comment
@Marc B Я не думаю, что функции нормализации, которую я видел, когда импортировал таблицы, достаточно. Это позволило бы мне создать отдельную таблицу для каждого поля, если бы я хотел, но это не совсем то, что мне нужно. Хорошая мысль, однако!   -  person John    schedule 14.08.2012
comment
Я не могу сказать наверняка, но думаю, что это может помочь: используя vba">stackoverflow.com/questions/10921791/   -  person Doug Glancy    schedule 14.08.2012
comment
@DougGlancy Выглядит очень полезно!   -  person John    schedule 14.08.2012


Ответы (1)


Для этого вам не нужен сценарий, если источники данных имеют согласованную структуру. Основной процесс описан (с картинками!) #20543651">здесь. Однако, поскольку речь шла об одной матрице, вам потребуется несколько дополнительных шагов:

Встройте в DataRecordIDs указание их происхождения рабочего листа. Скажем, с такой формулой, как =A2&"|WorksheetID", скопированной в столбец, вставленный как (новый) ColumnB, для всех листов, предполагая, что ваш первый DataFieldID находится в A2.

На шаге № 4 процесса (шаг 2b из 3 в мастере) вам нужно будет добавить соответствующие диапазоны с каждого листа по отдельности.

После того, как у вас есть таблица результатов, вам нужно будет вставить новый столбец B и применить текст к столбцам, разделенным другим | к столбцу A.

person pnuts    schedule 13.12.2015