Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Arrays 如何在没有VBA的函数中将单个单元格中的字符串用作数组_Arrays_Excel_Excel Formula - Fatal编程技术网

Arrays 如何在没有VBA的函数中将单个单元格中的字符串用作数组

Arrays 如何在没有VBA的函数中将单个单元格中的字符串用作数组,arrays,excel,excel-formula,Arrays,Excel,Excel Formula,如何将单元格中的字符串转换为函数中的文本数组,该函数应使用数组,而不使用VBA,也不将数组添加到文档的任何其他部分?它将是1000多行上的这些阵列之一。字符串格式为^[a-zA-Z0-9.,-]*$,以“,”作为分隔符 这就是我想要实现的功能 我有一个包含以下列的excel表格 A:要比较的ID号,用逗号分隔(如果需要,可以更改分隔符)。至少可以支持大约100个ID。 B:ID(列中行上的每个值都是唯一的,但没有排序,并且无法排序,因为需要根据其他标准进行排序) C:值(列中的几行可以具有相同的

如何将单元格中的字符串转换为函数中的文本数组,该函数应使用数组,而不使用VBA,也不将数组添加到文档的任何其他部分?它将是1000多行上的这些阵列之一。字符串格式为^[a-zA-Z0-9.,-]*$,以“,”作为分隔符

这就是我想要实现的功能 我有一个包含以下列的excel表格
A:要比较的ID号,用逗号分隔(如果需要,可以更改分隔符)。至少可以支持大约100个ID。
B:ID(列中行上的每个值都是唯一的,但没有排序,并且无法排序,因为需要根据其他标准进行排序)
C:值(列中的几行可以具有相同的值)
D:输出行中具有最高值的逗号分隔ID的一个ID

输出的问题部分
到目前为止,我已经创建了一个函数,它根据C列中的值在B列中查找正确的ID,但前提是我在函数中手动输入a列中的字符串作为数组常量。我还没有获得从列A创建数组本身的函数,这是必需的

守则的工作部分 在这段代码中,我手动输入了A列中的值,这是正常工作的

=INDEX({"1.01-1","1.01-3","1.08-1","1.01-1-1A"},MATCH(MAX(INDEX(C$10:C$20,N(IF(1,MATCH({"1.01-1","1.01-3","1.08-1","1.01-1-1A"},B$10:B$20,0))))),INDEX(C$10:C$20,N(IF(1,MATCH({"1.01-1","1.01-3","1.08-1","1.01-1-1A"},B$10:B$20,0)))),0))
请注意,起始行不是第一行,该数组在函数中使用了3次

尝试将字符串转换为文本数组的代码 不起作用,但如果包装在SUMPRODUCT()中,它将为SUMPRODUCT()函数提供一个数组,当然不可用,因为我无法传递数组。此代码的背景可以在问题中找到

第二个代码输出数组的第一项并插入到第一个代码中,不会像在SUMPRODUCT()中包装第二个代码时那样更改此结果

下面是我在Excel中为本例简化的测试设置的图片,与上面描述的内容相同


我真的不确定你的配方是怎么用的。 但是,要将单元格内容转换为逗号分隔的文本数组,用作
INDEX
MATCH
函数的数组参数,可以使用
FILTERXML
函数。您需要对自己进行
XML
XPATH
方面的培训,以了解正在发生的事情,但是有大量的web资源用于此

例如,与

A10:  "1.01-1","1.01-3","1.08-1","1.01-1-1A"
下面的公式将返回
1.08-1
。请注意INDEX函数的row参数的
3

=INDEX(FILTERXML("<t><s>" & SUBSTITUTE(SUBSTITUTE(A10,"""",""), ",", "</s><s>") & "</s></t>", "//s"),3)
=索引(FILTERXML(“&SUBSTITUTE(替换(A10,”,“,”,“,”)&“//s”),3)

编辑您的问题,以显示您试图转换为数组的数据和布局示例。它是像您在
A10
的屏幕截图中显示的那样只是几个逗号分隔的值,还是比这更复杂?@RonRosenfeld添加了字符串格式,并用每行的预期输出(而不是仅第一行)更新了图片。逗号分隔值的数量可以是0-99之间的任何值,并且每行的数量都会不同。嗯,我没有工具可以轻松地将屏幕截图传输到excel程序,所以这不是非常有用。但我的答案为你提供了一种方法,可以将A10的内容转换成字符串数组,你应该能够适应你正在做的任何事情。@RonRosenfeld你的答案解决了它,但描述了目的;它将用于一组更大的数据中,以跟踪不同参数之间的关系。我试图在这篇文章中尽可能地简化这个例子,但要让它变得易懂并不容易。插入FILTERXML函数并使用CTRL+SHIFT+enter以数组函数的形式输入该函数是可行的。然后,生成的函数变成“{=IFERROR(INDEX(FILTERXML)(“&SUBSTITUTE(SUBSTITUTE(A10)”,“,”,“,”)和“//s”)、MATCH(MAX(INDEX)(C$10:C$20,N(IF(1,MATCH(FILTERXML)(“&SUBSTITUTE(SUBSTITUTE)(A10)”,“,”,“,”)和“//s”)、B$10:B$20,0‘‘’))))、INDEX(C$10:C$20,N(IF(1,MATCH(FILTERXML)(“),”和SUBSTITUTE(SUBSTITUTE(A10),“,”,“,”,,“,”,,,“,”//(s),"B$10:B$20,0),"0),""B$20,0),""
=INDEX(FILTERXML("<t><s>" & SUBSTITUTE(SUBSTITUTE(A10,"""",""), ",", "</s><s>") & "</s></t>", "//s"),3)