Excel VBA代码,用于筛选特定列并从其他列中删除数据

Excel VBA代码,用于筛选特定列并从其他列中删除数据,excel,vba,Excel,Vba,我试图根据“IBM_软件”的名称筛选excel工作表中H列中的数据,并删除同一工作表J列中的层次结构数据。下面是我使用的代码,但它没有按照我想要的方式工作,它也删除了顶部的行,这很糟糕 Sub Delete_Rows_Based_On_Value() 'Apply a filter to a Range and delete visible rows 'Source: https://www.excelcampus.com/vba/delete-rows-cell-values/ ''' D

我试图根据“IBM_软件”的名称筛选excel工作表中H列中的数据,并删除同一工作表J列中的层次结构数据。下面是我使用的代码,但它没有按照我想要的方式工作,它也删除了顶部的行,这很糟糕

Sub Delete_Rows_Based_On_Value()
'Apply a filter to a Range and delete visible rows
'Source: https://www.excelcampus.com/vba/delete-rows-cell-values/


'''
Dim ws As Worksheet

  'Set reference to the sheet in the workbook.
  Set ws = ThisWorkbook.Worksheets("BDDASHBTEMPLATEFYTD21BILLING3")
  ws.Activate 'not required but allows user to view sheet if warning message appears

  'Clear any existing filters
  On Error Resume Next
    ws.ShowAllData
  On Error GoTo 0

  '1. Apply Filter
  ws.Range("A:P").AutoFilter Field:=8, Criteria1:="IBM_Software"

  '2. Delete Rows
  Application.DisplayAlerts = False
   Sheets("BDDASHBTEMPLATEFYTD21BILLING3").AutoFilter.Range.Offset(1).Delete xlShiftUp
  Application.DisplayAlerts = True


  '3. Clear Filter
  On Error Resume Next
    ws.ShowAllData
  On Error GoTo 0

End Sub

您的解决方案不起作用可能意味着您遇到了错误。工作表中的每一行也不太可能都有数据。如果使用每一行,则不能偏移一行。我将让您决定如何找到最后一行(LR)。此解决方案仅删除筛选的行,您的解决方案将删除所有行

ws.Range("A1:P" & LR).AutoFilter Field:=8, Criteria1:="IBM_Software"
ws.Range("A1.P" & LR).Offset(1,0).SpecialCells(xlCellTypeVisible).EntireRow.Delete

感谢您的回复,但在我的情况下,我只想在过滤H列数据后删除特定的J列。不幸的是,在这种情况下,您的代码不正确,这不是您的原始语句,也不是您的代码所代表的内容。如果不删除整列,则无法删除J列中的数据。如果要清除数据,则需要
ClearContents
。您仍然希望使用
SpecialCells
仅清除过滤的数据。是的,先生,我应用了{Worksheets(“BDDASHBTEMPLATEFYTD21BILLING3”)。Columns(10)。ClearContents仅清除所需的过滤数据
ws.Range(“J2:J”&LR)。SpecialCells(xlCellTypeVisible)。ClearContents
。这跳过标题。