(当前排序样本:)
2-1203-4
2-1206-3
2CM-
3-1610-1
3-999
…
AR3021-A-7802
AR3021-A-7802-1
B43570-
B43570-3
我正在制作8000多个记录零件清单。我遇到的挑战是,不同的零件制造商正在使用许多不同的格式作为零件编号。 “部件号”是我希望对整个工作表进行排序的字段。 (此工作表中有大约10列数据。)
我攻击此挑战的方法是计算任何“ - ”左侧的字符数,并计算字段中数字字符的总数。 (对于两个计数计算,我还将以非数字字符开头的“部件号”设置为计数值99,这样那些将在数值之后排序。)从这里,我能够对左边的值进行排序“ - ”使用。两个MIN的MIN。 (我的“部件号”在B栏中,我有一个标题行,这意味着我的第一个“部件号”在单元格B2中。)
这种方法达到了一定程度。我的挑战是我需要随后在“ - ”字符后对值进行排序,如错误的“3-1610-1”后面跟着“3-999”所示
我看到的一个限制是使用数据排序排序只提供三列进行排序。要仅对“ - ”左边的字符进行排序,就要花费这三列。因此,我无法重复在“ - ”字符后计算值的整个过程,然后在运行主要排序后使用数据排序进行排序。
是否已经解决了许多不同格式的字段,例如“部件号”?是否有可应用于此挑战的宏?如果是这样,我将非常感谢你的意见。
此数据会使用新的部件号不断更新,因此此处的目标是能够将这些附加部件号添加到工作表的底部,并使用宏来正确使用附加列表。
为了记录,我与我的方法没有结婚。毕竟,它并没有解决我的挑战!
谢谢你, 达雷尔
答案 0 :(得分:1)
将此程序放在标准代码中:
Public Sub PartNumberSortFormat()
Dim i&, j&, f, vIn, vOut
vIn = [b2:index(b:b,match("*",b:b,-1))]
vOut = vIn
For i = 1 To UBound(vIn)
f = Split(Replace(vIn(i, 1), " ", ""), "-")
For j = 0 To UBound(f)
If IsNumeric(f(j)) Then
f(j) = Format$(f(j), "000000")
Else
f(j) = String$(6 - Len(f(j)), "0") & f(j)
End If
Next
vOut(i, 1) = Join(f, "-")
Next
Columns(1).Insert xlToRight
[a1] = "SORT COLUMN"
[a2].Resize(UBound(vOut)) = vOut
Columns(1).EntireColumn.AutoFit
End Sub
运行此程序后,您会注意到它已在工作表中插入了新的A列,并且您的数据已经向右移动了一列。
此新列A将包含您的部件号的副本,并以这种方式重新格式化以允许正常排序。
现在选择包含此新A列的所有数据,并在A列上对A-Z进行排序。
排序后,您可以删除新列A.
这可以通过将破折号周围的所有字符填充为六个零来实现。
答案 1 :(得分:0)
我的想法:
Excel 2010以后版本允许您使用任意数量的列进行排序。 (不确定2007年)。不知道你有哪个版本!
您可以使用公式SUBSTITUTE删除所有" - "从零件编号中对剩余的编号进行排序,这样可以为您提供更像您想要的订单。
例如
Value = SUBSTITUTE(B2," - ","") 3-15 315 3-888 3888 3-999 3999 3-1610 31610 3-2610 32610 3-1610-1 316101 3-2610-3 326103
这不完全是你所需要的!
将此与其他公式(或VBA函数)结合使用,可以操作零件编号,使其更具分类性。
您可以使用FIND查找第一个" - "的位置。并将之前的数字提取到一列中。
同样使用FIND,MID和LEN,您可以在第二部分之间提取数字" - "。
我怀疑是否最好编写一个VBA函数将零件号转换为"可排序值"。这可能会将部件号拆分为它的组件位(即每个位是" - "之间的文本)
(VBA函数拆分可能对此有用。它会创建一个数组。
如果您知道可以交付的所有部件号的格式,您可以相应地进行编码。
我怀疑你的代码会采用类似数字并将其转换为显示
AB123-456-78 AB12300456007800 AB12-45-7 AB12000450007000 AB12-45 AB12000450000000
即使用零件填充零件号的每个组件
将TEXTUAL值排序为您想要的顺序的关键是理解文本值的排序方式!做一些实验。然后创建零(或" 9")填充数字,根据需要对数字进行排序。
我希望这会有所帮助。
答案 2 :(得分:0)
虽然不是Excel问题的技术答案,但我是一名后勤人员,负责使用非常大的零件号数据集 - 格式各不相同。在我的领域中使用的标准方法是"忽略" (删除)P / N中的特殊字符,并将(干净的)P / N附加到5位CAGE(制造商)代码,以创建一个"唯一的"用于排序,查找等的CAGE +(干净)P / N代码。为该构造创建一列。