Страницы: 1
RSS
Расстановка столбцов в нужном порядке
 
Всем здравствовать!  
Необходимо расставить столбцы в нужном порядке  
1 - номер(№)  
2 - клиент  
3 - адрес  
4 - сумма  
5 - вес  
8 - рампа  
желательно все это прописать в теле макроса  
если есть возможность то необходимо учесть несколько вариантов заголовков столбцов (номер и №, Адрес и адр.)  
пример в аттаче  
заранее THX
001,010,011,100,101
 
Записать процесс рекордером не пробовали?  
Можно получить код вроде такого (после небольшой коррекции):  
 
Sub tt()  
   Columns("G:G").Cut  
   Columns("A:A").Insert Shift:=xlToRight  
End Sub  
 
Теперь добавьте цикл (или повторите несколько раз) поиск по первой строке своих значений - и в общем код готов.  
Но вот разночтения наименований мне не нравятся - № может ведь тогда быть не только в столбце номеров, но и например в "ГосН или Время", сочетание  "адр." тоже вдруг может оказаться включено в другое слово (хотя в примере такого нет).
 
Можете воспользоваться готовым решением:  
http://excelvba.ru/code/ArraySwapColumns  
 
Пример использования:  
 
Sub test()  
   Dim ra As Range: Set ra = Range([A1], Range("A" & Rows.Count).End(xlUp)).Resize(, 8)
   ra.Value = ArraySwapColumns(ra.Value, "2,3,8,4,5,1,,")  
End Sub  
 
 
Пример в файле: http://excelvba.ru/XL_Files/Sample__01-05-2011__20-11-20.zip
 
Пробуйте.  
 
=60066=
 
{quote}{login=[25rus]Gleyd}{date=01.05.2011 05:37}{thema=Расстановка столбцов в нужном порядке}{post}... Необходимо... желательно... необходимо учесть несколько вариантов... заранее THX{/post}{/quote}
Делаем по-рабоче-крестьянски, записываем рекордером, правим... Стандартная сортировка полей/столбов по доп "шапке" -  в скрине... ;)  
-79531-
 
{quote}{login=Казанский}{date=01.05.2011 06:13}{thema=}{post}Пробуйте.  
 
=60066={/post}{/quote}  
отличные код!  
вот только столбец "Рампа" должен быть 8...
001,010,011,100,101
 
{quote}{login=Hugo}{date=01.05.2011 06:01}{thema=}{post}Записать процесс рекордером не пробовали?  
Можно получить код вроде такого (после небольшой коррекции):  
 
Sub tt()  
   Columns("G:G").Cut  
   Columns("A:A").Insert Shift:=xlToRight  
End Sub  
 
Теперь добавьте цикл (или повторите несколько раз) поиск по первой строке своих значений - и в общем код готов.  
Но вот разночтения наименований мне не нравятся - № может ведь тогда быть не только в столбце номеров, но и например в "ГосН или Время", сочетание  "адр." тоже вдруг может оказаться включено в другое слово (хотя в примере такого нет).{/post}{/quote}  
пробовал.  
правил полученный код около недели, пока в конец не запутался)  
да и код получился огромный в итоге....  
разночтения могут быть только в заголовках столбцов, в таблице такой текст не встретится
001,010,011,100,101
 
{quote}{login=}{date=01.05.2011 06:18}{thema=Re: Расстановка столбцов в нужном порядке}{post}{quote}{login=[25rus]Gleyd}{date=01.05.2011 05:37}{thema=Расстановка столбцов в нужном порядке}{post}... Необходимо... желательно... необходимо учесть несколько вариантов... заранее THX{/post}{/quote}
Делаем по-рабоче-крестьянски, записываем рекордером, правим... Стандартная сортировка полей/столбов по доп "шапке" -  в скрине... ;)  
-79531-{/post}{/quote}  
было бы слишком просто)))  
вариантов расположения столбцов в первоначальной таблице - больше одного приведенного в примере...
001,010,011,100,101
 
