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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 13:20   #1
danetda
 
Регистрация: 22.12.2010
Сообщений: 3
По умолчанию Поиск объединенных ячеек

Добрый день,
подскажите, как в макросе обеспечить поиск объединенных ячеек и снять объединение.
Таблица что-то типа прайса из 8 столбцов и разбита на группы, а названия групп в объединенных ячейках. Товары идут построчно. Мне нужно вытащить название группы и добавить в новый столбец к каждому товару наименование группы. Длина объединенных ячеек в разных группах разная, где на 2 столбца, где на 5, но все объединения идут от 1-го столбца таблицы.
danetda вне форума Ответить с цитированием
Старый 22.12.2010, 13:32   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Код:
Sub Макрос1()
'если от первого столбца, то
    [A:A].UnMerge
End Sub
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 22.12.2010, 13:42   #3
DDMAX
 
Регистрация: 22.12.2010
Сообщений: 5
По умолчанию

Не работает
И мне нужно, чтобы именно со знаком ;
DDMAX вне форума Ответить с цитированием
Старый 22.12.2010, 13:48   #4
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Не работает
Приведенный макрос отменяет объединение ячеек. И только!
Чтобы что-то еще делать - выложите хоть небольшой пример Вашего файла.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 22.12.2010, 13:49   #5
danetda
 
Регистрация: 22.12.2010
Сообщений: 3
По умолчанию

VictorM
Спасибо за решение, у меня работает в 2003
А как найти такую объединенную ячейку, что бы спозиционироваться на ней. Решение искать по пустующей рядом ячейке после [A:A].UnMerge решит данную мою проблему, но на будущее, можно это как-то сделать?

Последний раз редактировалось danetda; 22.12.2010 в 13:53.
danetda вне форума Ответить с цитированием
Старый 22.12.2010, 17:59   #6
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Вот такой простенький код найдет объединенные ячейки на листе
Код:
Sub MCells()
   Application.FindFormat.MergeCells = True
    Cells.Find(What:="", After:=ActiveCell, MatchCase:=False, SearchFormat:=True).Activate
End Sub
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 31.01.2011, 13:18   #7
lalike
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 21
По умолчанию

А как объединить эти два макроса в один?


у меня есть макрос, который правильно объединяет ячейки (в основном при работе с фильтрами),
у меня есть макрос, который находит объединенные ячейки,
у меня есть файл с более чем 20 000 неправильно объединенными ячейками.
как создать цикл, который бы все эти ячейки правилно объединил.

макросы прилагаются
((((((ПРАВИЛЬНАЯ ГРУППИРОВКА))))))
SUB ReMerge() ' перегруппировать сгруппированную ячейку или сгруппировать ячейки выделенного диапазона с заполнением скрытых ячеек формулами-ссылками на первую ячейку
IF TypeName(Selection) <> "Range" THEN EXIT SUB
IF Selection.Cells.Count <= 1 THEN EXIT SUB
DIM i%, iCell AS Range, ActRng AS Range
DIM ActSh AS Worksheet, TempSh AS Worksheet
DIM lLastRow&: lLastRow = Cells.SpecialCells(xlLastCell).Row
DIM lLastCol&: lLastCol = Selection.Column + Selection.Columns.Count - 1
IF lLastRow > Selection.Row + Selection.Rows.Count - 1 THEN lLastRow = Selection.Row + Selection.Rows.Count - 1
Set ActRng = Intersect(Selection, Range(Cells(Selection.Row, Selection.Column), Cells(lLastRow, lLastCol)))
Application.ScreenUpdating = False: Application.DisplayAlerts = False

Set ActSh = ActiveSheet: Set TempSh = Sheets.Add ' запомнить текущую и создать новую страницу
ActRng.Copy TempSh.Range(ActRng.Address)
ActSh.Activate
Selection.UnMerge
FOR i = 2 TO ActRng.Cells.Count ' заполнить Selection формулами-ссылками на первую ячейку
ActRng(i).Formula = "=" & ActRng(1).Address
ActRng(i).Replace What:="$", Replacement:="", LookAt:=xlPart ' сделать ссылки перемещаемыми
NEXT
TempSh.Range(ActRng.Address).Merge
TempSh.Range(ActRng.Address).Copy: ActRng.PasteSpecial xlPasteFormats: TempSh.Delete
Set ActSh = Nothing: Set TempSh = Nothing: Set ActRng = Nothing
Application.ScreenUpdating = True: Application.DisplayAlerts = True
END SUB


((((((((((((ПОИСК ОБЪЕДИНЕННЫХ ЯЧЕЕК))))))))))))))


SUB MCells()
Application.FindFormat.MergeCells = True
Cells.Find(What:="", After:=ActiveCell, MatchCase:=False, SearchFormat:=True).Activate
END SUB



(((((ПРИБЛИЗИТЕЛЬНЫЙ ЦИКЛ))))))))))

