Excel TOROW函数将范围或数组转换为行

  • Share This
Michael Brown

一个快速的方法是,借助于以下工具将一系列单元格变成单行 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文件)

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.