Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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_Excel Formula_Lookup - Fatal编程技术网

Excel 查找单元格中以逗号分隔的多个值,并返回以逗号分隔的多个值

Excel 查找单元格中以逗号分隔的多个值,并返回以逗号分隔的多个值,excel,vba,excel-formula,lookup,Excel,Vba,Excel Formula,Lookup,如果有人可以帮忙的话 让我们把这张纸叫做1 我想在这里执行查找,在这里我可以将表2中B列的值引入表1中的B列。返回的多个值也应该用逗号分隔。我尝试过在这里使用textjoin公式,但它出错的地方是,例如,它将A12计算为A1,从而为一个值返回2个值 我可以尝试使用VBA代码,但没有多少积极的结果。您可以使用FILTERXML()将每个逗号的代码拆分为一个值数组,我们可以通过VLOOKUP()进行处理。然后使用TEXTJOIN(),将返回的数组连接回逗号分隔的字符串: E2中的公式: =TE

如果有人可以帮忙的话

让我们把这张纸叫做1

我想在这里执行查找,在这里我可以将表2中B列的值引入表1中的B列。返回的多个值也应该用逗号分隔。我尝试过在这里使用textjoin公式,但它出错的地方是,例如,它将A12计算为A1,从而为一个值返回2个值


我可以尝试使用VBA代码,但没有多少积极的结果。

您可以使用
FILTERXML()
将每个逗号的代码拆分为一个值数组,我们可以通过
VLOOKUP()
进行处理。然后使用
TEXTJOIN()
,将返回的数组连接回逗号分隔的字符串:

E2
中的公式:

=TEXTJOIN(",",,VLOOKUP(FILTERXML("<t><s>"&SUBSTITUTE(D2,",","</s><s>")&"</s></t>","//s"),A$2:B$6,2,0))
=TEXTJOIN(“,”,VLOOKUP(FILTERXML(“&SUBSTITUTE(D2,“,”,”)&“/s”),A$2:B$6,2,0))
其中:

  • “”&SUBSTITUTE(D2,,,“”)和“”
    —创建有效的XML字符串,用开始/结束标记替换逗号
  • “//s”
    -返回所有s节点的有效XPATH

注意:如果您使用的是Excel 2019,则应通过CSE输入。如果您有兴趣更深入地解释为什么这样做,我想让您参考以前的文章。

对于VBA解决方案,如果您的翻译没有经常更改,您可以填充一个字典(通过工具添加一个引用->引用…Microsoft脚本运行时)保存翻译

然后,您可以传入单元格的值,将其拆分,并返回每个部分的对应转换:

Dim dict As Dictionary
函数转换(作为字符串)作为字符串
如果dict什么都不是,那么
Set dict=新字典
Dim arr()作为变量
arr=工作表(“表1”).范围(“A1:B25”).值
将行计数设置为整数
行计数=UBound(arr,1)
将行设置为整数
对于row=1到rowCount
dict(arr(第1行))=arr(第2行)
下一个
如果结束
Dim temp()作为字符串'保存当前输入的键和结果
温度=拆分(“,”)
作为整数的Dim ubnd
ubnd=UBound(温度)
作为整数的Dim i
对于i=0到ubnd
将键变暗为字符串
键=温度(i)
如果dict.存在(键),则
温度(i)=指令(键)
其他的
温度(i)=“
如果结束
下一个
翻译=连接(临时“,”)
端函数
你可以从这样的手机中调用它:

=Translations(A1)
请注意,为了提高效率,字典不会在每次函数调用时重新创建,而是存储在内存中。因此,如果您的翻译发生更改,则需要重置词典。这可以通过多种方式实现:

  • 关闭并重新打开工作簿

  • 在VBA编辑器中,从菜单中单击运行->重置

  • 编写一个清除字典的特殊方法:

    Sub-ClearDict
    Set dict=无
    端接头
    
    并在进行更改后调用它(例如,从即时窗格)


如果您有任何代码要包含,那么这将是减少您的问题被关闭的机会的一个好方法。。。