Excel VBA - Удалить пустые строки
117063 просмотра
8 ответа
Я хотел бы удалить пустые строки, которые генерирует мое предложение ERP. Я пытаюсь пройти документ ( A1:Z50
) и для каждой строки, где нет данных в ячейках ( A1-B1...Z1 = empty
, A5-B5...Z5 = empty
), я хочу удалить их.
Я нашел это, но не могу настроить его для меня.
On Error Resume Next
Worksheet.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Автор: CustomX
Источник
Размещён: 13.11.2019 11:32
Ответы (8)
22 плюса
Как насчет
sub foo()
dim r As Range, rows As Long, i As Long
Set r = ActiveSheet.Range("A1:Z50")
rows = r.rows.Count
For i = rows To 1 Step (-1)
If WorksheetFunction.CountA(r.rows(i)) = 0 Then r.rows(i).Delete
Next
End Sub
Автор: Alex K.
Размещён: 21.02.2012 03:15
14 плюса
Попробуй это
Option Explicit
Sub Sample()
Dim i As Long
Dim DelRange As Range
On Error GoTo Whoa
Application.ScreenUpdating = False
For i = 1 To 50
If Application.WorksheetFunction.CountA(Range("A" & i & ":" & "Z" & i)) = 0 Then
If DelRange Is Nothing Then
Set DelRange = Range("A" & i & ":" & "Z" & i)
Else
Set DelRange = Union(DelRange, Range("A" & i & ":" & "Z" & i))
End If
End If
Next i
If Not DelRange Is Nothing Then DelRange.Delete shift:=xlUp
LetsContinue:
Application.ScreenUpdating = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
Если вы хотите удалить всю строку, то используйте этот код
Option Explicit
Sub Sample()
Dim i As Long
Dim DelRange As Range
On Error GoTo Whoa
Application.ScreenUpdating = False
For i = 1 To 50
If Application.WorksheetFunction.CountA(Range("A" & i & ":" & "Z" & i)) = 0 Then
If DelRange Is Nothing Then
Set DelRange = Rows(i)
Else
Set DelRange = Union(DelRange, Rows(i))
End If
End If
Next i
If Not DelRange Is Nothing Then DelRange.Delete shift:=xlUp
LetsContinue:
Application.ScreenUpdating = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
Автор: Siddharth Rout
Размещён: 21.02.2012 03:13
4 плюса
Я знаю, что опаздываю на вечеринку, но вот некоторый код, который я написал / использовал, чтобы сделать работу.
Sub DeleteERows()
Sheets("Sheet1").Select
Range("a2:A15000").Select
Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Автор: Smiley Lando
Размещён: 12.12.2018 09:45
0 плюса
Чтобы сделать ответ Алекса К чуть более динамичным, вы можете использовать код ниже:
Sub DeleteBlankRows()
Dim wks As Worksheet
Dim lngLastRow As Long, lngLastCol As Long, lngIdx As Long, _
lngColCounter As Long
Dim blnAllBlank As Boolean
Dim UserInputSheet As String
UserInputSheet = Application.InputBox("Enter the name of the sheet which you wish to remove empty rows from")
Set wks = Worksheets(UserInputSheet)
With wks
'Now that our sheet is defined, we'll find the last row and last column
lngLastRow = .Cells.Find(What:="*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
lngLastCol = .Cells.Find(What:="*", LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
'Since we need to delete rows, we start from the bottom and move up
For lngIdx = lngLastRow To 1 Step -1
'Start by setting a flag to immediately stop checking
'if a cell is NOT blank and initializing the column counter
blnAllBlank = True
lngColCounter = 2
'Check cells from left to right while the flag is True
'and the we are within the farthest-right column
While blnAllBlank And lngColCounter <= lngLastCol
'If the cell is NOT blank, trip the flag and exit the loop
If .Cells(lngIdx, lngColCounter) <> "" Then
blnAllBlank = False
Else
lngColCounter = lngColCounter + 1
End If
Wend
'Delete the row if the blnBlank variable is True
If blnAllBlank Then
.rows(lngIdx).delete
End If
Next lngIdx
End With
MsgBox "Blank rows have been deleted."
End Sub
Это было взято из этого веб-сайта, а затем немного адаптировано, чтобы позволить пользователю выбирать, из какого листа он хочет удалить пустые строки.
Автор: RugsKid Размещён: 18.12.2017 09:500 плюса
Чтобы работала функция возобновления при ошибке, необходимо объявить значения рабочей книги и таблицы как таковые
On Error Resume Next
ActiveWorkbook.Worksheets("Sheet Name").Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
У меня была та же проблема, и это исключило все пустые строки без необходимости реализации цикла For.
Автор: Jerome Размещён: 30.04.2018 02:390 плюса
Это отлично работает для меня (вы можете настроить lastrow и lastcol по мере необходимости):
Sub delete_rows_blank2()
t = 1
lastrow = ActiveSheet.UsedRange.Rows.Count
lastcol = ActiveSheet.UsedRange.Columns.Count
Do Until t = lastrow
For j = 1 To lastcol
'This only checks the first column because the "Else" statement below will skip to the next row if the first column has content.
If Cells(t, j) = "" Then
j = j + 1
If j = lastcol Then
Rows(t).Delete
t = t + 1
End If
Else
'Note that doing this row skip, may prevent user from checking other columns for blanks.
t = t + 1
End If
Next
Loop
End Sub
Автор: user8608712
Размещён: 27.02.2018 03:10
0 плюса
для тех, кто заинтересован в удалении «пустых» и «пустых» строк (Ctrl + Shift + End, углубляясь в ваш рабочий лист) ... вот мой код. Он найдет последнюю «настоящую» строку на каждом листе и удалит оставшиеся пустые строки.
Function XLBlank()
For Each sh In ActiveWorkbook.Worksheets
sh.Activate
Cells(1, 1).Select
lRow = Cells.Find(What:="*", _
After:=Range("A1"), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Range("A" & lRow + 1, Range("A1").SpecialCells(xlCellTypeLastCell).Address).Select
On Error Resume Next
Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
Cells(1, 1).Select
ActiveWorkbook.Save
Next
ActiveWorkbook.Worksheets(1).Activate
ActiveWorkbook.Save
End Function
Откройте VBA (ALT + F11), Вставьте -> Модуль, Скопируйте мой код и запустите его с помощью F5. Эт вуаля: D
Автор: jjsteing Размещён: 05.03.2019 08:470 плюса
У меня есть еще один случай, когда вы хотите удалить только те строки, которые полностью пусты, но не одиночные пустые ячейки. Он также работает за пределами Excel, например, при доступе к Excel с помощью Access-VBA или VB6.
Public Sub DeleteEmptyRows(Sheet As Excel.Worksheet)
Dim Row As Range
Dim Index As Long
Dim Count As Long
If Sheet Is Nothing Then Exit Sub
' We are iterating across a collection where we delete elements on the way.
' So its safe to iterate from the end to the beginning to avoid index confusion.
For Index = Sheet.UsedRange.Rows.Count To 1 Step -1
Set Row = Sheet.UsedRange.Rows(Index)
' This construct is necessary because SpecialCells(xlCellTypeBlanks)
' always throws runtime errors if it doesn't find any empty cell.
Count = 0
On Error Resume Next
Count = Row.SpecialCells(xlCellTypeBlanks).Count
On Error GoTo 0
If Count = Row.Cells.Count Then Row.Delete xlUp
Next
End Sub
Автор: Aranxo
Размещён: 27.08.2019 11:34
Вопросы из категории :
- vba Обновить результаты функции Excel VBA
- vba Как найти последнюю строку, содержащую данные на листе Excel с макросом?
- vba Функция сортировки массива VBA?
- vba Получение Excel для обновления данных на листе из VBA
- vba Как я могу отправить HTTP-запрос POST на сервер из Excel, используя VBA?
- vba Относительные вместо абсолютных путей в Excel VBA
- excel-vba Как я могу кодировать строку в Excel в VBA?
- excel-vba Установка выбора в Ничто при программировании Excel
- excel Чтение файлов Excel из C #
- excel Лучший способ выполнения контроля версий для MS Excel
- excel Как создать файл Excel (.XLS и .XLSX) в C # без установки MS Office?