我有大约1500个尺寸的项目列表,但尺寸并不都具有相同的格式。我想要保留的尺寸列为L x W x H.如何从我不想要的东西中对这样列出的尺寸进行排序(有些仅列为L x H,直径或只是乱码,等等)谢谢。
答案 0 :(得分:0)
如果通过乱码表示文本值可能包含< space> x< space> ,那么您会遇到一些实际问题。但是,可以合理地假设L x W x H格式是您想要的,并且包含2次出现的< space> x< space> 的唯一值是有效的,然后是帮助器列将标识有效条目。
在右侧未使用的列中,将此公式放入第二行。
=ISNUMBER(FIND(" x ", $A2, FIND(" x ", $A2) + 3))
根据需要填写。结果应该与下图相似。
使用数据►排序&过滤►过滤以过滤助手列为FALSE。这些条目可以删除,当你关闭过滤器时,你将会留下有效的条目。
答案 1 :(得分:0)
阐述@ jeeped的答案,如果您正在处理来自外部来源的数据,您可能希望放宽规则以允许其他有效的输入格式:
这意味着这些值都可以:
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"