{quote}{login=EducatedFool}{date=01.05.2011 06:11}{thema=}{post}Можете воспользоваться готовым решением:  
http://excelvba.ru/code/ArraySwapColumns  
 
Пример использования:  
 
Sub test()  
   Dim ra As Range: Set ra = Range([A1], Range("A" & Rows.Count).End(xlUp)).Resize(, 8)
   ra.Value = ArraySwapColumns(ra.Value, "2,3,8,4,5,1,,")  
End Sub  
 
 
Пример в файле: http://excelvba.ru/XL_Files/Sample__01-05-2011__20-11-20.zip{/post}{/quote}  
 
та же проблема - порядок столбцов не постоянный
001,010,011,100,101
 
т.е. вы хотите сказать, что и заголовки столбцов, в принципе, могут быть любые,  
да и порядок этих столбцов произвольный?  
 
тут без использования ИИ не обойтись, и никакие макросы не помогут.
 
было бы слишком просто))) вариантов расположения столбцов в первоначальной таблице - больше одного приведенного в примере...  
Но варианты-то эти где-то хранятся? Что нельзя над "щапкой" все разместить или в первую строку подставлять?.. Это и макросу/сам надо ведь подсказывать иль,  чего паче, в его нутро вколачивать...  
ps Кому надо - ищет решение, кому лень - причину...
 
{quote}{login=Z}{date=01.05.2011 06:41}{thema=}{post}было бы слишком просто))) вариантов расположения столбцов в первоначальной таблице - больше одного приведенного в примере...  
Но варианты-то эти где-то хранятся? Что нельзя над "щапкой" все разместить или в первую строку подставлять?.. Это и макросу/сам надо ведь подсказывать иль,  чего паче, в его нутро вколачивать...  
ps Кому надо - ищет решение, кому лень - причину...{/post}{/quote}  
Гражданин Казанский опроверг Вашу . зрения)  
варианты эти могут храниться только в голове у человека присылающего данную таблицу по почте, т.е. по желанию...
001,010,011,100,101
 
{quote}{login=EducatedFool}{date=01.05.2011 06:40}{thema=}{post}т.е. вы хотите сказать, что и заголовки столбцов, в принципе, могут быть любые,  
да и порядок этих столбцов произвольный?  
 
тут без использования ИИ не обойтись, и никакие макросы не помогут.{/post}{/quote}  
 
собственно.... есть люди знающие что это не так)  
надеюсь сам таким стать со временем xD
001,010,011,100,101
 
Всем спасибо  
Казанский - Огромный респект)
001,010,011,100,101
 
с восьмым столбцом разобрался)  
дажеть регистр различает сам:)  
COOOOOOL!!!
001,010,011,100,101
 
Кому интересно - конечный вариант (с)Казанский  
 
 
Option Explicit  
 
Const ORDER = "номер\№\No,клиент,адр*,сумма,вес\масс*,вод*, гос*, рампа"  
'Варианты одного заголовка разделять "\", можно использовать подстановочные знаки  
 
Sub Gleyd()  
Dim x, y, i&, c As Range  
For Each x In Split(ORDER, ",")  
   For Each y In Split(Trim(x), "\")  
       Set c = Rows(1).Find(Trim(y), , xlValues, xlPart)  
       If Not c Is Nothing Then  
           i = i + 1  
           If c.Column <> i Then  
               c.EntireColumn.Cut  
               Cells(1, i).Insert Shift:=xlToRight  
           End If  
           Exit For  
       End If  
   Next  
Next  
End Sub
001,010,011,100,101
 
Казанский красиво реализовал то, что я выше в общем описал словами.  
В общем-то это наверное единственное направление, которое могло быть.  
Решение с Const ORDER и двумя Split хорошее, запомнить всем! :)
 
Похожая тема, только немного упрощается тем, что названия столбцов всегда одинаковые (которые мне нужны), но вот они могут распологаться, как в columns(1) и columns(8), так и в колонках 29 и 33, спасибо службе 1С. Мне нужно выводить их произведение в последний столбец таблицы. Вы не могли бы подсказать, как зная названия столбцов сделать это?
Страницы: 1
Читают тему
Наверх