Excel VBA代码查找列中的最大单元格值并删除其下方的所有行
Posted
技术标签:
【中文标题】Excel VBA代码查找列中的最大单元格值并删除其下方的所有行【英文标题】:Excel VBA code to find max cell value in column and delete all rows below it 【发布时间】:2017-08-23 21:34:02 【问题描述】:我有数百个 .csv 文件(A 列和 B 列中的数据)要清理,我认为宏对于快速处理这些数据很有用。
代码的目标是在A列中找到最大值的单元格,并删除它下面的所有行
到目前为止,我的代码是
Sub DeleteRowAfterRange()
Dim maxValue As Long
Set maxValue = Application.WorksheetFunction.Max(Columns("A"))
With Sheets("Sheet1")
.Rows(maxValue & ":" & UsedRange.Rows.Count).Delete
End With
End Sub
我在 VB 编辑器中运行宏并看到编译错误:突出显示这部分代码时需要对象
maxValue =
排队
Set maxValue = Application.WorksheetFunction.Max(Columns("A"))
我搜索了各种论坛,发现了与我相似的问题,但我对语法不够熟悉,无法弄清楚我的代码中存在什么问题。我将非常感谢任何帮助,并希望学习如何正确修改此代码
【问题讨论】:
除非您的maxValue
= 找到它的行,否则您的 Delete 将删除错误的行。
什么意思?例如,对于 A 列中的以下数据:1,3,4,5,6,8,3,2,3,2,1 代码应找到“8”所在的单元格并删除它们下方的所有行( "3,2,3,2,1")
不,Max 函数返回值而不是找到它的行。因此它将删除第 8 行(包括第 8 行)之后的所有行
您收到错误是因为您尝试将变量设置为范围,但最大值返回一个数字,而不是范围。如果您删除 set
,您会注意到它会起作用,但只会返回最大数量,没有关于在哪里找到的信息,如 Scott Craner 所说。
有什么理由不删除“max”行之前的行吗?
【参考方案1】:
你没有Set
一个Long,它不是一个对象。
Max 函数返回的不是位置而是实际数字。
我们可以在数字上使用 Match 来返回行。
Sub DeleteRowAfterRange()
Dim maxValue As Long
With Sheets("Sheet1")
maxValue = Application.WorksheetFunction.Match(Application.WorksheetFunction.Max(.Range("A:A")), .Range("A:A"), 0)
.Rows(maxValue & ":" & .UsedRange.Rows.Count).Delete
End With
End Sub
【讨论】:
嗨,斯科特。我尝试运行您的代码,但现在我看到编译错误:参数不是可选的 在哪一行?? 对于迟到的回复,我深表歉意。错误在这一行: maxValue = Application.WorksheetFunction.Match(Application.WorksheetFunction.Max(.Range("A:A")), .Range("A:A"), 0) 我没有收到任何错误,但看起来您在单词Max
中有一个空格
对不起,我刚才打错了。没有空间。我不知道为什么我仍然收到错误,此代码是否适用于 excel 2010 及更高版本?以上是关于Excel VBA代码查找列中的最大单元格值并删除其下方的所有行的主要内容,如果未能解决你的问题,请参考以下文章
使用特殊字符搜索单元格值时 VLOOKUP 的 Excel VBA 替代方案