我在组合多个函数时遇到了一些困难,无法在70000+行excel文件中执行我想要的操作。任何提示或指示或建议都非常感谢。
我有2列(大约70000行)。在第1列中,我有客户的帐号(有重复项),在第2列旁边我有我要提取的数据。我还有第三栏(第3栏),这是一个帐号列表,但已被删除重复。我试图让Vlookup查看第三列的第一行(lookup_value),然后在(table_array)中的第1列中搜索该值,并返回第2列中与第1列值相邻的值。
问题,我希望Vlookup为所有70000行执行此功能,这样,它返回与(lookup_value)提供给它的特定帐号匹配的所有数据。那么,我想使用Combine函数使用这个Combine函数将数据字符串放入一个单元格中:
Function Combine(WorkRng As Range, Optional Sign As String = ", ") As String
'Update 20130815
Dim Rng As Range
Dim OutStr As String
For Each Rng In WorkRng
If Rng.Text <> ", " Then
OutStr = OutStr & Rng.Text & Sign
End If
Next
Combine = Left(OutStr, Len(OutStr) - 1)
End Function
最后,在第3列旁边,我希望在每个帐号旁边的单个单元格中用逗号分隔数据。以下是我尝试做的一个例子。我有前3列,但我想将其转换为第4列。
Acct # Data Accounts Desired Data formating
1001 80100 1001 80100, 80250, 80255
1001 80250 1005 81000, 81222, 81235, 85213
1001 80255 1099 82250, 82323, 80100, 80150
1005 81000
1005 81222
1005 81235
1005 85213
1099 82250
1099 82323
1099 80100
1099 80105
我认为这将是一个简单的功能或公式,但也许我没有使用正确的功能或公式。
答案 0 :(得分:1)
使用CSE作为数组公式输入时,textjoin函数可以采用条件。
=TEXTJOIN(", ", TRUE, IF(A2:INDEX(A:A,MATCH(1E+99,A:A))=C2, B2:INDEX(B:B,MATCH(1E+99,A:A)), TEXT(,)))
如果您的Excel版本中没有较新的textjoin功能,请在此网站的textjoin标记中搜索VBA UDF和工作表公式。我使用static dict as scripting.dictionary
创建了一对。
这是一些标准的公共模块代码,它们将使用二维数组和脚本字典来收集它们。
此子程序要求您使用工具,参考文献将Microsoft Scripting Runtime添加到VBA项目。
Option Explicit
Sub qwewrety()
Dim delim As String, arr As Variant
Dim d As Long, dict As New Scripting.dictionary
delim = Chr(44) & Chr(32)
With Worksheets("sheet3")
arr = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "B").End(xlUp)).Value2
For d = LBound(arr, 1) To UBound(arr, 1)
If dict.exists(arr(d, 1)) Then
dict.Item(arr(d, 1)) = dict.Item(arr(d, 1)) & delim & arr(d, 2)
Else
dict.Item(arr(d, 1)) = arr(d, 2)
End If
Next d
.Cells(2, "C").Resize(dict.Count) = Application.Transpose(dict.keys)
.Cells(2, "D").Resize(dict.Count) = Application.Transpose(dict.items)
End With
End Sub