0 ПОВТОРИТЬ ПОКА НЕ ДОСТИГЛИ КОНЦА ТАБЛИЦЫ
1 ПОИСК ЯЧЕЙКИ
2 ПРИМЕНЕНИЕ МАКРОСА


Я, к сожалению не знаю синтаксиса(
lalike вне форума Ответить с цитированием
Старый 31.01.2011, 13:45   #8
lalike
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 21
По умолчанию

Помогите, пожалуйста?!
lalike вне форума Ответить с цитированием
Старый 31.01.2011, 14:06   #9
lalike
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 21
По умолчанию

Sub m_1()
Dim i As Long
For i = 1 To 10000 ' количество ячеек в моей таблице


Application.FindFormat.MergeCells = True
Cells.Find(What:="", After:=ActiveCell, MatchCase:=False, SearchFormat:=True).Activate


If TypeName(Selection) <> "Range" Then Exit Sub
If Selection.Cells.Count <= 1 Then Exit Sub
Dim i%, iCell As Range, ActRng As Range
Dim ActSh As Worksheet, TempSh As Worksheet
Dim lLastRow&: lLastRow = Cells.SpecialCells(xlLastCell).Row
Dim lLastCol&: lLastCol = Selection.Column + Selection.Columns.Count - 1
If lLastRow > Selection.Row + Selection.Rows.Count - 1 Then lLastRow = Selection.Row + Selection.Rows.Count - 1
Set ActRng = Intersect(Selection, Range(Cells(Selection.Row, Selection.Column), Cells(lLastRow, lLastCol)))
Application.ScreenUpdating = False: Application.DisplayAlerts = False
Set ActSh = ActiveSheet: Set TempSh = Sheets.Add ' запомнить текущую и создать новую страницу
ActRng.Copy TempSh.Range(ActRng.Address)
ActSh.Activate
Selection.UnMerge
For i = 2 To ActRng.Cells.Count ' заполнить Selection формулами-ссылками на первую ячейку
ActRng(i).Formula = "=" & ActRng(1).Address
ActRng(i).Replace What:="$", Replacement:="", LookAt:=xlPart ' сделать ссылки перемещаемыми
Next
TempSh.Range(ActRng.Address).Merge
TempSh.Range(ActRng.Address).Copy: ActRng.PasteSpecial xlPasteFormats: TempSh.Delete
Set ActSh = Nothing: Set TempSh = Nothing: Set ActRng = Nothing
Application.ScreenUpdating = True: Application.DisplayAlerts = True

Next i
End Sub



может так??
lalike вне форума Ответить с цитированием
Старый 31.01.2011, 14:42   #10
lalike
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 21
По умолчанию

Sub cikl()
Dim x As Long
Dim i%, iCell As Range, ActRng As Range
Dim ActSh As Worksheet, TempSh As Worksheet
Dim lLastRow&: lLastRow = Cells.SpecialCells(xlLastCell).Row
Dim lLastCol&: lLastCol = Selection.Column + Selection.Columns.Count - 1

For x = 1 To 100
Application.FindFormat.MergeCells = True
Cells.Find(What:="", After:=ActiveCell, MatchCase:=False, SearchFormat:=True).Activate
If TypeName(Selection) <> "Range" Then Exit Sub
If Selection.Cells.Count <= 1 Then Exit Sub

If lLastRow > Selection.Row + Selection.Rows.Count - 1 Then lLastRow = Selection.Row + Selection.Rows.Count - 1
Set ActRng = Intersect(Selection, Range(Cells(Selection.Row, Selection.Column), Cells(lLastRow, lLastCol)))
Application.ScreenUpdating = False: Application.DisplayAlerts = False

Set ActSh = ActiveSheet: Set TempSh = Sheets.Add ' ????????? ??????? ? ??????? ????? ????????
ActRng.Copy TempSh.Range(ActRng.Address)
ActSh.Activate
Selection.UnMerge
For i = 2 To ActRng.Cells.Count ' ????????? Selection ?????????-???????? ?? ?????? ??????
ActRng(i).Formula = "=" & ActRng(1).Address
ActRng(i).Replace What:="$", Replacement:="", LookAt:=xlPart ' ??????? ?????? ?????????????
Next
TempSh.Range(ActRng.Address).Merge
TempSh.Range(ActRng.Address).Copy: ActRng.PasteSpecial xlPasteFormats: TempSh.Delete
Set ActSh = Nothing: Set TempSh = Nothing: Set ActRng = Nothing
Application.ScreenUpdating = True: Application.DisplayAlerts = True
Next x
End Sub


или так?
lalike вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск влияющих ячеек Meta2 Microsoft Office Excel 3 27.10.2010 22:45
Автофильтр объединенных ячеек evg31612 Microsoft Office Excel 1 13.09.2010 12:22
Проблема с автозаполнением объединенных ячеек alec_av Microsoft Office Excel 6 05.05.2010 12:02
Корректная печать объединенных ячеек zloy_nick Microsoft Office Excel 5 26.02.2009 16:21