Excel2011:Vlookup和联合收割机
我很难在70000多行excel文件中组合几个函数来完成我想要的任务。非常感谢任何提示或建议 我有两列(大约70000行)。在第1列中,我有客户的帐号(有重复的),在第2列的旁边,我有我想要提取的数据。我还有第三列(第3列),这是一个帐号列表,但已经去掉了重复的帐号。我试图使用Vlookup查看第三列(lookup_value)中的第一行,然后在(table_数组)中的第1列中搜索该值,并从第2列返回与第1列值相邻的值 问题是,我希望Vlookup对所有70000行执行此函数,这样,它将返回与提供给它的特定帐号匹配的所有数据(lookup_值)。然后,我想使用Combine函数,使用Combine函数将数据字符串放入单个单元格:Excel2011:Vlookup和联合收割机,excel,udf,textjoin,vba,Excel,Udf,Textjoin,Vba,我很难在70000多行excel文件中组合几个函数来完成我想要的任务。非常感谢任何提示或建议 我有两列(大约70000行)。在第1列中,我有客户的帐号(有重复的),在第2列的旁边,我有我想要提取的数据。我还有第三列(第3列),这是一个帐号列表,但已经去掉了重复的帐号。我试图使用Vlookup查看第三列(lookup_value)中的第一行,然后在(table_数组)中的第1列中搜索该值,并从第2列返回与第1列值相邻的值 问题是,我希望Vlookup对所有70000行执行此函数,这样,它将返回与提
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
我认为这将是一个简单的函数或公式,但可能我使用的不是正确的 当使用CSE作为数组公式输入时,该函数可以接受条件
=TEXTJOIN(", ", TRUE, IF(A2:INDEX(A:A,MATCH(1E+99,A:A))=C2, B2:INDEX(B:B,MATCH(1E+99,A:A)), TEXT(,)))
如果您的Excel版本中没有更新的函数,请搜索此网站的标记以查找VBA UDF和工作表公式替代项。我已经使用静态dict作为脚本创建了一对字典
下面是一些标准的公共模块代码,它们将使用二维数组和脚本字典收集所有这些代码
此子过程要求使用工具、参考将Microsoft脚本运行时添加到VBA项目中
=TEXTJOIN(", ", TRUE, IF(A2:INDEX(A:A,MATCH(1E+99,A:A))=C2, B2:INDEX(B:B,MATCH(1E+99,A:A)), TEXT(,)))
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