3

我有一些从 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。如果序列中断,则必须删除该行。

这可能吗?

谢谢!

4

2 回答 2

1

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

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 行没有排序。但它是一个开始。
也许其他人可以改进答案。

在此处输入图像描述

于 2013-01-31T23:02:59.427 回答
0

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

我能想出的唯一方法是用一个相当丑陋的公式来列举你的 3 种可能性。假设您在 B 列中有数字,从 cell 开始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)
于 2013-01-31T22:28:05.220 回答