【发布时间】:2019-04-03 15:38:05
【问题描述】:
我为特定订单号 (C2:C100) 生成了零件号 (A2:A100) 及其数量 (B2:B100) 的列表。我正在编写一个子程序,它将过滤每个唯一零件号的零件号列表,然后创建一个新列表,其中包含每个零件的总数量以及将使用它的每个订单。
我有一个子成功创建唯一零件编号列表 (F8:F100),然后另一个子自动过滤每个唯一零件编号的零件编号主列表 (A2:A100) 并为该特定零件的订单号 (C2:C100)。我试图连接订单号的范围,但我的功能失败了。
Sub WOSorter()
Dim rng As Range
Dim WOrng As Range
Dim i As Long
Dim Limit As Long
Dim seperator As String
seperator = ", "
Limit = Worksheets("Selector").Range("F8:F100").Cells.SpecialCells(xlCellTypeConstants).Count - 1
For i = 0 To Limit
Set rng = Worksheets("Selector").Cells(8 + i, 6)
With Worksheets("Selector").Range("A1")
.AutoFilter Field:=1, Criteria1:=rng
Set WOrng = Worksheets("Selector").Range("C2:C100").Cells.SpecialCells(xlCellTypeVisible)
Worksheets("Selector").Cells(8 + i, 9).Value = ConcatenateRange(WOrng, seperator)
End With
Next
If Worksheets("Selector").AutoFilterMode Then Worksheets("Selector").AutoFilter.ShowAllData
End Sub
-----------------------------------------------------------------------------
Function ConcatenateRange(ByVal WOrng As Range, Optional ByVal seperator As String) As String
Dim newString As String
Dim cellArray As Variant
Dim i As Long, j As Long
cellArray = WOrng.Value
For i = 1 To UBound(cellArray, 1)
For j = 1 To UBound(cellArray, 2)
If Len(cellArray(i, j)) <> 0 Then
newString = newString & (seperator & cellArray(i, j))
End If
Next
Next
If Len(newString) <> 0 Then
newString = Right$(newString, (Len(newString) - Len(seperator)))
End If
ConcatenateRange = newString
End Function
我目前在线上遇到类型不匹配错误:
For i = 1 To UBound(cellArray, 1)
如果原始列表在 colA、B、C 中,并且在 colF 中具有唯一的部件号:
colA colB colC colF
123-4 1 01111 123-4
456-7 2 02222 456-7
123-4 1 03333 789-0
789-0 1 04444
456-7 3 05555
那么结果应该是:
colA colB colC colF colI
123-4 1 01111 123-4 01111, 03333
456-7 2 02222 456-7 02222, 05555
123-4 1 03333 789-0 04444
789-0 1 04444
456-7 3 05555
【问题讨论】:
-
请参阅此处以了解应该更好的其他功能:stackoverflow.com/questions/54582741/…
-
哦,当你有隐藏的行时,错误可能会出现。您不能批量加载范围不连贯的数组。
-
@ScottCraner。感谢你的回复。我的函数库中确实有 TEXTJOIN() 可用,但我不确定它是否可以在这里使用,因为我的 colA 列表是可变的并且可能有数千个唯一值。
-
@ScottCraner 由于数组无法加载不相交的范围,所以我会将不相交的范围复制到另一张纸上。然后将该连续范围加载到数组中。希望这会奏效。
-
你试过我下面的答案了吗?