Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel 基于一个查找值返回所有匹配值_Excel_Vba - Fatal编程技术网

Excel 基于一个查找值返回所有匹配值

Excel 基于一个查找值返回所有匹配值,excel,vba,Excel,Vba,图片显示了我拥有的数据集。colH中的ICTO\U ID重复多次,并且它有多个产品,例如,ICTO-247将Fx和eFX作为产品(colJ)。现在在ColE(产品)中,我需要显示ICTO-247具有FX,eFX作为产品。因此单元格E3应为FX,eFX 现在如果我做一个vlookup,返回的唯一值将是FX,因为这是基于ICTO\u ID的第一个匹配。我需要一种能够同时返回两个值的方法。这可以是代码或公式的形式 任何帮助都将不胜感激 非常感谢文本查找 当我们想要获取字符串值的单元格中出现错误时,不包

图片显示了我拥有的数据集。col
H
中的
ICTO\U ID
重复多次,并且它有多个产品,例如,
ICTO-247
Fx
eFX
作为
产品(col
J
)。现在在Col
E
(产品)中,我需要显示
ICTO-247
具有
FX
eFX
作为
产品。因此单元格
E3
应为
FX
eFX

现在如果我做一个vlookup,返回的唯一值将是
FX
,因为这是基于
ICTO\u ID
的第一个匹配。我需要一种能够同时返回两个值的方法。这可以是代码或公式的形式

任何帮助都将不胜感激

非常感谢

文本查找 当我们想要获取字符串值的单元格中出现错误时,不包括这种情况。其他的都可以

在您的情况下,您应该将函数放入标准模块,并在Excel中使用以下公式(在单元格E2中)(并向下复制):

还有其他功能,例如,列可以位于任何位置(左、右、中间),分隔符可以更改(默认情况下为第4个参数“,”),区分大小写(第5个参数)。玩它

选项显式
函数TLU(SourceValue作为变量,SourceColumn作为范围_
ValueColumnOffset长度,可选分隔符为String=“,”_
可选,不区分大小写,长=1)为字符串
尺寸值列作为“范围”值列
作为变体的Dim VNT源阵列
Dim vntV作为变量值数组
Dim colSource As Long“源列号”
Dim colTC作为长“此单元格列号”
Dim i As Long源和值数组计数器
Dim strS作为字符串的源字符串
将strR设置为字符串“结果字符串”
'计算源列编号。
colSource=SourceColumn.Column
'计算值列并消除一些不可能的情况
'使用错误处理。
关于错误转到过程退出
Set ValueColumn=单元格(SourceColumn.Row,SourceColumn.Column)_
.Offset(,valueColumnCoffset).调整大小(SourceColumn.Rows.Count)
错误转到0
'计算此单元格列数
colTC=Application.ThisCell.Column
'根据SourceColumn Number和
'值列编号。
如果colTC=colSource或colTC=ValueColumn.Column,则退出函数
'将SourceValue写入源字符串,将范围值写入数组。
strS=CStr(SourceValue):vntS=SourceColumn:vntV=ValueColumn
'循环遍历数组并生成结果字符串。
对于i=1至UBound(vntS)
如果StrComp(CStr(vntS(i,1)),strS,不区分大小写)=0,则
如果strR为“”,则
strR=strR、分离器和vntV(i、1)
其他的
strR=vntV(i,1)'第一个值没有分隔符。
如果结束
如果结束
下一个
TLU=strR
程序退出:
端函数
文本查找 当我们想要获取字符串值的单元格中出现错误时,不包括这种情况。其他的都可以

在您的情况下,您应该将函数放入标准模块,并在Excel中使用以下公式(在单元格E2中)(并向下复制):

还有其他功能,例如,列可以位于任何位置(左、右、中间),分隔符可以更改(默认情况下为第4个参数“,”),区分大小写(第5个参数)。玩它

选项显式
函数TLU(SourceValue作为变量,SourceColumn作为范围_
ValueColumnOffset长度,可选分隔符为String=“,”_
可选,不区分大小写,长=1)为字符串
尺寸值列作为“范围”值列
作为变体的Dim VNT源阵列
Dim vntV作为变量值数组
Dim colSource As Long“源列号”
Dim colTC作为长“此单元格列号”
Dim i As Long源和值数组计数器
Dim strS作为字符串的源字符串
将strR设置为字符串“结果字符串”
'计算源列编号。
colSource=SourceColumn.Column
'计算值列并消除一些不可能的情况
'使用错误处理。
关于错误转到过程退出
Set ValueColumn=单元格(SourceColumn.Row,SourceColumn.Column)_
.Offset(,valueColumnCoffset).调整大小(SourceColumn.Rows.Count)
错误转到0
'计算此单元格列数
colTC=Application.ThisCell.Column
'根据SourceColumn Number和
'值列编号。
如果colTC=colSource或colTC=ValueColumn.Column,则退出函数
'将SourceValue写入源字符串,将范围值写入数组。
strS=CStr(SourceValue):vntS=SourceColumn:vntV=ValueColumn
'循环遍历数组并生成结果字符串。
对于i=1至UBound(vntS)
如果StrComp(CStr(vntS(i,1)),strS,不区分大小写)=0,则
如果strR为“”,则
strR=strR、分离器和vntV(i、1)
其他的
strR=vntV(i,1)'第一个值没有分隔符。
如果结束
如果结束
下一个
TLU=strR
程序退出:
端函数

针对Office 365订户的非vba解决方案

=TEXTJOIN(", ",,FILTER($J$2:$J$10,$H$2:$H$10=$C2))

针对Office 365订阅服务器的非vba解决方案

=TEXTJOIN(", ",,FILTER($J$2:$J$10,$H$2:$H$10=$C2))

您可以在VBA函数中使用
字典
对象

Function GetIctoProducts(ictoID As String) As Variant
    Dim cel As Range

    GetIctoProducts = CVErr(xlErrNA)
    With CreateObject("Scripting.dictionary")
        For Each cel In Range("H2", Cells(Rows.Count, "H").End(xlUp))
            .Item(cel.Value) = .Item(cel.Value) & cel.Offset(, 2).Value & ", "
        Next

        If .Exists(ictoID) Then GetIctoProducts = Left(.Item(ictoID), Len(.Item(ictoID)) - 2)
    End With
End Function

您可以在VBA函数中使用
字典
对象

Function GetIctoProducts(ictoID As String) As Variant
    Dim cel As Range

    GetIctoProducts = CVErr(xlErrNA)
    With CreateObject("Scripting.dictionary")
        For Each cel In Range("H2", Cells(Rows.Count, "H").End(xlUp))
            .Item(cel.Value) = .Item(cel.Value) & cel.Offset(, 2).Value & ", "
        Next

        If .Exists(ictoID) Then GetIctoProducts = Left(.Item(ictoID), Len(.Item(ictoID)) - 2)
    End With
End Function

允许使用VBA函数吗?是的,请使用公式:{=TEXTJOIN(“,”,IF(H$2:H$10=$C2,J$2:J$22,”)允许使用VBA函数吗?是的,请使用公式:{=TEXTJOIN(“,”,IF(H$2:H$10=$C2,J$2:J$22,”)}