繁体   English   中英

Excel:将两列合并为具有交替值的一列

[英]Excel: Merge two columns into one column with alternating values

如何将两列数据合并为一列,如下所示:

Col1    Col2    Col3
========================
A       1       A
B       2       1
C       3       B
                2
                C
                3

您可以按照我的示例在D列中使用以下公式。 请记住根据您的数据增加$A$1:$B$6范围。

=INDEX($A$1:$B$6,INT((ROWS(D$2:D2)-1)/2)+1,MOD(ROWS(D$2:D2)-1,2)+1)

结果:

在此处输入图片说明

感谢@Koby Douek 的回答。 只是一个补充——如果您使用的是 Open Office Calc,您可以用分号替换逗号。

=INDEX($A$1:$B$6;INT((ROWS(D$2:D2)-1)/2)+1;MOD(ROWS(D$2:D2)-1;2)+1)

将@koby Douek 的回答扩展到更多列并解释一些术语

2 列到 1 交替的原始代码=INDEX($A$1:$B$6,INT((ROWS(D$2:D2)-1)/2)+1,MOD(ROWS(D$2:D2)-1,2)+1)

$A$1:$B$6定义从中获取最终数据集的列和行,$s 仅用于防止公式在复制、粘贴或拖动时更改列和行选择。

扩展以处理您转储到列中的任何值,而不必在每次将其修改为$A:$BA:B时扩展范围,以便您可以轻松地将其复制到其他列集并创建新的合并,但它也会将每一列中的第一个值作为交替值之一,因此如果您有标题,您可以通过使用大数字来做到这一点,例如$A$1:$B$99999A$1:B$99999如果你想越过和移动 ymmv 列,这是更好的情况。

让我们假设你很好,包括第一行中的值

这将公式更改为=INDEX($A:$B,INT((ROWS(D$2:D2)-1)/2)+1,MOD(ROWS(D$2:D2)-1,2)+1)

现在到D$2:D2

这是用于计算公式所在的当前行 ( D2 ) 和参考行 ( D$2 ) 之间差异的行 确保您做的重要事情是将参考行号设置为第一行您将输入值,因此如果您的第一行是排序列中的标题,您将使用第二行作为参考,如果组合列D中的值从第三行开始,则参考行将是D$3

因为我喜欢第一行不是标题行的更一般的形式,所以我将使用D$1:D1但你仍然可以将没有标题的源行混合到一个组合行中,其中的行标题与你喜欢的行数一样多将该参考行号增加到您的值应该开始的第一行。

这将公式更改为=INDEX($A:$B,INT((ROWS(D$1:D1)-1)/2)+1,MOD(ROWS(D$1:D1)-1,2)+1)

现在INT((ROWS(D$1:D1)-1)/2)+1MOD(ROWS(D$1:D1)-1,2)+1

INT返回一个整数值,因此任何小数位都被删除,它的功能本质上类似于向下舍入到最接近的整数

MOD通过返回除法的余数来运行,它的结果将是 0 到 n-1 之间的整数,其中 n 是我们要除以的数字。 (例如:0/3=0;1/3=1;2/3=2;3/3=0;4/3=1……等等)

所以-1)/2)+1-1,2)+1

第一个值再次是当前行和参考行之间的差值。 但是D$1:D1将是行数,即1因此我们必须纠正从 1 开始的行数而不是 0,这会影响我们的计算,因此两者都使用-1来减少行数加 1

/2,2的情况下都是因为我们在第一个语句中除以2它是模数语句中的正常除以 2 /2它是Mod函数的参数所以,2

最后,我们需要使用+1加 1 来纠正索引需要有一个从 1 开始的值系列。

INT((ROWS(D$2:D2)-1)/2)+1正在查找要从中选择值的行号。

MOD(ROWS(D$1:D1)-1,2)+1正在查找要从中选择值的列号

因此,我们可以将/2,2更改为/3,3以使用 3 列执行此操作

这产生: =INDEX($A:$B,INT((ROWS(D$1:D1)-1)/3)+1,MOD(ROWS(D$1:D1)-1,3)+1)

所以也许这是一种令人困惑的看待它的方式,但它更接近我的思维方式。 这是另一种观点:

=INDEX([RANGE],[ROW_#],[COLUMN_#])返回一系列行和列的值

使用示例: =INDEX($A:$B,INT((ROWS(D$1:D1)-1)/3)+1,MOD(ROWS(D$1:D1)-1,3)+1)

[RANGE] = $A:$B这是源列的范围。

[ROW_#] = INT((ROWS(D$1:D1)-1)/3)+1

INT([VALUE_A])+1返回一个整数值,因此任何小数位都将被删除。 然后给它加一个。 我们给值加 1,因为下一步的结果将比我们需要的值小 1。

[Value_A] = (ROWS(D$1:D1)-1)/3 ROWS(D$1:D1)返回Range到结果列当前行的行数,我们用D$1来指定行号结果列中的值开始的地方。 D1是结果列中的当前行,为我们提供了源行的范围,允许我们对行进行计数。 我们必须使用-1从这个值中减去 1 以获得源和电流之间的差异。 然后将其除以/3因为在此示例中我们要查看三列,因此我们仅在结果可被 3 整除时更改行。 INT 删除任何小数位,因此它仅在可被 3 整除时才增加.

[COLUMN_#] = MOD(ROWS(D$1:D1)-1,3)+1

MOD([VALUE],[Divisor])+1返回值除以除数的余数。

使用示例: MOD(ROWS(D$1:D1)-1,3)+1

在这种情况下,我们仍然除以 3,但它是 MOD 函数的参数,我们仍然需要计算行数并在除法之前减去 1,这将返回 0、1 或 2 的列,但如上由于列号以数字 1 开头,因此我们向后移动了 1,因此和之前一样,我们必须加 1

在这里,我们根据将公式添加到奇数行还是偶数行来添加 A 列和 D 列两个不同的公式。

https://1drv.ms/x/s?AncAhUkdErOkguUaToQkVkl5Qw-l_g?e=5d9gVM

奇数开始行

=INDEX($A$2:$D$9;ROUND(ROW(A1)/2;0);IF(MOD(ROW()-ROW($A$2);2)=1;4;1)) 

偶数开始行

=INDEX($A$2:$D$9;ROUND(ROW(A1)/2;0);IF(MOD(ROW()-ROW($A$1);2)=1;4;1))

图片中的 A1 是您第一个数据单元格正上方的单元格。

在此处输入图像描述

如果你想把它放在不同的工作表上,你只需添加工作表名称:

=INDEX(MySheet!$A$2:$D$9;ROUND(ROW(MySheet!A1)/2;0);IF(MOD(ROW()-ROW(MySheet!$A$2);2)=1;4;1))
=INDEX(MySheet!$A$2:$D$9;ROUND(ROW(MySheet!A1)/2;0);IF(MOD(ROW()-ROW(MySheet!$A$1);2)=1;4;1))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM