我對 vba 宏非常陌生,我正在嘗試創建一個代碼來修剪清理列 A,然后過濾僅存在于 A 列中的空白單元格,并根據 A 列中存在的空白單元格洗掉整行

A 列的空白單元格很少,這些空白單元格可能有無效空間,因此首先要清理和修剪整個 A 列,然后過濾 A 列空白單元格并洗掉整行。
所需的輸出如下: -

我的代碼
Sub trimclean()
Dim lRow As Integer, i As Long
With Worksheets("Sandy")
lRow = .Range("A1").End(xlDown).Row
For i = 2 To lRow
.Cells(i, "A").Value = Trim(.Cells(i, "A").Value)
Next i
End With
End Sub
Sub DeleteBlanks()
Dim rDataToProcess As Range
Set rDataToProcess = ActiveWorkbook.Worksheets("Sandy").Range("A1").End(xlDown).Row.CurrentRegion
'Field in the below method refers to the column that is being filtered, so the second colum
rDataToProcess.AutoFilter field:=2, Criteria1:=""
rDataToProcess.Offset(1).Resize(rDataToProcess.Rows.Count).EntireRow.Delete
Sheet1.AutoFilterMode = False
End Sub
我的代碼中的問題是 

我只需要修剪干凈的 A 列并過濾 A 列上的空白單元格,然后根據 A 列上的空白單元格洗掉整行。
uj5u.com熱心網友回復:
首先,看起來您的“范圍”實際上是一個合格的表。如果是這樣,您可以參考作業表中的 ListObjects,這樣可以更輕松地修改表格。
它回圈,但至少你可以看到它在做什么。如果您希望它在一次呼叫中洗掉所有行,那么這是可能的,但是表中的行太多,并且需要將洗掉拆分并打包。
另外,我不確定您是否想分兩步進行,但我已經在這里提供了...
2個步驟
Public Sub TrimCells()
Dim objTable As ListObject, lngRow As Long, lngColumnToTrim As Long
lngColumnToTrim = 1
Set objTable = GetTable
TogglePerformance False
With objTable.DataBodyRange
For lngRow = 1 To .Rows.Count
.Cells(lngRow, lngColumnToTrim) = Trim(.Cells(lngRow, lngColumnToTrim))
Next
End With
TogglePerformance True
End Sub
Public Sub DeleteBlankRows()
Dim objTable As ListObject, lngRow As Long, lngColumnToCheckForBlank As Long
lngColumnToCheckForBlank = 1
Set objTable = GetTable
TogglePerformance False
With objTable.DataBodyRange
For lngRow = .Rows.Count To 1 Step -1
If Len(.Cells(lngRow, lngColumnToCheckForBlank).Value) = 0 Then
.Rows(lngRow).Delete xlShiftUp
End If
Next
End With
TogglePerformance True
End Sub
Private Function GetTable() As ListObject
Set GetTable = ThisWorkbook.Worksheets("Sandy").ListObjects("MyTable")
End Function
Private Sub TogglePerformance(ByVal bOn As Boolean)
Application.ScreenUpdating = bOn
Application.EnableEvents = bOn
If bOn Then
Application.Calculation = xlCalculationAutomatic
Else
Application.Calculation = xlCalculationManual
End If
End Sub
...但是,如果您愿意一步一步地做到這一點,那么我會更容易。
1 步
Public Sub DeleteBlankRows()
Dim objTable As ListObject, lngRow As Long, lngColumnToCheckForBlank As Long
lngColumnToCheckForBlank = 1
Set objTable = ThisWorkbook.Worksheets("Sandy").ListObjects("MyTable")
TogglePerformance False
With objTable.DataBodyRange
For lngRow = .Rows.Count To 1 Step -1
If Len(Trim(.Cells(lngRow, lngColumnToCheckForBlank).Value)) = 0 Then
.Rows(lngRow).Delete xlShiftUp
End If
Next
End With
TogglePerformance True
End Sub
Private Sub TogglePerformance(ByVal bOn As Boolean)
Application.ScreenUpdating = bOn
Application.EnableEvents = bOn
If bOn Then
Application.Calculation = xlCalculationAutomatic
Else
Application.Calculation = xlCalculationManual
End If
End Sub
...您只需要確保更改Table Name代碼或在作業表本身上進行更改。

我還假設您要檢查表格的第一列。考慮到您正在檢查作業表上的 A 列,這是有道理的。
最重要的是,您的桌子可以在任何地方,這仍然有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/419582.html
標籤:
