Table of contents
一个快速的方法是,借助于以下工具将一系列单元格变成单行 TOROW 功能。
Microsoft Excel 365引入了几个新的函数来对数组进行各种操作。 有了TOROW,你可以马上进行范围到行的转换。 以下是这个新函数可以完成的任务列表。
Excel TOROW函数
Excel中的TOROW函数是用来将一个数组或单元格区域转换成一行。
该函数总共需要三个参数,其中只有第一个参数是必需的。
TOROW(array, [ignore], [scan_by_column])在哪里?
阵列 (required) - 一个数组或范围,用于转换为单一行。
忽略不计 (可选) - 决定是否忽略空白或/和错误。 可以采取这些值之一。
- 0或省略(默认)--保留所有值
- 1 - 忽略空白处
- 2 - 忽略错误
- 3 - 忽略空白和错误
逐栏扫描 (可选) - 定义了如何扫描阵列。
- FALSE或省略(默认)- 按行水平扫描阵列。
- TRUE - 按列垂直扫描阵列。
提示。
- 要将一个数组转换为一个单列,请利用TOCOL函数。
- 要预先进行行到数组的反向转换,可以使用WRAPCOLS函数将数组包成列,或者使用WRAPROWS函数将数组包成行。
- 要把行变成列,使用TRANSPOSE函数。
TOROW的可用性
TOROW是一个新功能,只在Excel for Microsoft 365(Windows和Mac)和Excel for web中支持。
Excel中的基本TOROW公式
要做一个简单的范围到行的转换,使用TOROW公式的基本形式。 为此,你只需要定义第一个参数( 阵列 ).
例如,要把一个由3列3行组成的二维数组变成单行,公式是:。
=TOROW(A3:C6)
你只需在一个单元格(本例中为A10)中输入公式,它就会自动溢出到所需的单元格中,以容纳所有的结果。 在Excel术语中,由蓝色细边框包围的输出范围称为溢出范围。
这个公式如何运作。
首先,提供的单元格范围被转化为一个二维数组。 请注意以逗号分隔的列和分号分隔的行。
{"Apple","Banana","Cherry";1,2,3;4,5,6;7,8,9}
然后,TOROW函数从左到右读取数组并将其转换为一维水平数组。
{"Apple","Banana","Cherry",1,2,3,4,5,6,7,8,9}
结果进入单元格A10,从那里溢出到右边的邻近单元格。
将范围转换为行,忽略空白和错误
默认情况下,TOROW函数保留源数组中的所有数值,包括空单元格和错误。 在输出中,零值出现在空单元格的位置,这可能会相当混乱。
拟 排除空白 ,设置 忽略不计 参数为1。
=torow(a3:c5, 1)
拟 无视错误 ,设置 忽略不计 参数为2。
=torow(a3:c5, 2)
要跳过这两者。 空白和错误 ,用3表示。 忽略不计 争论。
=torow(a3:c5, 3)
下面的图片显示了所有三种情况下的行动。
横向或纵向读取阵列
在默认情况下,TOROW函数从左到右水平地处理数组。 如果要从上到下按列扫描数值,你可以设置第3个参数( 按栏目扫描 )为TRUE或1。
例如,要按行读取源范围,E3中的公式是。
=TOROW(A3:C5)
要按列扫描范围,E8中的公式是。
=torow(a3:c5,,true)
在这两种情况下,产生的数组大小相同,但数值的排列顺序不同。
将多个范围合并为一行
要把几个不相邻的范围合并成一个行,首先要借助HSTACK或VSTACK分别把它们水平或垂直地堆成一个数组,然后用TOROW函数把合并后的数组转换成一个行。
根据你的业务逻辑,以下公式之一将执行该任务。
水平堆放数组并按行转换
第一个区间在A3:C4,第二个区间在A8:C9,下面的公式将两个区间水平堆叠成一个数组,然后将其转换为一行,从左到右读取数值。 结果在下图的E3中。
=torow(hstack(a3:c4, a8:c9))
水平堆叠数组并按列转换
为了从上到下垂直读取堆叠的数组,你将TOROW的第三个参数设置为TRUE,如下图中的E5所示。
=torow(hstack(a3:c4, a8:c9), ,true)
垂直堆叠数组并按行转换
为了将后面的每个数组追加到前一个数组的底部,并水平地读取合并后的数组,E12中的公式为:。
=torow(vstack(a3:c4, a8:c9))
垂直堆叠数组并按列转换
要把后面的每个数组加到前一个数组的底部,并垂直扫描合并后的数组,公式为:。
=torow(vstack(a3:c4, a8:c9), ,true)
为了更好地理解这个逻辑,请观察所产生的数组中不同的数值顺序。
从一个范围中提取唯一的值到一行中
从Microsoft Excel 2016开始,我们有一个奇妙的函数,名为UNIQUE,它可以很容易地从单列或单行中获得唯一的值。 然而,它不能处理多列数组。 为了克服这一限制,将UNIQUE和TOROW函数一起使用。
例如,要从A2:C7范围内提取所有不同的(不同的)数值,并将结果放在一行中,其公式为:。
=unique(torow(a2:c7), true)
由于TOROW返回的是一个一维水平数组,我们将第2( by_col )参数的UNIQUE为TRUE,以便将各列相互比较。
如果你想让结果按字母顺序排列,请将上述公式包裹在SORT函数中。
=sort(unique(torow(a2:c7), true), , ,true )
与UNIQUE一样, by_col 的参数也被设置为TRUE。
适用于Excel 365的TOROW替代品 - 2010
在没有TOROW函数的Excel版本中,你可以使用几个不同的函数组合,将一个范围转化为一个单行,这些函数在旧版本中也可以使用。 这些解决方案比较复杂,但它们确实有效。
要水平扫描该范围,通用公式为:。
INDEX( 范围 ,商(列(a1)-1, 列( 范围 ))+1, mod(column(a1)-1, columns( 范围 ))+1)要垂直扫描该范围,通用公式为:。
INDEX( 范围 , mod(column(a1)-1, columns( 范围 ))+1,商(列(a1)-1,列( 范围 ))+1)对于我们A3:C5的样本数据集,公式是这样的。
要按行扫描范围。
=index($a$3:$c$5, quotient(column(a1)-1, columns($a$3:$c$5))+1, mod(column(a1)-1, columns($a$3:$c$5)) +1)
这个公式是TOROW函数的一个替代方案,第3个参数设置为FALSE或省略。
=TOROW(A3:C5)
要按列扫描范围。
=index($a$3:$c$5, mod(column(a1)-1, columns($a$3:$c$5))+1, quotient(column(a1)-1, columns($a$3:$c$5)) +1)
这个公式相当于将第3个参数设为 "真 "的TOROW函数。
=torow(a3:c5,,true)
请注意,与动态数组TOROW函数不同,这些传统的公式应该在你希望出现结果的每个单元格中输入。 在我们的例子中,第一个公式(按行)落在E3,并通过M3复制。 第二个公式(按列)落在E8,并通过M8拖动。
为了正确复制公式,我们使用绝对引用来锁定范围($A$3:$C$5)。 一个命名的范围也可以。
如果你把公式复制到超过需要的单元格,#REF!错误将出现在 "额外 "的单元格中。 为了解决这个问题,用IFERROR函数包住你的公式,像这样。
=iferror(index($a$3:$c$5, quotient(column(a1)-1, columns($a$3:$c$5))+1, mod(column(a1)-1, columns($a$3:$c$5))+1), "" )
这些公式是如何工作的
下面是对第一个公式的详细分解,它按行排列数值。
=index($a$3:$c$5, quotient(column(a1)-1, columns($a$3:$c$5))+1, mod(column(a1)-1, columns($a$3:$c$5)) +1)
在公式的核心部分,我们使用INDEX函数,根据一个单元格在范围内的相对位置来获取它的值。
ǞǞǞ 行数 是由这个公式计算出来的。
商数(列(a1)-1, 列($a$3:$c$5))+1
我们的想法是产生一个重复的数字序列,如1,1,1,2,2,3,3,3,...,其中每个数字重复的次数与源范围内的列一样多。 这里是我们如何做到这一点。
QUOTIENT返回除法的整数部分。
对于 分子 ,我们使用COLUMN(A1)-1,返回从输入公式的第一个单元格的0到的序列号。 n (在这个例子中,我们在E2中输入了0,在M3中输入了8,在最后一个输入公式的单元格中输入了(范围内的总数值减去1)。
对于 分母 我们使用COLUMNS($A$3:$C$5))。 这将返回一个等于你的范围内的列数的常数(在我们的例子中是3)。
结果,QUOTIENT函数在前3个单元格(E3:G3)中返回0,我们在此基础上加上1,所以行号为1。
对于接下来的3个单元格(H3:J3),QUOTIENT返回1,+1给出行号2。 以此类推。
为了计算出 列号 ,你用MOD功能建立一个适当的数字序列。
mod(column(a1)-1, columns($a$3:$c$5))+1
由于我们的范围内有3列,所以序列必须看起来像:1,2,3,1,2,3,...。
MOD函数返回除法后的余数。
在E3中,MOD(COLUMN(A1)-1, COLUMNS($A$3:$C$5)) +
成为
MOD(1-1, 3)+1)
并返回1。
在F3,MOD(COLUMN(B1)-1, COLUMNS($A$3:$C$5))+
成为
MOD(2-1, 3)+1)
并返回2。
一旦确定了行和列的编号,INDEX就可以很容易地获取该行和列的交叉点的值。
在E3中,INDEX($A$3:$C$5, 1, 1)返回引用区域的第一行和第一列的值,即从A3单元格。
在F3中,INDEX($A$3:$C$5, 1, 2)返回第1行和第2列的值,即从单元格B3开始。
等等。
第二个公式是按列扫描范围,工作方式类似。 不同的是,我们用MOD来计算行数,用QUOTIENT来计算列数。
TOROW功能不工作
如果TOROW函数的结果是错误的,最有可能是这些原因之一。
#NAME? 错误
对于大多数Excel函数,#NAME? 错误清楚地表明该函数的名称拼错了。 对于TOROW,它也可能意味着该函数在你的Excel中不可用。 如果你的Excel版本不是365,请尝试使用TOROW的替代品。
#NUM错误
#NUM错误表示返回的数组不能放入一行。 最常见的情况是,当你引用整个列和/或行而不是一个较小的范围时,就会发生这种情况。
#SPILL错误
在大多数情况下,#SPILL错误表明你输入公式的那一行没有足够的空白单元格来溢出结果。 如果邻近的单元格在视觉上是空的,请确保其中没有空格或其他非打印字符。 欲了解更多信息,请参阅Excel中的#SPILL错误意味着什么。
这就是在Excel中使用TOROW函数将二维数组或范围转换为单行的方法。 感谢你的阅读,希望下周能在我们的博客上见到你!
供下载的实践工作手册
Excel TOROW函数--公式实例(.xlsx文件)