根据顺序删除整行

时间:2013-01-31 21:28:58

标签: excel excel-vba sequence vba

我有一些从MYOB转储的数据需要排序。 MYOB转储的数据采用以下格式:

  • BSB编号:000-000
  • 银行帐号:123456789
  • 银行帐号名称:商家名称

我在这些单元格的右侧添加了一个if语句,返回1或2或3,我已经确定它是序列。

如果没有保留1,2,3的序列,是否有宏或方法我可以删除整行数据?

示例:

  • BSB编号:000-000 1
  • 银行帐号:123456789 2
  • 银行帐号名称:商家名称3
  • BSB编号:000-000 1
  • 银行帐号:123456789 2
  • 银行帐号名称:商家名称3
  • BSB编号:000-000 1
  • 银行帐号名称:商家名称3
  • BSB编号:000-000 1
  • 银行帐号:123456789 2
  • BSB编号:000-000 1
  • 银行帐号:123456789 2
  • 银行帐号名称:商家名称3

序列必须保持为1然后是2然后3.如果序列中断,则必须删除该行。

这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

快速VBA宏。假设您的数据是C列(= 3) 如果要删除一行,它会将“x”写入D列

Sub sort()
Application.ScreenUpdating = False
For i = Columns(3).Find("*", [C1], , , , xlPrevious).Row To 4 Step -1

  Merge = Cells(i - 0, 3).Value _
        & Cells(i - 1, 3).Value _
        & Cells(i - 2, 3).Value _
        & Cells(i - 3, 3).Value

  If Merge = "4321" Then
    i = i - 3
  Else
    Cells(i, 4) = "x"
  End If

Next i
Application.ScreenUpdating = True
End Sub

不完美,因为前4行未排序。但它是一个开始。
也许其他人可以改善答案。

enter image description here

答案 1 :(得分:0)

我真的很喜欢你的问题并且有点难过 - 为此+1!

我能做到这一点的唯一方法是用一个相当丑陋的公式来列举你的3种可能性。 假设您在B列中有数字,从单元格B1开始,此公式将从单元格B4开始工作(这意味着您必须自己查看前3个结果)。

=IF(OR(AND(B4=1,B5=2,B6=3),AND(B3=1,B4=2,B5=3),AND(B2=1,B3=2,B4=3)),TRUE,FALSE)

然后您可以删除此公式返回FALSE值的行。

我仍然会更多地考虑并试着想出一个更优雅的解决方案,但这绝对可以解决问题。

编辑(基于评论)

要在屏幕截图中显示4,请在B5中启动公式,其内容如下:

=IF(OR(AND(B5=1,B6=2,B7=3, B8=4),AND(B4=1,B5=2,B6=3,B7=4),AND(B3=1,B4=2,B5=3,B6=4),AND(B2=1,B3=2,B4=3,B5=4)),TRUE,FALSE)