Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2009, 08:42   #1
verdi
 
Регистрация: 12.08.2009
Сообщений: 5
По умолчанию Объединение столбцов

Добрый день!
Подскажите, пожалуйста, макрос для объединения столбцов.
Таблице в экселе, пример во вложении (в ворде)

Первые 4 столбца - то, что есть, последний - то, что должно получиться в результате.
т.е., нужно как-то объединить данные из столбцов через запятую с указанием названия столбцов в одной строке.
Отдельно для каждой строки.

Пробовал использовать формулы типа "Сцепление", но это не помогает, т.к. полученные данные нужно перенести в другую книгу, при этом, не засоряя ее дополнительными листами с данными + эти данные необходимо будет менять. Словом, нужен макрос, чтобы данные можно было редактировать прямо в тех ячейках, в которых мы их видим.
Нужно, чтобы результат не был привязан никак к исходным данным.

Сам от программирования также далек, поэтому, к сожалению, сам написать макрос не могу, а руководство задачу поставило.
Буду очень признателен за помощь!
Вложения
Тип файла: doc Пример.doc (34.5 Кб, 55 просмотров)
verdi вне форума Ответить с цитированием
Старый 13.08.2009, 09:27   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно так:
Код:
Sub Main()
    Dim i As Long, a(), b(): Application.ScreenUpdating = False
    a = Range([A2], Cells(Cells(Rows.Count, 1).End(xlUp).Row, 4)).Value: ReDim b(1 To UBound(a, 1), 1 To 1)
    For i = 1 To UBound(a, 1): b(i, 1) = "Тел.:" & a(i, 1) & ", Факс: " & a(i, 2) & ", E-mail:" & a(i, 3) & ", Сайт:" & a(i, 4): Next
    Range([E2], Cells(UBound(b, 1) + 1, 5)).Value = b
End Sub
Пример во вложении. Запустите макрос "Main".
Вложения
Тип файла: rar Книга1.rar (6.7 Кб, 92 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 14.08.2009, 15:33   #3
verdi
 
Регистрация: 12.08.2009
Сообщений: 5
По умолчанию

Хорошая работа неизменно вызывает восхищение, до чего все просто использовать, четкий и понятный результат. Спасибо Вам огромное!

Возможно ли сделать так, чтобы макрос так поступал с выделенным мышкой диапазоном, объединяя данные в тех же ячейках, в которых они находятся, или его нужно переписывать под каждый конкретный диапазон?

Баз ОЧЕНЬ много, и все разные. Коллеги постарались на славу

Последний раз редактировалось verdi; 14.08.2009 в 15:37. Причина: дополнение, нечетко выразился.
verdi вне форума Ответить с цитированием
Старый 17.08.2009, 05:37   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Требуется уточнение. Лучше всего на примере. Так, если в примере из вложения в посте № 2 выделить диапазон ячеек "B2:C3", то что в каких ячейках должно появиться? Что делать, если есть пустые ячейки в выделенном диапазоне? Что делать, если в выделенный диапазон попадают ячейки из строки с заголовками?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.08.2009, 13:53   #5
verdi
 
Регистрация: 12.08.2009
Сообщений: 5
По умолчанию

Да, конечно, вот описание на Вашем примере:

при выделении B2:C2 и задействовании макроса должно получиться bbb, ccc в ячейке B2.
при выделении B2:D2 и задействовании макроса должно получиться bbb, ccc, ddd, соответственно в ячейке B2.
при выделении B3:B4 и задействовании макроса должно получиться yy, ee в ячейке B3.
при выделении B2:C3 и задействовании макроса должно получиться bbb, ccc, yy, zz в ячейке B2 (но этот пункт уже не принципиален, т.к. вроде пока однозначной потребности в этом не было замечено).

т.е. нужно, чтобы именно информация из выделенного мышкой участка диапазона объединялась с сохранением данных через запятую, неважно, выделены строки или столбцы. Вся информация должна появиться в первой ячейке выделенного диапазона.
Если ячейки из строки с заголовками попадут, то пусть они тоже объединятся Если пустые, то пусть они будут гордо проигнорированы ))

по функционалу примерно как функция "объединить ячейки", но ячейки как раз объединять не обязательно, главное - информацию перенести в левый верхний. Важно еще, чтобы выделять нужно было именно мышкой, т.к. много мелких разнокалиберных участков, а макрос вручную перенастраивать для каждого кусочка из двух-трех ячеек в таблицах по 3000 строк придется Долго
Спасибо!

Последний раз редактировалось verdi; 17.08.2009 в 13:57.
verdi вне форума Ответить с цитированием
Старый 18.08.2009, 05:00   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно так:
Код:
Sub Main()
    Dim s As String, Cell: Application.ScreenUpdating = False
    For Each Cell In Selection
        If Cell <> "" Then s = s & IIf(Cell.Column = 4, "Сайт", Cells(1, Cell.Column)) & ":" & Cell & ", "
    Next
    If s <> "" Then s = Left(s, Len(s) - 2)
    Cells(Selection.Row, 5) = s
End Sub
Пример во вложении. Выделите требуемый диапазон и запустите макрос "Main".
Вложения
Тип файла: rar Книга2.rar (6.6 Кб, 52 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 20.08.2009, 10:46   #7
verdi
 
Регистрация: 12.08.2009
Сообщений: 5
По умолчанию

Жаль, второй плюс Вам в репутацию поставить нельзя.
Спасибо огромное, без Вашей помощи еще не знаю, сколько бы сидел
verdi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан двухмерный массив из 20 столбцов. Вставить в него столбец из чисел 10 после всех четных столбцов. Дмитрий142 Помощь студентам 9 07.06.2012 19:32
Объединение 2-х столбцов/строк windzor Общие вопросы .NET 3 23.12.2009 16:08
Объединение БД Georgios БД в Delphi 3 25.01.2009 20:18
Объединение заказов asale Microsoft Office Excel 6 22.10.2007 19:05