【问题标题】:Deleting row if there is another row with same value in column A and that row has value in c如果 A 列中有另一行具有相同值并且该行在 c 中有值,则删除行
【发布时间】:2013-11-21 01:51:04
【问题描述】:

我正在尝试编写一个执行以下操作的宏:

  1. 它取 A 列的值 - 每行的行(从下到上)= 初始行
  2. 它检查A列中是否有另一行具有相同的值
  3. 如果是:第一次匹配
  4. 它检查匹配的行是否在 C 列中写入了某些内容
  5. 如果是:删除初始行

我有以下但它不起作用,现在似乎还有错误“无法获取工作表函数类的匹配属性。

Option Explicit

Sub Testing()

Dim x               As Long
Dim y               As Long
Dim LastRow         As Long
Dim MatchedRow      As Long
Dim RowValue        As String

LastRow = Range("A999999").End(xlUp).Row

For x = LastRow To 1 Step -1

RowValue = Range("A" & x).Value

If Application.WorksheetFunction.CountIf(Range("A1:A" & x), Range("A" & x).Text) > 1 Then
    MatchedRow = Application.WorksheetFunction.Match(RowValue, Range("A1:A" & x), 0)
    If Range("C" & MatchedRow).Value <> "" Then
        Range("A" & x).EntireRow.Delete
    End If
End If

Next x

End Sub

希望有人能帮忙。

【问题讨论】:

    标签: vba excel duplicates row


    【解决方案1】:

    发生错误是因为RowValue 被声明为字符串。如果 A 列有数字,MATCH 函数会返回错误(除非数字被格式化为文本)。

    Dim RowValue As String 更改为Dim RowValue As Variant,它将适用于所有数据类型

    【讨论】:

    • 不错。认为这只会解决匹配错误,但似乎整个代码现在按预期工作。谢谢!
    【解决方案2】:

    您似乎在上面发布了答案,但在相关说明中,您可以通过将 WorksheetFunction COUNTIF function 更改为 COUNTIFS function 来收紧您的代码。

    If Application.WorksheetFunction.CountIf(Columns(1), Range("A" & x).Text, Columns(3), Chr(42)) > 1 Then
        Range("A" & x).EntireRow.Delete
    End If
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 2022-08-11
      • 2017-11-07
      • 2022-10-09
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多