Не понимаю, как мелкомягкие додумались удалять при объединении ячеек всё, кроме первой ячейки. Это, пожалуй, самый выдающийся косяк Ёкселя. Я, конечно, и сам не прочь поиздеваться над любителями сливать ячейки, но надо знать меру...
ЗЫ. В качестве разделителя используется разрыв строки. Кому не нравится - замените vbLf на любую строковую константу.
Не понимаю, как мелкомягкие додумались удалять при объединении ячеек всё, кроме первой ячейки. Это, пожалуй, самый выдающийся косяк Ёкселя. Я, конечно, и сам не прочь поиздеваться над любителями сливать ячейки, но надо знать меру...
ЗЫ. В качестве разделителя используется разрыв строки. Кому не нравится - замените vbLf на любую строковую константу.Формуляр
Алексей, этот вариант я видел. Мне нужен был простейший макрос без дополнительных наворотов и диалогов (и уж тем более, без создания-удаления новых листов), чтоб можно было повесить на стандартную кнопку вместо встроенного объединения. С этой точки зрения, считаю свой вариант вполне достойным права на существование. Другой вопрос, что логичнее было бы не плодить новоую тему, а продолжить старую. Прошу модераторов так и поступить.
Алексей, этот вариант я видел. Мне нужен был простейший макрос без дополнительных наворотов и диалогов (и уж тем более, без создания-удаления новых листов), чтоб можно было повесить на стандартную кнопку вместо встроенного объединения. С этой точки зрения, считаю свой вариант вполне достойным права на существование. Другой вопрос, что логичнее было бы не плодить новоую тему, а продолжить старую. Прошу модераторов так и поступить.Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Понедельник, 18.06.2012, 17:09
Привет всем! Спецы помогите плз!!! Есть ли такой макрос который обединяет ячейки в диапазоне по СТОЛБЦАМ а не по строкам... По строкам нашёл.. а вот по столбцам ну никак! Спасайте!!
Привет всем! Спецы помогите плз!!! Есть ли такой макрос который обединяет ячейки в диапазоне по СТОЛБЦАМ а не по строкам... По строкам нашёл.. а вот по столбцам ну никак! Спасайте!!Артурр
Артурр, Вы, очевидно, предполагаете, что тут все кроме любителей Excel'я ещё одновременно и телепаты-экстрасенсы, которым вполне под силу самим за Вас придумать файл-пример, из которого будет ясно, что и где у Вас "есть" и что, где и по какому критерию Вам нужно получить? Ну так Вы ошибаетесь. Нет тут экстрасенсов!
Да и вопросы, имеющие настолько слабое отношение к теме, как Ваш, нужно не в "Готовых решениях" выкладывать, а в Вопросы по MS Excel свой топик создавать. А здесь это оффтоп.
Артурр, Вы, очевидно, предполагаете, что тут все кроме любителей Excel'я ещё одновременно и телепаты-экстрасенсы, которым вполне под силу самим за Вас придумать файл-пример, из которого будет ясно, что и где у Вас "есть" и что, где и по какому критерию Вам нужно получить? Ну так Вы ошибаетесь. Нет тут экстрасенсов!
Да и вопросы, имеющие настолько слабое отношение к теме, как Ваш, нужно не в "Готовых решениях" выкладывать, а в Вопросы по MS Excel свой топик создавать. А здесь это оффтоп.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 23.11.2012, 10:15
Саш (Формуляр), а ты не думал как бы умудриться "слеплять" данные внутри объединяемых ячеек в виде нескольких столбцов? Ну, в смысле чтобы было распределение данных в объединённой ячейке по подобию их расположения в объединяемых ячейках - не только по вертикали vbLF'ами, но и по горизонтали? Множественные пробелы, естественно, не катят (ну не блондинки же мы-секретарши чтобы переносы в ячейках пробелами делать ) Я тут в ручном режиме ввода в ячейку попробовал организовать наглядность разделителями-символами псевдографики. Не наглядно получилось. Хотя потом по этим символам можно было бы и UnMerge с обратной расстановкой по ячейкам организовать. А потом решил попробовать сделать "в лоб" - ввести макросом в стринг, вставляемый в объединённую ячейку, табуляцию. В окне Immediate выполнил: [a1]="12" & vbtab & "34" На первый взгляд в ячейке А1 на листе ничего не получилось. Но когда я "прошёлся" в строке формул курсором по символам слева-направо, то очень интересно получилось: после 2 курсор скакнул направо на несколько знако-мест на середину символа 4, а потом пошёл дальше 2 раза по пустому месту (прямо как будто у меня там пробелов после 4 понатыкано) Т.е. символ табуляции в ячейке всё-таки не "глушится" Excel'ем, а только не отображается! Вот бы придумать, как его отображать!
Саш (Формуляр), а ты не думал как бы умудриться "слеплять" данные внутри объединяемых ячеек в виде нескольких столбцов? Ну, в смысле чтобы было распределение данных в объединённой ячейке по подобию их расположения в объединяемых ячейках - не только по вертикали vbLF'ами, но и по горизонтали? Множественные пробелы, естественно, не катят (ну не блондинки же мы-секретарши чтобы переносы в ячейках пробелами делать ) Я тут в ручном режиме ввода в ячейку попробовал организовать наглядность разделителями-символами псевдографики. Не наглядно получилось. Хотя потом по этим символам можно было бы и UnMerge с обратной расстановкой по ячейкам организовать. А потом решил попробовать сделать "в лоб" - ввести макросом в стринг, вставляемый в объединённую ячейку, табуляцию. В окне Immediate выполнил: [a1]="12" & vbtab & "34" На первый взгляд в ячейке А1 на листе ничего не получилось. Но когда я "прошёлся" в строке формул курсором по символам слева-направо, то очень интересно получилось: после 2 курсор скакнул направо на несколько знако-мест на середину символа 4, а потом пошёл дальше 2 раза по пустому месту (прямо как будто у меня там пробелов после 4 понатыкано) Т.е. символ табуляции в ячейке всё-таки не "глушится" Excel'ем, а только не отображается! Вот бы придумать, как его отображать!Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 23.11.2012, 18:45
К стати, я давно уже юзаю макрос, который объединяет в стринг тексты выделенных ячеек с переносами строк. Так если его чуть подпилить, то получится, ИМХО, намного проще:
Sub Merge_with_Chr10() ' объединить выделенные ячейки, склеив их тексты с переносами строк IfTypeName(Selection) <> "Range"ThenExitSub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng IsNothingThenExitSub If rRng.Cells.Count = 1ThenExitSub Dim text$, rCell As Range For Each rCell In Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) IfLen(rCell.Value) Then text = text & IIf(Len(text), vbLf, "") & rCell.Value Next rCell ' объединить выделенное и вставить "склеенный" текст
Application.DisplayAlerts = False
rRng.Merge: rRng.Value = Application.Trim(text)
Application.DisplayAlerts = True ' текст поместить в буфер обмена ' With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText Application.Trim(text): .PutInClipBoard: End With ' MsgBox "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" EndSub
К стати, я давно уже юзаю макрос, который объединяет в стринг тексты выделенных ячеек с переносами строк. Так если его чуть подпилить, то получится, ИМХО, намного проще:
Sub Merge_with_Chr10() ' объединить выделенные ячейки, склеив их тексты с переносами строк IfTypeName(Selection) <> "Range"ThenExitSub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng IsNothingThenExitSub If rRng.Cells.Count = 1ThenExitSub Dim text$, rCell As Range For Each rCell In Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) IfLen(rCell.Value) Then text = text & IIf(Len(text), vbLf, "") & rCell.Value Next rCell ' объединить выделенное и вставить "склеенный" текст
Application.DisplayAlerts = False
rRng.Merge: rRng.Value = Application.Trim(text)
Application.DisplayAlerts = True ' текст поместить в буфер обмена ' With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText Application.Trim(text): .PutInClipBoard: End With ' MsgBox "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" EndSub
Лёш, привет! Подпилил маленько по твоему предложению свою UDF-ку:
Sub MergeLosslessTab() Dim a As Range, r As Range For Each a In ActiveWindow.RangeSelection.Areas If a.Cells.Count > 1Then For Each r In a.Rows
r.Cells(1) = JoinRange(r, vbTab) Next r
a.Cells(1) = JoinRange(a.Columns(1), vbLf)
Application.DisplayAlerts = False
a.Merge
Application.DisplayAlerts = True EndIf Next a EndSub
Function JoinRange(srcRng As Range, Optional delim AsString = " ") AsString Dim i% Dim txtArray() AsString: ReDim txtArray(srcRng.Cells.Count)
For i = 1ToUBound(txtArray)
txtArray(i) = srcRng.Cells(i) Next i
JoinRange = Join(txtArray, delim) EndFunction
Хотя ИМХО практической пользы от такого объединения никакой. ТАБы у меня тоже не отображаются. Проверял копированием в Word - там появляются какие-то лишние табуляции и кавычки.
Лёш, привет! Подпилил маленько по твоему предложению свою UDF-ку:
Sub MergeLosslessTab() Dim a As Range, r As Range For Each a In ActiveWindow.RangeSelection.Areas If a.Cells.Count > 1Then For Each r In a.Rows
r.Cells(1) = JoinRange(r, vbTab) Next r
a.Cells(1) = JoinRange(a.Columns(1), vbLf)
Application.DisplayAlerts = False
a.Merge
Application.DisplayAlerts = True EndIf Next a EndSub
Function JoinRange(srcRng As Range, Optional delim AsString = " ") AsString Dim i% Dim txtArray() AsString: ReDim txtArray(srcRng.Cells.Count)
For i = 1ToUBound(txtArray)
txtArray(i) = srcRng.Cells(i) Next i
JoinRange = Join(txtArray, delim) EndFunction
Хотя ИМХО практической пользы от такого объединения никакой. ТАБы у меня тоже не отображаются. Проверял копированием в Word - там появляются какие-то лишние табуляции и кавычки. Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Пятница, 23.11.2012, 16:22
Привет, Саш! Я смотрю, указание ActiveWindow.RangeSelection вместо простого Selection и проверки его на Range приобретает популярность А я думал, народ мимо ушей это пропустил.
Привет, Саш! Я смотрю, указание ActiveWindow.RangeSelection вместо простого Selection и проверки его на Range приобретает популярность А я думал, народ мимо ушей это пропустил.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 23.11.2012, 18:49
По здравом размышлении решил, что логичнее не плодить сущности - оставить 2 элементарные операции: объединение общее(через vbLf) и построковое. И повесить на соответствующие стандартные кнопки.
Sub MergeRowsLossless() Dim a As Range, r As Range
Application.DisplayAlerts = False For Each a In ActiveWindow.RangeSelection.Areas For Each r In a.Rows If r.Cells.Count < 2Then exit for
r.Cells(1) = JoinRange(r, " ")
r.Merge Next r Next a
Application.DisplayAlerts = True EndSub
Ну а разделителем - конечно, двойной пробел! Нам, блондинкам, всё равно. Благо, у приличных людей он не встречается - так что легко переправить заменой на любой нужный символ.
PS: Чему мы только людей учим! Сливать ячейки... Двойные пробелы вставлять... Тьфу!
Цитата (Alex_ST писал(а)):
А я думал, народ мимо ушей это пропустил.
Дык!
По здравом размышлении решил, что логичнее не плодить сущности - оставить 2 элементарные операции: объединение общее(через vbLf) и построковое. И повесить на соответствующие стандартные кнопки.
Sub MergeRowsLossless() Dim a As Range, r As Range
Application.DisplayAlerts = False For Each a In ActiveWindow.RangeSelection.Areas For Each r In a.Rows If r.Cells.Count < 2Then exit for
r.Cells(1) = JoinRange(r, " ")
r.Merge Next r Next a
Application.DisplayAlerts = True EndSub
Ну а разделителем - конечно, двойной пробел! Нам, блондинкам, всё равно. Благо, у приличных людей он не встречается - так что легко переправить заменой на любой нужный символ.
PS: Чему мы только людей учим! Сливать ячейки... Двойные пробелы вставлять... Тьфу! Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Воскресенье, 25.11.2012, 13:36
Чему мы только людей учим! Сливать ячейки... Двойные пробелы вставлять... Тьфу!
Да, блин, самому противно! Но куды податься?
Но множественные пробелы меня бесят ещё больше чем объединённые ячейки! На это я пойтить не могу! Завтра попробую подобрать из таблицы символов что-нибудь мнемонически понятное как разделитель ячеек в строке и при этом не вводимое напрямую с клавиатуры, а потому в обычном тексте редко-редко встречаемое.
Правда, сейчас пришла мысль, что можно попробовать сделать так: 1. При объединении ячеек делать объединённую ячейку моноширинным шрифтом. 2. Высчитывать максимальное кол-во символов в ячейках каждого объединяемого столбца 3. Всё-таки добивать все ячейки столбца пробелами до одинаковой длины (сам себя не люблю за такое!) 4. После этих пробелов таки добавлять невводимый с клавы символ-разделитель ячеек.
Вопрос: как можно определить семейство шрифта (ну, хотя бы Serif/Sans Serif) , используемого в ячейке до её объединения, чтобы при объединении в ячейке подобрать наиболее близкий по начертанию, но моноширинный шрифт?
Цитата (Формуляр писал(а)):
Чему мы только людей учим! Сливать ячейки... Двойные пробелы вставлять... Тьфу!
Да, блин, самому противно! Но куды податься?
Но множественные пробелы меня бесят ещё больше чем объединённые ячейки! На это я пойтить не могу! Завтра попробую подобрать из таблицы символов что-нибудь мнемонически понятное как разделитель ячеек в строке и при этом не вводимое напрямую с клавиатуры, а потому в обычном тексте редко-редко встречаемое.
Правда, сейчас пришла мысль, что можно попробовать сделать так: 1. При объединении ячеек делать объединённую ячейку моноширинным шрифтом. 2. Высчитывать максимальное кол-во символов в ячейках каждого объединяемого столбца 3. Всё-таки добивать все ячейки столбца пробелами до одинаковой длины (сам себя не люблю за такое!) 4. После этих пробелов таки добавлять невводимый с клавы символ-разделитель ячеек.
Вопрос: как можно определить семейство шрифта (ну, хотя бы Serif/Sans Serif) , используемого в ячейке до её объединения, чтобы при объединении в ячейке подобрать наиболее близкий по начертанию, но моноширинный шрифт?Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Воскресенье, 25.11.2012, 21:58
А я, когда приходится объединить ячейки без потери данных, делаю это вручную:) Сначала создаю копию диапазона, затем объединяю ячейки в этой копии и тут же переношу (кисточкой или специальной вставкой) форматирование на исходный диапазон Поскольку приходится делать такое не часто, макросом не пользуюсь
А я, когда приходится объединить ячейки без потери данных, делаю это вручную:) Сначала создаю копию диапазона, затем объединяю ячейки в этой копии и тут же переношу (кисточкой или специальной вставкой) форматирование на исходный диапазон Поскольку приходится делать такое не часто, макросом не пользуюсьv__step
С уважением, Владимир
Сообщение отредактировал v__step - Воскресенье, 06.01.2013, 00:45
Володя, ссылки на макросы с объединением ячеек "форматом по образцу" я здесь уже выкладывал , но они Саше не понравились и он решил сделать по-своему. Никто не спорит - это его право. Я же всё-таки пользуюсь своими "MergePlus" и "ReMerge"
Володя, ссылки на макросы с объединением ячеек "форматом по образцу" я здесь уже выкладывал , но они Саше не понравились и он решил сделать по-своему. Никто не спорит - это его право. Я же всё-таки пользуюсь своими "MergePlus" и "ReMerge"Alex_ST
Нет ничего лучше, чем несколько путей решения одной проблемы Значит решение устойчиво Объединённые с сохранением данных ячейки - мощнейший инструмент для организации объектных баз данных Жаль только, что рабочие книги с объединёнными ячейками так сильно распухают и так сильно тормозят...
Нет ничего лучше, чем несколько путей решения одной проблемы Значит решение устойчиво Объединённые с сохранением данных ячейки - мощнейший инструмент для организации объектных баз данных Жаль только, что рабочие книги с объединёнными ячейками так сильно распухают и так сильно тормозят...v__step
Объединение ячеек с затиранием информации в скрываемых ячейках - это одно из наивреднейших решений мелко-мягких, т.к. нарушает регулярность структуры таблиц и мешает миграции данных между Excel и БД.
Объединение ячеек с затиранием информации в скрываемых ячейках - это одно из наивреднейших решений мелко-мягких, т.к. нарушает регулярность структуры таблиц и мешает миграции данных между Excel и БД.Alex_ST
Спасибо за макрос! Подскажите, пожалуйста, как этот макрос допилить) 1. необходимо чтобы при преобразовании чисел эти числа всегда были с одним знаком после запятой (например так "12345434,0"); 2. автоматически выравнивались строки по содержимому. Заранее спасибо.
Модератор: Не нужна там цитата с кодом макроса. Не нужна. Не дает она никакой информации, а только размер поста увеличивает.
Цитата удалена администрацией.
Спасибо за макрос! Подскажите, пожалуйста, как этот макрос допилить) 1. необходимо чтобы при преобразовании чисел эти числа всегда были с одним знаком после запятой (например так "12345434,0"); 2. автоматически выравнивались строки по содержимому. Заранее спасибо. [moder]Не нужна там цитата с кодом макроса. Не нужна. Не дает она никакой информации, а только размер поста увеличивает.f_f
Сообщение отредактировал _Boroda_ - Вторник, 16.06.2015, 18:03