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代码查找列中的最大单元格值并删除其下方的所有行的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA:用相邻的单元格值填充空单元格

使用特殊字符搜索单元格值时 VLOOKUP 的 Excel VBA 替代方案

基于公式的单元格值触发的 VBA 电子邮件代码

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?

从excel vba的列中的所有单元格中删除不需要的字符

使用基于单元格值的excel VBA打开文件,路径由相同的值动态组成