看过前面一系列文章的朋友,一定会熟悉“重新定义数组维度”的概念 。这是一项非常有用且非常重要的技术,使我们可以接受二维数组并将其转换为一维数组,同时将元素保留在该数组中 。
如果希望进一步操纵某二维数组的元素,则需要使用这种技术 。例如,由于某种原因,在某种情形下,需要将二维数组中的每个元素传递给一个或多个参数进行进一步处理 。但是,由于需要使用的Excel函数不能处理多维数组,因此必须首先将原数组转换为一维数组 。
以示例来说明,如下所示的工作表 。
文章插图
可以构造各种公式,如:
=MID(A1,1,1)
结果显然是“A” 。
下面的公式:
=MID(A1,{1,2},1)
得到一维数组{“A”,”m”},是一个单行向量 。
当然,可以使用公式:
=MID(A1,{1;2},1)
得到一维数组{“A”;”m”},是一个单列向量 。
同样,对于单元格A2、A3、A4,使用公式可以得到:
{“E”,”s”}
{“P”,”e”}
{“C”,”e”}
等等 。
进一步,使用公式:
=MID(A1,{1,2},{1;2;3})
可以得到一个3行2列数组:
{“A”,”m”;”Am”,”ma”;”Ama”,”map”}
公式中两个参数值的数组彼此正交,MID函数的参数start_num({1,2})是一个单行向量,参数num_chars({1;2;3})是一个单列向量 。
当然可以交换这两个参数的向量类型,公式为:
=MID(A1,{1;2},{1,2,3})
得到一个2行3列的数组:
{“A”,”Am”,”Ama”;”m”,”ma”,”map”}
可以看到,只有在传递给MID函数的两个数组正交的情况下,才能成功地获得所需的6个结果 。如果我们使用公式:
=MID(A1,{1,2},{1,2,3})
返回的不是预想的6个元素组成的数组,而是一个由3个元素组成的数组:
{“A”,”ma”,#N/A}
其原因是,当两个数组属于相同的向量类型时,即两个都是单行数组或都是单列数组,Excel将一个数组的元素与另一个数组中相应位置的元素“配对” 。因此,公式:
=MID(A1,{1,2},{1,2,3})
等价于执行下面3个公式的结果:
=MID(A1,1,1)
=MID(A1,2,2)
=MID(A1,,2)
数组中根本没有第三个元素作为MID函数的start_num参数与num_chars参数中的第三个元素配对 。这样,Excel返回#N/A作为结果数组中的第三个元素 。
实际上,Excel为了解决传递两个大小不同的数组的问题,重新定义了两个中较小的一个,使其匹配较大的数组 。这样,结果数组中任何额外的不配对的单元格都将填充为#N/A 。
在某些情况下,我们接受其中的数组被“重新定义维数”,即便使用错误值填充,前提是我们随后可以根据需要对结果数组进行操作 。
继续!我们知道,可以给函数传递多个单元格 。因此,可以构造公式:
=MID(A1:A9,1,1)
返回一个9行1列的一维数组,该数组由A1:A9中每个字符串的第一个字符组成,即:
{“A”;”E”;”P”;”C”;”R”;”B”;”M”;”A”;”A”}
进一步扩展:
=MID(A1:A9,{1,2},1)
返回一个9行2列的二维数组:
{“A”,”m”;”E”,”s”;”P”,”e”;”C”,”e”;”R”,”i”;”B”,”a”;”M”,”a”;”A”,”m”;”A”,”c”}
推荐阅读
- 在Excel条件格式中使用公式来突出显示单元格
- 婚礼中的互动游戏有哪些
- Excel怎么获取满足多个条件的数值之和
- Excel怎么查找单元格数据中有多少个列表中的字符/单词
- excel数据透视表怎么处理公式中的布尔值
- excel数据透视表怎么生成连续的整数
- python中循环嵌套是如何进行的?python中的循环嵌套使用流程
- python中的实参如何传递给形参?python参数传递是怎样进行的?
- python中的函数有什么作用?python函数的意义有什么?
- python如何删除字符串中的指定字符?python删除指定字符的方法有哪些?