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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2009, 14:39   #1
slon_slon
 
Регистрация: 13.03.2009
Сообщений: 4
Восклицание Объединение ячеек в строке

Добрый день!

К сожалению я очень далек от программирования, а в помощи нуждаюсь...

Имеется таблица из 18 тысяч строк(Word).

Мне надо преобразовать ее в человеческий вид, т.к. она разбита на большое количество строк, и текст теряет и-за этого форматирование и смысл.

Для этого, необходимо в выделенной строке в каждом из столбцов этой строки объединить все строки(вместе с текстом).

Также было бы очень желательно, чтобы при этом текст из объединяемых ячеек разделялся не переносом строки(как получается после команды "объединить строки"), а просто пробелом...

МНЕ ОЧЕНЬ НУЖНА ВАША ПОМОЩЬ!!!

Заранее спасибо!
slon_slon вне форума Ответить с цитированием
Старый 13.03.2009, 15:28   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Приложите файл с примером того, что есть и что нужно получить. Задание выполнимо, сразу скажу. Но нужно точно понимать, что вы хотите получить в результате.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 13.03.2009, 22:41   #3
slon_slon
 
Регистрация: 13.03.2009
Сообщений: 4
По умолчанию

Прикладываю файл с примером таблички.
Необходимо чтобы все остальные строки таблицы (4,5 и т.д.) выглядели как строки 1,2,3.

Заранее спасибо!

П.С. крайне нуждаюсь в помощи!!!
Вложения
Тип файла: doc sample.doc (35.0 Кб, 84 просмотров)
slon_slon вне форума Ответить с цитированием
Старый 14.03.2009, 01:14   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Вот такой макрос. Строки для объединения определяются как пустые строки в первом столбце. Абзацы заменяются на пробелы, а строка подгоняется по высоте под текст.
Чтобы макрос начал работать курсор должен находится в любой ячейке требуемой таблицы. Ячейку выделять не нужно — просто поставить курсор.
Не знаю сколько будет обрабатывать 18000 строк, но у меня 1500 строк сделало за 20 мин. Может кто-нибудь оптимизирует?
Код:
Sub MergeRowsByColumns()
  Dim oTbl As Table, iStart As Long, iEnd As Long, i#, j#, k#, iRowsCnt
  Set oTbl = Selection.Tables(1)
  iRowsCnt = oTbl.Rows.Count
  Application.ScreenUpdating = False
  Do:i = i + 1
    'Ищем пустую ячейку в первом столбце. Запоминаем номер предыдущей строки
    If Len(oTbl.Cell(i + 1, 1).Range.Text) <= 2 Then
      iStart = oTbl.Cell(i, 1).RowIndex
      'Начиная с этой строки ищем заполненную ячейку в первом столбце и также запоминаем номер _
      предыдущей строки
      For j = iStart + 1 To iRowsCnt
        If Len(oTbl.Cell(j, 1).Range.Text) > 2 Or j = iRowsCnt Then
          iEnd = IIf(j = iRowsCnt, j, oTbl.Cell(j, 1).Previous.RowIndex)
          For k = 1 To oTbl.Columns.Count
            'Объединяем все строки по столбцам
            ActiveDocument.Range(oTbl.Cell(iStart, k).Range.Start, oTbl.Cell(iEnd, k).Range.End).Select
            Selection.Cells.Merge
            'Заменяем знак абзаца на пробел
            Selection.Find.Execute findtext:="^0013", replacewith:="^0032", Replace:=wdReplaceAll
          Next k
          oTbl.Rows(i).Height = 24 'уменьшаем высоту строки по высоте текста
          'пересчитываем количество строк после объединения
          iRowsCnt = iRowsCnt - (iEnd - iStart)
          Exit For
        End If
      Next j
    End If
  Loop While i <> iRowsCnt
  Application.ScreenUpdating = True
End Sub
Вот ваш файл с результатом работы макроса Вложение 9546. Ну и сам макрос тоже в нем находится в модуле ThisDocument
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 15.04.2009 в 14:44.
viter.alex вне форума Ответить с цитированием
Старый 14.03.2009, 16:17   #5
slon_slon
 
Регистрация: 13.03.2009
Сообщений: 4
По умолчанию

ООО!!!!!
СПАСИБО ВАМ НЕЧЕЛОВЕЧЕСКОЕ!!!!

Я практически испытал оргазм после обеда (оставил работать на обед ~час и десять минут) - пришел а табличка в божеском виде!!!!!!!
СПАСИБО!!!!
slon_slon вне форума Ответить с цитированием
Старый 14.03.2009, 16:19   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от slon_slon Посмотреть сообщение
ООО!!!!!
СПАСИБО ВАМ НЕЧЕЛОВЕЧЕСКОЕ!!!!

Я практически испытал оргазм после обеда (оставил работать на обед ~час и десять минут) - пришел а табличка в божеском виде!!!!!!!
СПАСИБО!!!!
Вот еще одним счастливым на Земле больше!
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.03.2009, 23:08   #7
slon_slon
 
Регистрация: 13.03.2009
Сообщений: 4
По умолчанию

ОГРОМНОЕ СПАСИБО!!! ФРОНТ РАБОТ СОКРАТИЛСЯ РАЗ в ***ДЦАТЬ!!!!

Как добавить плюсы в репу???? )
slon_slon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение данных из диапазона ячеек Lal Microsoft Office Excel 8 12.08.2009 11:24
Объединение БД Georgios БД в Delphi 3 25.01.2009 20:18
Объединение ячеек Katherina_Koval Microsoft Office Excel 3 29.07.2008 06:53
Объединение ячеек в таблице SnakeMan Общие вопросы Delphi 2 01.04.2008 12:33
Объединение ячеек StringGrid Македонский Общие вопросы Delphi 1 15.11.2007 12:07