Как удалить все пустые строки и столбцы из таблиц в Word? В этом руководстве показано несколько способов удаления пустых строк и столбцов из таблиц в документе Word.
Вручную удалить все пустые строки и столбцы из таблиц
Удалите все пустые строки и столбцы из таблиц с помощью кода VBA
Удалите все пустые строки и столбцы из таблиц одним щелчком мыши
Вручную удалить все пустые строки и столбцы из таблиц
Microsoft Office Word не предоставляет удобный способ удаления пустых строк и столбцов, и вам необходимо удалить их, вручную выбрав каждую пустую строку и столбец, а затем удаляя их по одному.
Шаг 1: Выберите пустую строку или пустой столбец, который вы хотите удалить. Смотрите скриншот:
Шаг 3: Под Настольные Инструменты, щелкните значок макет вкладка;
Шаг 4: в Строки и столбцы группу, нажмите Удалить строки или Удалить столбцы.
Удалите все пустые строки и столбцы из таблиц с помощью кода VBA
Макрофункция Word предоставляет гораздо более удобный способ удалить все пустые строки и столбцы из таблиц в документе. Вы можете удалить все пустые строки и столбцы следующим образом.
Шаг 1: нажмите «Alt-F11» открыть окно Microsoft Visual Basic для приложений;
Шаг 2: нажмите Модули на Вставить вкладку, скопируйте и вставьте следующий код VBA в окно модуля;
Шаг 3: Затем нажмите Run кнопку, чтобы применить VBA.
Код VBA для удаления всех пустых строк и столбцов из таблиц:
Sub DeleteEmptyTablerowsandcolumns ()
Приложение.ScreenUpdating = False
Dim Tbl As Table, cel As Cell, i As Long, n As Long, fEmpty As Boolean
С ActiveDocument
Для каждого тбл в. Таблицах
n = Таблица.Столбцов.Количество
Для i = n To 1 Шаг -1
fПусто = Истина
Для каждой ячейки в Tbl.Columns (i) .Cells
Если Len (cel.Range.Text)> 2, то
fEmpty = Ложь
Выход для
End If
Следующий чел
Если fEmpty = True, то Tbl.Columns (i) .Delete
Затем я
Следующая таблица
Конец с
С ActiveDocument
Для каждого тбл в. Таблицах
n = Tbl.Rows.Count
Для i = n To 1 Шаг -1
fПусто = Истина
Для каждой ячейки In Tbl.Rows (i) .Cells
Если Len (cel.Range.Text)> 2, то
fEmpty = Ложь
Выход для
End If
Следующий чел
Если fEmpty = True, то Tbl.Rows (i) .Delete
Затем я
Следующая таблица
Конец с
Set cel = Nothing: Set Tbl = Nothing.
Application.ScreenUpdating = True
End Sub
Удалите все пустые строки и столбцы из таблиц одним щелчком мыши
Kutools for Word предоставляет вам наиболее удобный способ удалить все пустые строки и столбцы из таблиц в документе. Вам просто нужно нажать один раз, и Kutools for Wordс Delete Rows/Columns Утилита быстро удалит все пустые строки и столбцы из всех или выбранных таблиц.
После установки Kutools for Word, пожалуйста, сделайте следующее:(Бесплатная загрузка Kutools for Word Сейчас!)
1. Нажмите Кутулс Плюс > Delete Rows/Columns на Table панель.
2. Затем появится диалоговое окно, выберите область, из которой вы хотите удалить таблицы, в разделе Искать в, затем отметьте Строка вариант и Пустая строка вариант или чек Колонка вариант и Пустая строка вариант как вам нужно. Если вы хотите удалить все пустые строки и столбцы, вам нужно применить эту операцию дважды.
Появится диалоговое окно, напоминающее вам, сколько таблиц было обработано, щелкните OK чтобы закрыть, а пустые строки и столбцы были удалены из таблиц.
Наконечник.Если вы хотите удалить пустые строки с листа Excel, Удалить пустые строки полезности Kutools for Excel могу помочь тебе.
Рекомендуемые инструменты для повышения производительности Word
Kutools For Word — Более 100 расширенных функций для Word, сэкономьте 50% времени
- Сложные и повторяющиеся операции можно производить разово за секунды.
- Вставляйте сразу несколько изображений из папок в документ Word.
- Объединяйте и объединяйте несколько файлов Word из папок в одну в желаемом порядке.
- Разделите текущий документ на отдельные документы в соответствии с заголовком, разрывом раздела или другими критериями.
- Преобразование файлов между Doc и Docx, Docx и PDF, набор инструментов для общих преобразований и выбора и т. Д.
This article shows how to use VBA in MS Word to delete empty rows from a table or rows that have at least one cell that is empty. Say you have multiple tables in a Word document and you want to print the document with only the non-empty rows. Or the tables are to be imported into a database in which the values cannot be blank. These are just some of the scenarios where you will find a practical implementation of this code.
Before we jump into the examples, let us look at two different ways to access a table in a Word document.
1. By using the table index. Below code sets the Tbl variable to the second table in the document.
Set Tbl = ThisDocument.Tables(2)2. By using the table title. You can set the title by selecting a table in word > Right Click > Table Properties > Alt Text tab
You can loop through all the tables in the document and check for the title to update only those tables that specify a certain condition:
For Each Tbl In ThisDocument.Tables If InStr(1, Tbl.Title, "Invoices") = 1 Then 'Your code goes here End If Next TblSo, the code will be executed for all the tables that have title starting with invoices.
Example 1: Delete rows that are completely blank
For each row, the code checks the length of the row and if it is equal to the length of a blank row, it is deleted.
Note that we start from the bottom-most row and move to the top (because the row index will change if we start deleting from the top).Set Tbl = ThisDocument.Tables(1) With Tbl noOfCol = Tbl.Range.Rows(1).Cells.Count For i = .Rows.Count To 1 Step -1 With .Rows(i) If Len(.Range) = noOfCol * 2 + 2 Then .Delete End With Next iHere, the “Table.Range” property returns a Range object that represents the portion of a document that is contained within the specified table.
.Rows(1) returns the first row of the table
.Cells returns the cells in the selected row
.Count gives the number of cells in the row (i.e. number of columns in the table)
.Delete deletes a row
A point to be noted here is that the length of each blank cell in the table is 2. And if you have any text in the cell, the length of the cell equals length of the string + 2. For example, if a cell contains text “Word”, length of the cell is 6 (4 + 2)
Also, the length of the end of row character is also 2. So, length of a blank row equals 2* + 2
Example 2: Delete rows that contain at least one cell blank
Here the loop iterates through each cell in the table and if the length is equal to 2 (i.e. the cell is empty), the entire row is deleted. This example and the next one use the Mod operator.
Set Tbl = ThisDocument.Tables(1) With Tbl noOfCol = Tbl.Range.Rows(1).Cells.Count With .Range For i = .Cells.Count To 1 Step -1 On Error Resume Next If Len(.Cells(i).Range) = 2 Then .Rows(.Cells(i).RowIndex).Delete j = i Mod noOfCol If j = 0 Then j = noOfCol i = i – j End If Next i End WithNote that “j” is used here to adjust the value of “i” to the row above the deleted row (to reduce the number of executions of the loop). If your table consists of merged cells, it is better to remove the three lines after the delete row function as it will cause errors in the output.
Consider a table that has three header rows with blanks in them:
The first 3 lines consist of the headers and obviously we do not intend to delete them even if there are blanks present. So, we modify the above code to accommodate for the first three header rows. Here is the entire code:
Sub DeleteEmptyTableRows() Application.ScreenUpdating = False Dim Tbl As Table Dim i As Long Dim noOfCol As Integer, j As Integer For Each Tbl In ThisDocument.Tables With Tbl noOfCol = Tbl.Range.Rows(2).Cells.Count For i = .Rows.Count To 4 Step -1 With .Rows(i) If Len(.Range) = noOfCol * 2 + 2 Then .Delete End With Next i With .Range For i = .Cells.Count To noOfCol * 3 + 1 Step -1 On Error Resume Next If Len(.Cells(i).Range) = 2 Then .Rows(.Cells(i).RowIndex).Delete j = i Mod noOfCol If j = 0 Then j = noOfCol i = i - j End If Next i End With End With Next Tbl Set Tbl = Nothing Application.ScreenUpdating = True End SubThings to note:
– The first row consists of merged cells. So, we have used the second row to get the number of columns in the table
– The first for loop that checks for an entire empty row goes from the last row to row number 4
– For the second for loop that checks each cell, the counter ends at the first cell of the fourth row
– I have used both the for loops just to demonstrate how to take care of headers in both the examples. You can choose which one to use based on your requirement.After you run the code, the table will look like this:
See also:
- Deleting rows using Excel VBA
ura-lavrikov 0 / 0 / 0 Регистрация: 07.06.2012 Сообщений: 13 |
||||||
1 |
||||||
Word Удаление пустых строк во всех таблицах документа06.02.2022, 15:21. Показов 1329. Ответов 12 Метки нет (Все метки)
Здравствуйте, имеется задача удалять пустые строки во всех таблицах. Таблицы разные, в том числе с объединёнными ячейками по вертикали и горизонтали. Впрочем, прилагаю файл примера. Также на просторах сети найден код:
Но он пишет, что «отсутствует доступ к отдельным строкам поскольку таблица имеет ячейки объединенные по вертикали». Также раньше эту операцию выполнял через надстройку Kutools и все работает, но хочется всё автоматизировать наряду с другими задачами. Код тоже взят с их сайта. Вложения
0 |
малоболт 1143 / 442 / 193 Регистрация: 30.01.2020 Сообщений: 1,095 |
|
07.02.2022, 18:22 |
2 |
пишет, что «отсутствует доступ к отдельным строкам поскольку таблица имеет ячейки объединенные по вертикали». Да. Доступа к отдельным строкам и отдельным столбцам при наличии объединённых ячеек не будет. Но, при этом перебрать ячейки таблицы в порядке возрастания/убывания порядковых номеров (а не адресов!!) можно. И так же можно получить для каждой из перебираемаых ячеек свойства RowIndex и ColumnIndex. Можно проверив в обратном порядке все ячеёки с одинаковым RowIndex определить пуста ли данная строка. Затем, стоя на первой из этих ячеек дать команду для данной ячейки Cells(i).Rows.Delete, которая удалит ряд с данной ячейкой (испортив заодно ширину таблицы). F gjnjv gthtqnb r zxtqrt ii-1 b повторить перебор ячеек с уже новым RowIndex. Соответственно перед тем, как всё это делать надо где-то сохранить массив ширин столбцов и восстановить эти ширины по окончании удаления строк.
0 |
0 / 0 / 0 Регистрация: 07.06.2012 Сообщений: 13 |
|
07.02.2022, 20:52 [ТС] |
3 |
Да. Доступа к отдельным строкам и отдельным столбцам при наличии объединённых ячеек не будет. Но, при этом перебрать ячейки таблицы в порядке возрастания/убывания порядковых номеров (а не адресов!!) можно. И так же можно получить для каждой из перебираемаых ячеек свойства RowIndex и ColumnIndex. Можно проверив в обратном порядке все ячеёки с одинаковым RowIndex определить пуста ли данная строка. Затем, стоя на первой из этих ячеек дать команду для данной ячейки Cells(i).Rows.Delete, которая удалит ряд с данной ячейкой (испортив заодно ширину таблицы). F gjnjv gthtqnb r zxtqrt ii-1 b повторить перебор ячеек с уже новым RowIndex. Соответственно перед тем, как всё это делать надо где-то сохранить массив ширин столбцов и восстановить эти ширины по окончании удаления строк. 1. В файле примера представлены 2 типа таблиц, которые есть в заготовке. И в первой таблице есть строки, которые полностью объединены по горизонтали, НО ширина ячеек в первых 2-х строках будет соответствовать всей таблице. 2. Да, все таблицы разом. То есть требуется сделать из табл 1 табл2
0 |
Модератор 11343 / 4661 / 749 Регистрация: 07.08.2010 Сообщений: 13,512 Записей в блоге: 4 |
|
07.02.2022, 22:33 |
4 |
ura-lavrikov, Миниатюры
0 |
0 / 0 / 0 Регистрация: 07.06.2012 Сообщений: 13 |
|
07.02.2022, 22:55 [ТС] |
5 |
такой лист получить можно, даже програмно Такую таблицу не примет преподаватель, а таких заданий требуется решать 100+ шт, поэтому такой вид не подойдет
0 |
Модератор 11343 / 4661 / 749 Регистрация: 07.08.2010 Сообщений: 13,512 Записей в блоге: 4 |
|
07.02.2022, 23:13 |
6 |
Такую таблицу не примет преподаватель, а таких заданий требуется решать 100+ шт, поэтому такой вид не подойдет получается 3 макроса, причем весьма сложных
0 |
Punkt5 малоболт 1143 / 442 / 193 Регистрация: 30.01.2020 Сообщений: 1,095 |
||||
08.02.2022, 00:03 |
7 |
|||
Сообщение было отмечено ura-lavrikov как решение Решение
Такую таблицу не примет преподаватель, а таких заданий требуется решать 100+ шт Что ж вы сразу не сказали, что это учебное задание. Я б не писал.
Добавлено через 2 минуты
получается 3 макроса, причем весьма сложных Есть хитрый выход, как я писал выше
дать команду для данной ячейки Cells(i).Rows.Delete И тогда всё можно вместить в один маленький макрос без разбивки и последующей склейки оставшихся ячеек. Добавлено через 6 минут
2 |
0 / 0 / 0 Регистрация: 07.06.2012 Сообщений: 13 |
|
08.02.2022, 10:06 [ТС] |
8 |
Вот вам код. Пробуйте Спасибо огромное, всё работает прекрасно
0 |
0 / 0 / 0 Регистрация: 02.11.2022 Сообщений: 3 |
|
02.11.2022, 14:56 |
9 |
добрый день, а можно подправить этот код, для того, чтобы строка удалялась, если только одна ячейка пуста, при соблюдении тех же условий (объединённые ячейки) заранее благодарю
0 |
Punkt5 малоболт 1143 / 442 / 193 Регистрация: 30.01.2020 Сообщений: 1,095 |
||||
02.11.2022, 15:17 |
10 |
|||
а можно подправить этот код, для того, чтобы строка удалялась, если только одна ячейка пуста, при соблюдении тех же условий (объединённые ячейки) Подправил, но не проверял. Проверьте.
0 |
0 / 0 / 0 Регистрация: 02.11.2022 Сообщений: 3 |
|
02.11.2022, 15:37 |
11 |
спасибо за Ваш быстрый ответ!! работает только если пуста последняя (крайне правая) ячейка и при удалении Chr(160) из кода.
0 |
Punkt5 малоболт 1143 / 442 / 193 Регистрация: 30.01.2020 Сообщений: 1,095 |
||||
02.11.2022, 15:59 |
12 |
|||
может подскажите, что необходимо менять, для изменения порядка пустых ячеек, чтоб я сам мог варьировать? В 18 строке у меня ошибка. Из-за неё удалялась строка только если последняя ячейка пустая. Поменяйте на
Про Chr(160) — я уже писал выше — это неразрывный пробел, который был в пустых ячейках у ТС. Если у вас там совсем пусто — просто уберите Chr(160) из 15 и 18 строк. Если в пустых ячейках у вас какой-то другой невидимый знак — добавьте его в 15 и 18 строке к Chr(13) & Chr(7).
0 |
0 / 0 / 0 Регистрация: 02.11.2022 Сообщений: 3 |
|
02.11.2022, 16:07 |
13 |
Спасибо огромное всё работает.
0 |
I been struggling with a word macro that deletes Empty lines where a «$» exists. The code below works but only for the selected table, how can I have the code loop through the entire document and delete empty lines from all pages.
Option Explicit
Sub TEST()
Dim i As Long
With Selection.Tables(1)
For i = .Rows.Count To 1 Step -1
If Len(.Cell(i, 2).Range.Text) = 3 And Left(.Cell(i, 2).Range.Text, 1) = "$" Then
.Rows(i).Delete
End If
Next i
End With
End Sub
M—
24.4k7 gold badges58 silver badges92 bronze badges
asked Apr 14, 2017 at 15:00
2
This is not tested on the same data-set as OP has since it is not provided.
Option Explicit
Sub TEST()
Dim tbl As Table
Dim mDoc As Document
Dim oRow As Row
Set mDoc = ActiveDocument
For Each tbl in mDoc.Tables
For Each oRow In tbl.Rows
If Len(oRow.Cells(2).Range.Text) = 3 And _
Left(oRow.Cells(2).Range.Text, 1) = "$" Then
oRow.Delete
End If
Next oRow
Next tbl
End Sub
answered Apr 14, 2017 at 15:09
M—M—
24.4k7 gold badges58 silver badges92 bronze badges
10
Если вам приходится работать с таблицами в Ворде, то, думаю, вам ни раз приходил вопрос: Как удалить строку или столбец в таблице? Давайте разберем два метода удаления: вручную и автоматически.
В ручную мы можем удалить любые строку или столбец в таблице. Также можно удалить пустые строки и столбы в Ворде с помощью скрипта VBA, который удалит их самостоятельно.
- Удалить вручную строку или столбец
- Удалить с помощью скрипта VBA все пустые строки и столбцы
- 1 Удалить вручную строку или столбец
- 2 Удалить с помощью скрипта VBA все пустые строки и столбцы
Удалить вручную строку или столбец
Данный метод проверялся в Word 2007, 2010, 2013.
Шаг 1.
Выделите левой кнопкой мыши строку или столбец, который вы желаете удалить. Подведите курсор к краю таблицы, чтобы курсор изменил свой вид. Смотрите на скриншот, как это сделать.
Шаг 2.
В ленте в разделе «Работа с таблицами» откройте вкладку «Макет».
Шаг 3.
В разделе «Строки и столбцы» найдите кнопку «Удаление», и в выпадающем списке выберите нужное вам действие.
В Word 2010-2013 в выплывающем окне есть этот же список по удалению столбцов и строк из таблицы.
Удалить с помощью скрипта VBA все пустые строки и столбцы
Если вы желаете подчистить таблицу в Ворде от пустых строк и столбцов, то ручной метод может быть довольно утомительным, если, скажем, у вас большая таблица. Для этого можно прибегнуть к помощи VBA, который сделает все это за вас.
Данный метод проверялся в Word 2007, 2010, 2013
Как пользоваться скриптами VBA в Word читайте здесь >>>
Скопируйте этот скрипт и запустите его выполнение.
Sub DeleteEmptyTablerowsandcolumns()Application.ScreenUpdating = FalseDim Tbl As Table, cel As Cell, i As Long, n As Long, fEmpty As BooleanWith ActiveDocumentFor Each Tbl In .Tablesn = Tbl.Columns.CountFor i = n To 1 Step −1fEmpty = TrueFor Each cel In Tbl.Columns(i).CellsIf Len(cel.Range.Text) > 2 ThenfEmpty = FalseExit ForEnd IfNext celIf fEmpty = True Then Tbl.Columns(i).DeleteNext iNext TblEnd WithWith ActiveDocumentFor Each Tbl In .Tablesn = Tbl.Rows.CountFor i = n To 1 Step −1fEmpty = TrueFor Each cel In Tbl.Rows(i).CellsIf Len(cel.Range.Text) > 2 ThenfEmpty = FalseExit ForEnd IfNext celIf fEmpty = True Then Tbl.Rows(i).DeleteNext iNext TblEnd WithSet cel = Nothing: Set Tbl = NothingApplication.ScreenUpdating = TrueEnd Sub