Страницы: 1
RSS
автоматически транспонировать данные
 
Помогите автоматически транспонировать данные. Делать все по одной строчки очень долго и утомительно. Я конечно могу записать макрос (в виде последовательности действий) но очень долго, а сделать это циклически не умею. Может можно просто формулами как-нибудь сделать?
 
Формула ТРАНСП Вам не подходит?
 
Это к наверное к VBA-шникам вопрос...
 
{quote}{login=Serge 007}{date=03.01.2010 12:06}{thema=}{post}Формула ТРАНСП Вам не подходит?{/post}{/quote}  
 
Частично подходит, но опять таки все делать нужно по отдельности каждый строчку. Либо я просто не знаю как это сделать сразу
 
Посмотрите пример в файле. У меня был похожий макрос, под Вас его подшаманил:))  
 
Для нормальной работы макроса необходима еще и функция проверки наличия листа, которая в самом конце модуля:))
 
Транспонировать массив значений, полученных из формул, можно формулой массива =ТРАНСП(). При этом сохраняется связь между исходным массивом и транспонированным, то есть при изменении первого меняется и второй.    
Для этого в свободную ячейку (вводом enter) записывается «простая» формула: =ТРАНСП(исходный_массив), причем ссылка на массив должна быть относительной. Результатом формулы, будет ошибка (#ЗНАЧ!), не обращайте внимание, протяните вправо на количество столбцов равное числу строк в исходном массиве, а затем вниз на количество столбцов в исходном массиве. После того, как будет выделен прямоугольник, заполненный #ЗНАЧ!, входите в режим редактирования формул и, ничего не меняя, вводите формулу массива (Ctrl+Shift+Enter).  
Для транспонирования непосредственно числовых значений, выделив нужный диапазон, скопируйте его и в нужном месте вставьте специальной вставкой, выделив:  транспонировать.  
С уважением, Александр.
 
Sh_Alex, спасибо, возьмем на заметку.  
 
Igor67, большой поклон вам. Просто супер!  
 
Всех с Новым годом!
 
Мозг что-то включаться отказывается. Далее идут отнюдь не оптимальные решения.  
Вообще, для данного конкретного случая можно как-то так:  
="№"&ПРАВСИМВ(ТЕКСТ(НАИМЕНЬШИЙ(ЕСЛИ($B$2:$H$26<>"";СТРОКА($B$2:$H$26)*100000+СТОЛБЕЦ($B$2:$H$26)+ПРАВСИМВ($B$2:$H$26;7)/10000000);СТРОКА(A1));"0,0000000");7)  
но в C8 вроде бы корявое значение.  
 
Ещё можно как-то так:  
=ИНДЕКС($1:$65536;ЦЕЛОЕ(НАИМЕНЬШИЙ(ЕСЛИ($B$2:$H$25<>"";1*(СТРОКА($B$2:$H$25)&","&СТОЛБЕЦ($B$2:$H$25)));СТРОКА(1:1)));ПРАВСИМВ(НАИМЕНЬШИЙ(ЕСЛИ($B$2:$H$25<>"";1*(СТРОКА($B$2:$H$25)&","&СТОЛБЕЦ($B$2:$H$25)));СТРОКА(1:1));1))  
 
Номера можно, к примеру, так:  
=ИНДЕКС(A:A;НАИМЕНЬШИЙ(ЕСЛИ($B$2:$H$26<>"";СТРОКА($B$2:$H$26));СТРОКА(A1)))  
 
формулы массива.
 
Вариант
 
Вообщем суть проблемы: имеется БД, состоящая из названия, адреса и телефона. Это БД записана в 1 столбец, а данные расположены поочередно, то есть:  
1 строка: название  
2 строка: адрес  
3 строка: телефон  
4 строка: название  
5 строка: адрес  
6 строка: телефон  
и так далее.. строк несколько тысяч. Требуется разбить этот столбец на три по параметрам (названия в названия и т.д.). Что я придумал: Выделение трех ячеек с данными для 1 учреждения, потом клацаем на соседнюю с названием ячейку правой кнопкой, жмешь специальная вставка, и выбираем транспонирование. В принципе необходимое действие выполнено. Но, т.к. позиций несколько тысяч, вручную это делать очень долго. Поэтому попытался создать макрос (сорри за иероглифы, не получилось убрать, но суть думаю ясна):  
 
Sub Ìàêðîñ1()  
'  
' Ìàêðîñ1 Ìàêðîñ  
'  
' Ñî÷åòàíèå êëàâèø: Ctrl+m  
'  
   Range("B58:B60").Select  
   Selection.Copy  
   Range("C58").Select  
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _  
       False, Transpose:=True  
End Sub  
 
Это макрос работает для конкретных трех ячеек и транспонирует их в столбцы рядом с первой ячейкой из этих трех. Как мне сделать, чтобы каждые три ячейки автоматически транспонировались в столбцы рядом с первой из каждых трех? Или хотя бы, что бы я вручную выделял каждые три ячейки, которые надо транспонировать, запускал макрос и процесс пошел?  
 
Что у меня не получилось, наверно из-за нехватки знаний я не смог задать нужный диапазон для макроса, то есть не 58 строка, а чтобы строке присваивался тот номер, какие ячейки я выделил.
 
Спасители!!!!!!
Страницы: 1
Читают тему
Наверх