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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 23:41   #1
Сергей846
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 15
По умолчанию Обїединение ячеек с одинаковыми значениями WORD

Ув.форумчане помогите пожалуйста написать макрос, который бы объединял ячейки с одинаковыми значениями в первой колонке, оставляя в объедененой ячейке только одно значение.Таблица оч.больших размеров, значения в первой колонке состоят из счетырех цифр например 1000, 1000, 1502, 1300, 1300, 1300 и т.д. Заранее спасибо.
Сергей846 вне форума Ответить с цитированием
Старый 23.04.2010, 09:47   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Попробуйте такой вариант. Может он не оптимальный, но он работает:
Код:
Sub MergeEqualCells()
  Dim oTbl As Table
  Dim i As Long
  Dim sCellVal As String
  
  If Selection.Information(wdWithInTable) Then
    Set oTbl = Selection.Tables(1)
  Else
    MsgBox "Поставьте курсор внутрь таблицы и запустите макрос вновь!", vbOKOnly + vbInformation, "Объединение ячеек с одинаковыми значениями"
    Exit Sub
  End If
  
  For i = oTbl.Columns(1).Cells.Count To 1 Step -1
    With oTbl.Columns(1).Cells(i)
      .Select
      sCellVal = .Range.Text
    End With
    With Selection
      While .Cells(1).Range.Text = sCellVal And .Cells(1).Range.Start <> oTbl.Range.Cells(1).Range.Start
        .MoveUp Extend:=wdExtend
      Wend
      If .Cells(1).Range.Start <> oTbl.Range.Cells(1).Range.Start Then
        .MoveDown Extend:=wdExtend
      End If
      i = i - .Cells.Count + 1
      If .Cells.Count > 1 Then
        .Cells.Merge
        .Cells(1).Range.Text = Replace(sCellVal, vbCr, "")
      End If
    End With
  Next
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 23.04.2010, 11:57   #3
Сергей846
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 15
По умолчанию

viter.alex
Спасибо большое, все отлично. только почемуто верхние ячейки объединяются с заголовком таблицы, как указать чтобы макрос не перебирал первую строку т.е. шапку таблицы ?
Сергей846 вне форума Ответить с цитированием
Старый 23.04.2010, 12:14   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Ненужные вам строки я закомментировал (выделено зелёным)
Код:
Sub MergeEqualCells()
  Dim oTbl As Table
  Dim i As Long
  Dim sCellVal As String
  
  If Selection.Information(wdWithInTable) Then
    Set oTbl = Selection.Tables(1)
  Else
    MsgBox "Поставьте курсор внутрь таблицы и запустите макрос вновь!", vbOKOnly + vbInformation, "Объединение ячеек с одинаковыми значениями"
    Exit Sub
  End If
  
  For i = oTbl.Columns(1).Cells.Count To 1 Step -1
    With oTbl.Columns(1).Cells(i)
      .Select
      sCellVal = .Range.Text
    End With
    With Selection
      While .Cells(1).Range.Text = sCellVal And .Cells(1).Range.Start <> oTbl.Range.Cells(1).Range.Start
        .MoveUp Extend:=wdExtend
      Wend
      'If .Cells(1).Range.Start <> oTbl.Range.Cells(1).Range.Start Then
        .MoveDown Extend:=wdExtend
      'End If
      i = i - .Cells.Count + 1
      If .Cells.Count > 1 Then
        .Cells.Merge
        .Cells(1).Range.Text = Replace(sCellVal, vbCr, "")
      End If
    End With
  Next
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 23.04.2010, 12:47   #5
Сергей846
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 15
По умолчанию

Все равно объединяет заголовок с ячейками, попробую по колдовать, мож получится.Спасибо.
Сергей846 вне форума Ответить с цитированием
Старый 23.04.2010, 15:36   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А шапка располагается только в одной строке? Или есть объединённые строки?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 23.04.2010, 16:17   #7
Сергей846
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 15
По умолчанию

В одной строке.
Сергей846 вне форума Ответить с цитированием
Старый 24.04.2010, 11:35   #8
Сергей846
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 15
По умолчанию

Как отменить два последних действия макроса, тогда будет все ОК.
Сергей846 вне форума Ответить с цитированием
Старый 24.04.2010, 15:46   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Отмена двух последних действий:
Код:
ActiveDocument.Undo 2
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 19.08.2016, 22:48   #10
Николай_В
Новичок
Джуниор
 
Регистрация: 26.07.2014
Сообщений: 1
По умолчанию

1111
Николай_В вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение цветом абзацов с одинаковыми числовыми значениями в тексте в Word'e xamillion Microsoft Office Word 16 01.09.2010 08:39
Группировка в строку ячеек с одинаковыми данными Vanot Microsoft Office Excel 2 24.08.2009 01:01
Таблицы в WORD. Перебор ячеек или поиск? sergeos Microsoft Office Word 7 09.06.2009 17:57
Ошибка разбиения ячеек в Word KiSH333 Общие вопросы Delphi 0 02.04.2009 10:02