Не понимаю, как мелкомягкие додумались удалять при объединении ячеек всё, кроме первой ячейки. Это, пожалуй, самый выдающийся косяк Ёкселя. Я, конечно, и сам не прочь поиздеваться над любителями сливать ячейки, но надо знать меру...
ЗЫ. В качестве разделителя используется разрыв строки. Кому не нравится - замените 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
К стати, я давно уже юзаю макрос, который объединяет в стринг тексты выделенных ячеек с переносами строк. Так если его чуть подпилить, то получится, ИМХО, намного проще:
[vba]
Code
Sub Merge_with_Chr10() ' объединить выделенные ячейки, склеив их тексты с переносами строк If TypeName(Selection) <> "Range" Then Exit Sub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng Is Nothing Then Exit Sub If rRng.Cells.Count = 1 Then Exit Sub Dim text$, rCell As Range For Each rCell In Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If Len(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 "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" End Sub
[/vba]
К стати, я давно уже юзаю макрос, который объединяет в стринг тексты выделенных ячеек с переносами строк. Так если его чуть подпилить, то получится, ИМХО, намного проще:
[vba]
Code
Sub Merge_with_Chr10() ' объединить выделенные ячейки, склеив их тексты с переносами строк If TypeName(Selection) <> "Range" Then Exit Sub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng Is Nothing Then Exit Sub If rRng.Cells.Count = 1 Then Exit Sub Dim text$, rCell As Range For Each rCell In Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If Len(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 "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" End Sub
Лёш, привет! Подпилил маленько по твоему предложению свою UDF-ку: [vba]
Code
Sub MergeLosslessTab() Dim a As Range, r As Range For Each a In ActiveWindow.RangeSelection.Areas If a.Cells.Count > 1 Then 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 End If Next a End Sub
Function JoinRange(srcRng As Range, Optional delim As String = " ") As String Dim i% Dim txtArray() As String: ReDim txtArray(srcRng.Cells.Count)
For i = 1 To UBound(txtArray) txtArray(i) = srcRng.Cells(i) Next i JoinRange = Join(txtArray, delim) End Function
[/vba]
Хотя ИМХО практической пользы от такого объединения никакой. ТАБы у меня тоже не отображаются. Проверял копированием в Word - там появляются какие-то лишние табуляции и кавычки.
Лёш, привет! Подпилил маленько по твоему предложению свою UDF-ку: [vba]
Code
Sub MergeLosslessTab() Dim a As Range, r As Range For Each a In ActiveWindow.RangeSelection.Areas If a.Cells.Count > 1 Then 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 End If Next a End Sub
Function JoinRange(srcRng As Range, Optional delim As String = " ") As String Dim i% Dim txtArray() As String: ReDim txtArray(srcRng.Cells.Count)
For i = 1 To UBound(txtArray) txtArray(i) = srcRng.Cells(i) Next i JoinRange = Join(txtArray, delim) End Function
[/vba]
Хотя ИМХО практической пользы от такого объединения никакой. ТАБы у меня тоже не отображаются. Проверял копированием в 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) и построковое. И повесить на соответствующие стандартные кнопки. [vba]
Code
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 < 2 Then exit for r.Cells(1) = JoinRange(r, " ") r.Merge Next r Next a Application.DisplayAlerts = True End Sub
[/vba] Ну а разделителем - конечно, двойной пробел! Нам, блондинкам, всё равно. Благо, у приличных людей он не встречается - так что легко переправить заменой на любой нужный символ.
PS: Чему мы только людей учим! Сливать ячейки... Двойные пробелы вставлять... Тьфу!
Quote (Alex_ST)
А я думал, народ мимо ушей это пропустил.
Дык!
По здравом размышлении решил, что логичнее не плодить сущности - оставить 2 элементарные операции: объединение общее(через vbLf) и построковое. И повесить на соответствующие стандартные кнопки. [vba]
Code
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 < 2 Then exit for r.Cells(1) = JoinRange(r, " ") r.Merge Next r Next a Application.DisplayAlerts = True End Sub
[/vba] Ну а разделителем - конечно, двойной пробел! Нам, блондинкам, всё равно. Благо, у приличных людей он не встречается - так что легко переправить заменой на любой нужный символ.
PS: Чему мы только людей учим! Сливать ячейки... Двойные пробелы вставлять... Тьфу! Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Воскресенье, 25.11.2012, 13:36
Чему мы только людей учим! Сливать ячейки... Двойные пробелы вставлять... Тьфу!
Да, блин, самому противно! Но куды податься?
Но множественные пробелы меня бесят ещё больше чем объединённые ячейки! На это я пойтить не могу! Завтра попробую подобрать из таблицы символов что-нибудь мнемонически понятное как разделитель ячеек в строке и при этом не вводимое напрямую с клавиатуры, а потому в обычном тексте редко-редко встречаемое.
Правда, сейчас пришла мысль, что можно попробовать сделать так: 1. При объединении ячеек делать объединённую ячейку моноширинным шрифтом. 2. Высчитывать максимальное кол-во символов в ячейках каждого объединяемого столбца 3. Всё-таки добивать все ячейки столбца пробелами до одинаковой длины (сам себя не люблю за такое!) 4. После этих пробелов таки добавлять невводимый с клавы символ-разделитель ячеек.
Вопрос: как можно определить семейство шрифта (ну, хотя бы Serif/Sans Serif) , используемого в ячейке до её объединения, чтобы при объединении в ячейке подобрать наиболее близкий по начертанию, но моноширинный шрифт?
Quote (Формуляр)
Чему мы только людей учим! Сливать ячейки... Двойные пробелы вставлять... Тьфу!
Да, блин, самому противно! Но куды податься?
Но множественные пробелы меня бесят ещё больше чем объединённые ячейки! На это я пойтить не могу! Завтра попробую подобрать из таблицы символов что-нибудь мнемонически понятное как разделитель ячеек в строке и при этом не вводимое напрямую с клавиатуры, а потому в обычном тексте редко-редко встречаемое.
Правда, сейчас пришла мысль, что можно попробовать сделать так: 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. автоматически выравнивались строки по содержимому. Заранее спасибо. [moder]Не нужна там цитата с кодом макроса. Не нужна. Не дает она никакой информации, а только размер поста увеличивает.
Цитата удалена администрацией.
Спасибо за макрос! Подскажите, пожалуйста, как этот макрос допилить) 1. необходимо чтобы при преобразовании чисел эти числа всегда были с одним знаком после запятой (например так "12345434,0"); 2. автоматически выравнивались строки по содержимому. Заранее спасибо. [moder]Не нужна там цитата с кодом макроса. Не нужна. Не дает она никакой информации, а только размер поста увеличивает.f_f
Сообщение отредактировал _Boroda_ - Вторник, 16.06.2015, 18:03