Транспонирование таблиц под базы данных

Программирование на Visual Basic for Applications
wap
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 13.08.2007 (Пн) 14:14

Транспонирование таблиц под базы данных

Сообщение wap » 13.08.2007 (Пн) 14:26

В Excelе нагляднне данные располагать слево направо, что и делают обычно,
а для баз данных , напр. Access данные нужно вносить сверху вниз

Наверняка уже существует макрос, который делает необходимое транспонирование, типа:

Код | Название | июль | июнь и т.д.
111 | 251564 | 0707 | 24507
222 | 3434 545 | 0768 | 007254

и т.д.

после обработки макросом, превращаются в:

Код | Название | Данные | Месяц
111 | 251564 | 0707 | июль
222 | 3434 545 | 0768 | июль
111 | 251564 | 24507 | июнь
222 | 3434 545 | 007254 | июнь


Помогите найти подобный маркрос!!!!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.08.2007 (Пн) 16:33

Меняю листок с кодом макроса на бумажку в 50 евро :)
I don't understand. Sorry.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 13.08.2007 (Пн) 17:35

Мне почему-то кажется, что Сводная Таблица "спасет предводителя дворянства" совершенно бесплатно с кодом или без него :-)
Привет,
KL

wap
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 13.08.2007 (Пн) 14:14

Сообщение wap » 14.08.2007 (Вт) 11:14

KL писал(а):Мне почему-то кажется, что Сводная Таблица "спасет предводителя дворянства" совершенно бесплатно с кодом или без него :-)

фокус со сводной таблицей я знаю, но это тоже не быстрый прием:
1. по умолчанию, в сводную добавляются количества значений - приходится менять на суммы
2. если параметров несколько, придется распределять названия групп данных (когда название группы содержится в одной ячейки, а остальные пустые-объединенные)

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 14.08.2007 (Вт) 16:48

Код: Выделить всё

Selection.Copy
Range("Z100").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone,  Transpose:=True
VBA, MSA97

wap
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 13.08.2007 (Пн) 14:14

Сообщение wap » 14.08.2007 (Вт) 17:05

простое транспонирование не решает задачи
обратите еще раз внимание как располагаются данные

да и вообще, не транспонирование это вовсе :)
наверно слово неудачно подобрал
для такой перестановки данных

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 14.08.2007 (Вт) 17:43

ааа. вон, как. для этой задачи проще сделать в акцессе процедурку
мне её делать лень :oops:
дерзай. удачь ;)
VBA, MSA97

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 14.08.2007 (Вт) 18:22

wap писал(а):
KL писал(а):Мне почему-то кажется, что Сводная Таблица "спасет предводителя дворянства" совершенно бесплатно с кодом или без него :-)

фокус со сводной таблицей я знаю, но это тоже не быстрый прием:
1. по умолчанию, в сводную добавляются количества значений - приходится менять на суммы
2. если параметров несколько, придется распределять названия групп данных (когда название группы содержится в одной ячейки, а остальные пустые-объединенные)


1. А кто заставляет пользоваться настройками по-умолчанию? А VBA на что?

2. Тут я, сказать по правде, ничего не понял, но думаю что, речь тоже о конфигурации полей и строк. Если так, то опять-таки VBA поможет.

Вот тут есть кое-что об использовании объектной модели Сводных Таблиц в VBA:

http://www.j-walk.com/ss/excel/usertips ... etable.txt
http://www.contextures.com/xlPivot03.html
http://www.contextures.com/xlPivot04.html
http://www.contextures.com/xlPivot11.html
http://www.contextures.com/xlPivot09.html
http://www.contextures.com/xlPivot12.html
http://msdn2.microsoft.com/en-us/librar ... (office.10).aspx
http://msdn2.microsoft.com/en-us/librar ... (office.10).aspx
http://msdn2.microsoft.com/en-us/librar ... (office.11).aspx

тут пример превращения Сводных Таблиц в простой диапазон:
http://lacher.com/examples/lacher36.htm
Привет,
KL

wap
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 13.08.2007 (Пн) 14:14

Сообщение wap » 15.08.2007 (Ср) 11:46

я думал, что для создания сводных таблиц нужно явно указывать названия полей

поэтому видел решение задачи примерно так:

берем нужное количество заголовочных столбцов

Код | Название |
111 | 251564 |
222 | 3434 545 |

копируем на другой лист
и добавляем столбцы из столбцов с исходными данными (из данных заполняем 3-й столбец, а из заголока столбца делаем 4-й столбец:

Код | Название | Данные | Месяц
111 | 251564 | 0707 | июль
222 | 3434 545 | 0768 | июль

Затем, данные следующего столбца с иходными данными,
добавляем аналогично, вниз таблицы (стык в стык):
Код | Название | Данные | Месяц
111 | 251564 | 0707 | июль
222 | 3434 545 | 0768 | июль
111 | 251564 | 24507 | июнь
222 | 3434 545 | 007254 | июнь

и т.д. по количеству столбцов


а так загрузил... придется многа думать! :)
За дельные ссылки спасибо!

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 15.08.2007 (Ср) 14:56

Код: Выделить всё
Sub nnn()
Sheets("newlist").Cells(1, 1).Value = "Код"
Sheets("newlist").Cells(1, 2).Value = "Название"
Sheets("newlist").Cells(1, 3).Value = "Данные"
Sheets("newlist").Cells(1, 4).Value = "Месяц"
n = 2 ' количество столбцов с месяцами
k = n + 3 'конец диапазона (последний столбец в таблице)
'начинаем обрабатывать с третьего столбца
y = 0
Do While Cells(2, 1).Offset(y, 0).Row <> Cells(20000, 1).End(xlUp).Offset(1, 0).Row
    For i = 3 To k
     Sheets("newlist").Cells(20000, 1).End(xlUp).Offset(1, 0).Value = Cells(2, 1).Offset(y, 0).Value 'код
     Sheets("newlist").Cells(20000, 1).End(xlUp).Offset(0, 1).Value = Cells(2, 2).Offset(y, 0).Value 'название
     Sheets("newlist").Cells(20000, 1).End(xlUp).Offset(0, 2).Value = Cells(2, i).Offset(y, 0).Value 'Данные
     Sheets("newlist").Cells(20000, 1).End(xlUp).Offset(0, 3).Value = Cells(1, i).Value 'месяц
    Next
    y = y + 1
Loop
End Sub
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

wap
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 13.08.2007 (Пн) 14:14

Сообщение wap » 16.08.2007 (Чт) 14:05

Calvin, спасибо!
и даже без массивов обошлись


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 114

    TopList