Статьи из блога

Разнос данных по строкам и столбцам таблицы

Игорь спрашивает:

Есть ряд слов:

собака кошка мышка кенгуру

цыпленок хомяк мишка птичка.

Как мне их добавить в таблицу, состоящую из 4 столбцов и 2 строк, чтобы каждое слово находилось в отдельной ячейке, не применяя к каждому слову операцию вырезать-вставить. Эти слова у меня так и находятся в столбик по 4 слова в строчку в вордовском документе (так же, как я и написал в примере), а чуть ниже есть таблица пустая, вот туда мне и надо их вставить.

Игорь, попробуйте вот такой макрос (ниже). Выделите ваши слова и запустите макрос:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub insertToTable()
Dim sStr1 As String
Dim sStr() As String
Dim rng As Range
Dim oTbl As Table
Dim i As Long
sStr1 = Trim(Replace(Selection.Text, Chr(13), Chr(32)))
Selection.Text = sStr1 & vbCr
Set oTbl = ActiveDocument.Tables(1)
Set rng = Selection.Range
sStr = Split(rng, Chr(32))
For i = 0 To (UBound(sStr) - 1)
   oTbl.Cell(1, 1).Range.Text = sStr(0)
   oTbl.Cell(1, 2).Range.Text = sStr(1)
   oTbl.Cell(1, 3).Range.Text = sStr(2)
   oTbl.Cell(1, 4).Range.Text = sStr(3)
   oTbl.Cell(2, 1).Range.Text = sStr(4)
   oTbl.Cell(2, 2).Range.Text = sStr(5)
   oTbl.Cell(2, 3).Range.Text = sStr(6)
   oTbl.Cell(2, 4).Range.Text = sStr(7)
Next i
End Sub

Если вы не знаете, как подключить к документу и применить эти макросы, изучите следующие заметки с сайта:

Создание макроса из готового кода

Автоматическая запись макроса

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 14

  1. 27.01.2009 в 13:19 | #1

    Странно, зачем заменять знаки абзаца пробелами? Если можно разбивать на слова построчно и сразу же, построчно, добавлять в таблицу. Но на скорую руку пойдет. Хорошая работа.

  2. 27.01.2009 в 13:23 | #2

    Только что попробовал стандартную функцию преобразовать в таблицу. Указал 4 столбца и пробел в качестве разделителя. Все сработало.

  3. Luna
    27.01.2009 в 22:06 | #3

    Да уж, в данном случае применение макроса - это стрельба из пушки по воробьям.

    Стандартное: Таблица -> Преобразовать Текст в Таблицу отлично справляется с поставленной задачей!

  4. Алексей К
    27.01.2009 в 23:26 | #4

    Небольшая опечатка: оператор For не нужен, т.к. переменная i не используется, индексы прописаны статически.

  5. Kostero
    30.01.2009 в 10:00 | #5

    Возможно еще проще. Выделить-Таблица-вставить.

  6. Евгений
    30.01.2009 в 21:44 | #6

    Вот есть вопросы по word незнаю к кому обратится думаю сюда

    1 какой символ ключа предотвращает обновление полей включенных в результат поля

    \! или \* или \# или \@

    2 Какой символ ключа формирует результаты дата/время в соответствии с указаным шаблоном

    \! или \* или \# или \@

    3 Для чего предназначены аргументы поля автоматизации

    1 Для определения выполняемых функции

    2 Для идентификации частей поля

    3 Для управления работой поля

    4 Для использования в других полях

    4 Над полем типа - допустимы операции

    1 Дату разделить на дату

    2 Дату умножить на число

    3 Дату разделить на число

    4 К дате прибавить число

    Прошу помочь остались только эти вопросы надеюсь на Вас

  7. Евгений
    31.01.2009 в 10:11 | #7

    Добрый день!

    Возник следующий вопрос:

    Есть, например, три документа Word : 1.doc, 2.doc, 3.doc.

    Возможно ли сделать так чтобы в документе 1.doc узнать количество страниц и заголовки из документов 2.doc и 3.doc.

    Т.е. из одного документа прочитать даннные в другом документе?

    Заранее спасибо за помощь!

  8. 01.02.2009 в 07:08 | #8

    Добрый день! … из одного документа прочитать даннные в другом документе?
    Заранее спасибо за помощь!

    Конечно, возможно

  9. Евгений
    02.02.2009 в 05:33 | #9

    Конечно, возможно

    Можно поконкретней? Может пример есть как это сделать?

  10. 02.02.2009 в 06:23 | #10

    …Можно поконкретней? Может пример есть как это сделать?

    Пишите viter точка alex собака gmail точка com. Желательно с примерами документов

  11. olegko
    21.04.2009 в 13:05 | #11

    Зачем писать целый маркос для операции, которую можно сделать обычным copy/paste?

    Ведь куда проще:

    1) Копируем текст в буфер обмена.

    2) Создаём пустую таблицу с количеством колонок и строк, равным их количеству (ожидаемому) в скопированном тексте.

    3) Выделяем таблицу и вставляем текст из буфера

    ==> вуа-ля! Таблица готова и никаких заморочек с макросами.

    P.S.: Для большого объёма данных можно использовать функцию "Convert text to table", указав "пробел" как разделитель (или другой символ в зависимости от исходного материала).

    Писать макрос для данной операции - это всё равно что чесать правой рукой левое ухо.

  12. Busine2009
    20.06.2010 в 06:38 | #12

    Сколько скрытых возможностей в Word. Я раньше использовал Таблица - Преобразовать - Текст в таблицу и только сегодня узнал, что есть др. способы.

    Kostero, olegko - как вы узнали об этих способах?

  13. Igor
    17.08.2010 в 18:25 | #13

    А зачем нужен цикл в конце макроса? Зачем 8 раз одно и тоже прописывать в ячейки таблицы:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i = 0 To (UBound(sStr) - 1)
    oTbl.Cell(1, 1).Range.Text = sStr(0)
    oTbl.Cell(1, 2).Range.Text = sStr(1)
    oTbl.Cell(1, 3).Range.Text = sStr(2)
    oTbl.Cell(1, 4).Range.Text = sStr(3)
    oTbl.Cell(2, 1).Range.Text = sStr(4)
    oTbl.Cell(2, 2).Range.Text = sStr(5)
    oTbl.Cell(2, 3).Range.Text = sStr(6)
    oTbl.Cell(2, 4).Range.Text = sStr(7)
    Next i

    итератор i в теле цикла не используется. Цикл вообще не нужен, или процедуру лучше переписать так

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub insertToTable()
    Dim sStr1 As String
    Dim sStr() As String
    Dim rng As Range
    Dim oTbl As Table
    Dim i As Long
    sStr1 = Trim(Replace(Selection.Text, Chr(13), Chr(32)))
    Selection.Text = sStr1 & vbCr
    Set oTbl = ActiveDocument.Tables(1)
    Set rng = Selection.Range
    sStr = Split(rng, Chr(32))
    i = 0
    For j = 1 To 2 ' количество строк
     For k = 1 To 4 ' количество столбцов
        oTbl.Cell(j, k).Range.Text = sStr(i)
        i = i + 1
        If (UBound(sStr) + 1) = i Then
            Exit For
        End If
         
     Next k
    Next j
    End Sub

  14. Таиса
    09.07.2012 в 10:09 | #14

    А можно еще все необходимые слова, скопировать в Excel и он сам автоматически расставит их в таблицу, потом просто эту таблицу вставить в Word.

Оставьте комментарий!

(обязательно)

^ Наверх