排除未正确列出的维度/仅保留特定格式的数据

时间:2015-01-09 21:35:34

标签: excel excel-formula excel-2007

我有大约1500个尺寸的项目列表,但尺寸并不都具有相同的格式。我想要保留的尺寸列为L x W x H.如何从我不想要的东西中对这样列出的尺寸进行排序(有些仅列为L x H,直径或只是乱码,等等)谢谢。

2 个答案:

答案 0 :(得分:0)

如果通过乱码表示文本值可能包含< space> x< space> ,那么您会遇到一些实际问题。但是,可以合理地假设L x W x H格式是您想要的,并且包含2次出现的< space> x< space> 的唯一值是有效的,然后是帮助器列将标识有效条目。

在右侧未使用的列中,将此公式放入第二行。

=ISNUMBER(FIND(" x ", $A2, FIND(" x ", $A2) + 3))

根据需要填写。结果应该与下图相似。

True dimensions

使用数据►排序&过滤►过滤以过滤助手列为FALSE。这些条目可以删除,当你关闭过滤器时,你将会留下有效的条目。

答案 1 :(得分:0)

阐述@ jeeped的答案,如果您正在处理来自外部来源的数据,您可能希望放宽规则以允许其他有效的输入格式:

  • 必须有三个数字,都是非负整数。
  • 允许小数点,但小数点后没有数字。
  • 它们可以用“x”或“X”或“*”分隔。
  • 他们可以在数字之前,之后或之间有额外的空格,但不能在数字之间。

这意味着这些值都可以:

    17x12x13
    100 * 50 * 2
    100. X 200. X 300

此类问题非常适合正则表达式。可以使用工具>在代码编辑器中添加RegExp功能。引用,然后检查“Microsoft VBScript正则表达式”。然后尝试这个VBA函数:

    Public Function IsNxNxN(s As String) As Boolean
    With New RegExp
        .Pattern = "^\s*(\d+)\.?\s*[xX*]\s*(\d+)\.?\s*[xX*]\s*(\d+)\.?\s*$"
        With .Execute(s)
            IsNxNxN = (.Count = 1)
        End With 
    End With
    End Function

在jeeped的示例工作表中,您将用以下代码替换B2公式:

    =IsNxNxN(A2)

如果您正在尝试清理数据并对其进行过滤,则可以使用:

    Public Function CleanupNxNxN(s As String) As String
    With New RegExp
        .Pattern = "^\s*(\d+)\.?\s*[xX*]\s*(\d+)\.?\s*[xX*]\s*(\d+)\.?\s*$"
        With .Execute(s)
            If .Count = 1 Then
                With .Item(0)
                    CleanupNxNxN = .SubMatches(0) & " x " & _
                                   .SubMatches(1) & " x " & _
                                   .SubMatches(2)
                End With
            End If
        End With
    End With
    End Function

并将C2的公式设置为:

    =CleanupNxNxN(A2)

任何无效的维度值都会在列B中报告为False,在列C中报告为空。有效维度(例如" 10. x 20X30 ")将重新格式化为"10 x 20 x 30"

如果您希望在维度之前或之后允许额外的“乱码”,则可以从"^"中删除"&".Pattern个锚点字符,然后获取:

    "approx. Size: 10*20*30 feet"     would yield:     True,   "10 x 20 x 30"