Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel2011:Vlookup和联合收割机_Excel_Udf_Textjoin_Vba - Fatal编程技术网

Excel2011:Vlookup和联合收割机

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行执行此函数,这样,它将返回与提

我很难在70000多行excel文件中组合几个函数来完成我想要的任务。非常感谢任何提示或建议

我有两列(大约70000行)。在第1列中,我有客户的帐号(有重复的),在第2列的旁边,我有我想要提取的数据。我还有第三列(第3列),这是一个帐号列表,但已经去掉了重复的帐号。我试图使用Vlookup查看第三列(lookup_value)中的第一行,然后在(table_数组)中的第1列中搜索该值,并从第2列返回与第1列值相邻的值

问题是,我希望Vlookup对所有70000行执行此函数,这样,它将返回与提供给它的特定帐号匹配的所有数据(lookup_值)。然后,我想使用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
我认为这将是一个简单的函数或公式,但可能我使用的不是正确的

当使用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