С Новым годом! Форум программистов, компьютерный форум, киберфорум
MS Office Word
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48

Разделить таблицу по условию

29.08.2013, 11:48. Показов 6895. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, доделать или переделать

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "MYTHIC"
            .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.SplitTable
    Selection.InsertBreak Type:=wdPageBreak
    End Sub
Большую таблицу необходимо разбить на отдельные по условию (в данном случае каждая таблица начинается со строки с текстом « MYTHIC»), и каждая таблица должна быть на отдельном листе.
В макросах не очень соображаю, поэтому не знаю, как сделать, чтобы действия макроса распространялись на всю таблицу.
Спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2013, 11:48
Ответы с готовыми решениями:

Разделить таблицу по заданному условию
Здравствуйте! Помогите разделить данный список по строкам так, чтобы по заданным условия выделились отдельные списки. Например, список, где...

Разделить массив по условию
2. Задан массив Д(5х5). Сформировать массивы А и В. В массив А поместить элементы с четными индексами, в массив В с нечетными.

Разделить текст в столбце по условию
Добрый день. Необходимо разделить текст в столбце по условию: Нужно отделить код (написанный ЗАГЛАВНЫМИ, может заканчиваться на...

20
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,932
Записей в блоге: 4
29.08.2013, 12:42
ПОПРОБУЙТЕ ---естественно на дубле

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub mm130829()
Dim j1, j1k, s1, S2
j1k = Word.ActiveDocument.Tables(1).Rows.Count
Do While j1k > 1
j1k = j1k - 1
With Word.ActiveDocument.Tables(1).Rows(j1k).Cells(1)
s1 = UCase(.Range.Text)
S2 = UCase("MYTHIC*")
If s1 Like S2 Then
Debug.Print s1
.Select
Selection.SplitTable
Selection.InsertBreak Type:=wdPageBreak
End If
End With
Loop
End Sub
1
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
29.08.2013, 13:13  [ТС]
К сожалению, не работает. 10 мин. висит...
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,932
Записей в блоге: 4
29.08.2013, 14:44
там негде висеть, если только вы не подправили макрос
убрав j1k=j1k-1

Добавлено через 7 минут
там негде висеть, если только вы не подправили макрос
убрав j1k=j1k-1
или он уже закончил работу, не найдя ваших строк

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub mm130829() 
Dim j1, j1k, s1, S2 
j1k = Word.ActiveDocument.Tables(1).Rows.Count 
j1=0
Do While j1k > 1 
j1k = j1k - 1 
With Word.ActiveDocument.Tables(1).Rows(j1k).Cells(1) 
s1 = UCase(.Range.Text) 
S2 = UCase("MYTHIC*")
 If s1 Like S2 Then 
Debug.Print s1 
.Select j1=j1+1
Selection.SplitTable 
Selection.InsertBreak Type:=wdPageBreak 
End If 
End With 
Loop
msgbox "найдено " & j1
 End Sub
0
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
29.08.2013, 15:15  [ТС]
Я поняла, в чем дело: текст "MYTHIC" находится во втором столбике таблицы. Убираю первый -работает виртуозно. Но мне необходимо сохранить первый столбик в таблице.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,932
Записей в блоге: 4
29.08.2013, 15:40
выложите кусок, не понимаю ситуации

рррррр\ иванов
жжжжж\жжж
жжжжжж\жжжжж
жжжжж\жжж

получить
---с нового листа---
ррррррр\
жжжжжж\жжжж
жжжжжж\жжжжж
жжжжжж\жжжжж

Добавлено через 8 минут
а пока вариант для копии

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub mm130829_1540()
Dim j1, j1k, s1, S2
j1 = 0
j1k = Word.ActiveDocument.Tables(1).Rows.Count
Do While j1k > 1
j1k = j1k - 1
With Word.ActiveDocument.Tables(1).Rows(j1k).Cells(2)
s1 = UCase(.Range.Text)
S2 = UCase("MYTHIC*")
If s1 Like S2 Then
Debug.Print s1
j1 = j1 + 1
.Select
.Range.Text = ""
Selection.SplitTable
Selection.InsertBreak Type:=wdPageBreak
End If
End With
Loop
MsgBox "find=" & j1
 
End Sub
0
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
29.08.2013, 16:11  [ТС]
Выкладываю кусок таблицы
Вложения
Тип файла: doc Таблица.doc (54.0 Кб, 30 просмотров)
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,932
Записей в блоге: 4
29.08.2013, 17:14
а чем вас неустраивает макрос от 14,33
0
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
29.08.2013, 18:06  [ТС]
У меня работает только самый первый Ваш макрос при условии удаления 1 столбика.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,932
Записей в блоге: 4
29.08.2013, 18:58
что не так после работы последнего макроса
Вложения
Тип файла: zip Таблица29.zip (16.1 Кб, 22 просмотров)
0
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
30.08.2013, 13:08  [ТС]
Протестировала. Все работает. Огромное Вам спасибо.
0
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
03.09.2013, 16:30  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Добрый день.Макросом не нарадуюсь. А можно его немножечко усовершенствовать?
MsgBox "find=" & j1 показывает количество таблиц. Если бы это число вставлялось в определенную ячейку, или, просто, в начале документа, на первой странице... Как это сделать?
Спасибо.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
04.09.2013, 10:46
Вот легка покумекал над кодом от shanemac51:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sub N_мифических_таблиц()
If ActiveDocument.Tables.Count > 1 Then MsgBox "Уже сработало!": Exit Sub
Const BreakingWord = "MYTHIC" 'содержимое, по которому разбиваем
Dim N, j1k, s
 
j1k = ActiveDocument.Tables(1).Rows.Count
    Do While j1k > 1
    j1k = j1k - 1
        With ActiveDocument.Tables(1).Rows(j1k).Cells(2)
        s = Left(UCase(.Range.Text), Len(BreakingWord))
            
            If Trim(s) = Trim(BreakingWord) Then
'                Debug.Print "В " & j1k & "-й строке слово s = ", s
                N = N + 1
                .Select
                With Selection
                    .SplitTable
                    .Fields.Add Range:=.Range, Text:="seq Таб." 'поле нумерации
                    .HomeKey
                    .Paragraphs.Last.Alignment = wdAlignParagraphRight
                    If j1k > 1 Then .InsertBreak Type:=wdPageBreak
                    'а 1-ю подтаблицу оставляем на месте (на своей странице)
 
                    If j1k = 1 Then .TypeText "Всего подтаблиц: " & N & Chr(13)
                End With
            End If
        End With
    Loop
ActiveDocument.Fields.Update 'обновляет вставленные над таблицами нумера
'MsgBox "В исходной таблице найдено терминаторов (" & BreakingWord & "): " & N
End Sub
Добавлено через 9 часов 40 минут
2-я редакция
1
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
04.09.2013, 10:53  [ТС]
Спасибо Вам. Но я, наверное, не совсем внятно объяснила: мне необходимо, чтобы количество (число), на которое разбилась таблица, вставить в ячейку на первой странице. Во вложении показала. А макрос работает виртуозно. Спасибо.
Вложения
Тип файла: rar 01.rar (75.7 Кб, 11 просмотров)
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
04.09.2013, 13:27
Макрос опирается на число таблиц, а ячейка тоже таблица. Проще без ячейки вставить.
0
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
04.09.2013, 15:13  [ТС]
А как?
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
04.09.2013, 19:25
Ну просто числом, например: N. Ладно, сделал это N в ячейке; запуск в документе по F5.

Выполняется жутко медленно.
Вложения
Тип файла: doc 01.doc (92.0 Кб, 10 просмотров)
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
05.09.2013, 08:40
Вставлю свои пять копеек. Поиск ключевого слова выполняется встроенным механизмом поиска, а не перебором ячеек. Количество разбивок вставляется перед первой таблицей в ячейку
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sub SplitTableOnKeyword()
'    Ключевое слово
    Const KEYWORD = "MYTHIC"
'    Переход в начало документа
    Selection.HomeKey wdStory
'    Счётчик разбивок
    Dim cnt As Integer
'    Поиск искомого слова
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .MatchCase = True
        .MatchWholeWord = True
        .Text = KEYWORD
        While .Execute
            With Selection
'                Если найденное слово находится в таблице
                If .Information(wdWithInTable) Then
                    .SplitTable 'Разбивка таблицы
                    .InsertBreak wdPageBreak 'Вставка разрыв страницы
                    .MoveDown wdLine, 3, wdMove 'Смещение вниз, чтобы продолжить поиск
                    cnt = cnt + 1 'Увеличение счётчика
                End If
            End With
        Wend
    End With
'    Вставка ячейки с количеством разбиений перед первой разбитой таблицей
    Dim par As Paragraph
    Set par = ActiveDocument.Tables(1).Range.Paragraphs.First.Previous
    par.Range.InsertParagraphBefore
    With ActiveDocument.Tables.Add(par.Previous.Range, 1, 1)
        .Columns(1).SetWidth 100, wdAdjustNone
        .Borders.Enable = wdLineStyleSingle
        .Range.Paragraphs.Alignment = wdAlignParagraphCenter
        .Range.Font.Bold = True
        .Range.Text = cnt
    End With
End Sub
2
160 / 0 / 1
Регистрация: 29.03.2013
Сообщений: 48
05.09.2013, 11:17  [ТС]
Работает молниеносно.И, главное, так как мне нужно. Большое спасибо.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
05.09.2013, 13:01
На подпись Alex’а: а я вот и «день потерял», и летел минут пять (что в данном случае долго!).

Вывод: усовершенствовать алгоритм не всегда лучше, чем создать новый.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2013, 13:01
Помогаю со студенческими работами здесь

Как разделить данные по условию
Здравствуйте. Подскажите, пожалуйста, как можно рассортировать по кассирам (наверное лучше перенести на новый лист) все реализованные...

Разделить массив по условию несовместимости
Здравствуйте! Есть масссив (a,b,c,d....z) - необходимо разбить его на 6 подмассивов, с 4-6 элементам в каждом. Элемент вносится в...

Разделить файл на два, согласно условию
Помогите пожалуйста! Вот задача : Дано целое число K (> 0) и строковый файл. Создать два новых файла: строковый, содержащий первые...

Список, состоящий из 10 элементов, разделить по условию
Объясните новичку как это написать? Просьба написать на phyton Ввести с клавиатуры список, состоящий из 10 элементов и записать в новый...

Создать и заполнить численный массив, разделить его надвое по условию
1. Создать массив на 20 чисел. 2. Ввести в него значения с клавиатуры. 3. Создать два массива на 10 чисел каждый. 4. Скопировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru