我试图删除Excel表格中的很多行。
我的VBA非常简单:
Sub delNA()
lr = Cells(Rows.Count, "A").End(xlUp).Row 'find last row
For i = lr To 2 Step -1 'loop thru backwards, finish at 2 for headers
If Cells(i, "H").Text = "#N/A" Then Rows(i).EntireRow.Delete
Next i
End Sub
但我的问题是有时我的标题不同。在这种情况下,标题BTEX(Sum)在H2中,但有时该参数在G2中,有时它在E2中,所以我试图做的是让VBA搜索标题名称,所以不是H而是标准是" BTEX(Sum)"。
有没有办法让VBA在第2行中的值为" BTEX(Sum)"
的列中运行答案 0 :(得分:1)
@Mikkel Astrup你首先只需使用for循环来查找你要查找的col索引,在这种情况下,第2行中单元格的col索引具有值" BTEX(Sum)"
Dim lColumn,indexCol As Long
dim ws as worksheet
dim headerKey as string
set ws = thisworkbook.worksheets("Sheet1")
lColumn = ws.Cells(2, Columns.Count).End(xlToLeft).Column
headerKey = "BTEX (Sum)"
for indexCol = 1 to lColumn step 1
if ws.cells(2,indexCol).value = headerKey then
' your code ' indexCol is the index of col you are looking for'
exit for ' exit the loop now
end if
Next
答案 1 :(得分:1)
尝试一下:
Option Explicit
Sub delNA()
Const HEADER_TEXT As String = "BTEX (Sum)"
Dim thisSheet As Worksheet
Set thisSheet = ActiveSheet
With thisSheet
Dim myHeader As Range
Set myHeader = .Cells.Find(What:=HEADER_TEXT, after:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not myHeader Is Nothing Then 'i.e. we found the header text somewhere
Dim headerColumn As Long
headerColumn = myHeader.Column
Dim lastRow As Long
'Update here:
lastRow = .Cells(.Rows.Count, headerColumn).End(xlUp).Row 'find last row
Dim i As Long
For i = lastRow To 2 Step -1 'loop thru backwards, finish at 2 for headers
'Update here:
If IsError(.Cells(i, headerColumn).Value2) Then
.Rows(i).EntireRow.Delete
End If
Next i
Else
MsgBox ("Could not find a column for the header text " & HEADER_TEXT)
End If
End With
End Sub
.Find()
来快速识别标题列的位置,如果找不到 ,则会弹出错误消息(以防万一)
.Find()
将使用Find
对话框中未明确设置的任何内容的当前设置,并在您下次使用Find
对话框时,设置将是您的代码设置的任何设置。即Find
对话框和.Find()
函数共享一组常见的持久参数。thisSheet
和.Cells()
明确引用.Rows()
(请注意引导.
),因为该行:With thisSheet
.Value2
代替.text
(请参阅here。)Option Explicit
以确保在使用之前声明所有变量。
MyText
作为变量而在其他地方使用MyTxt
作为变量而不理解为什么它不是'工作。Const
声明转换为delNA()
接受的参数来构建更通用的函数,并将其用于任何标头行而不是这个固定的行。