Excel:用交替值将两列合并为一列

4dbbbstv  于 2023-06-25  发布在  其他
关注(0)|答案(5)|浏览(332)

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

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

nukf8bse1#

您可以按照我的示例在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)

结果:

kqqjbcuj

kqqjbcuj2#

谢谢@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)
bxgwgixi

bxgwgixi3#

将@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,这是更好的情况。
假设您可以在第1行中包含这些值
这会将公式更改为=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中的值从第3行开始,则引用行将为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,在模数语句中,它是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)/3ROWS(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

kkih6yb8

kkih6yb84#

这里我们在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))
olqngx59

olqngx595#

对于任何在2023年或以后访问的人,在现代版本的Excel(Microsoft 365 2022及以上)中,有一个专用功能可以实现这一点:TOCOL()
在任何单元格将一些自由空间低于它,只需输入公式=TOCOL(A1:B3)
这将获取区域中的每个单元格(首先从左到右,然后从上到下),并在单个值列中返回它们。结果将自动展开以填充所需的行数。
其他密切相关的函数包括TOROWWRAPCOLS/WRAPROWSHSTACK/VSTACKTRANSPOSE。更多的范围操作函数包括SEQUENCEMAKEARRAYCHOOSECOLS/CHOOSEROWSTAKE/DROP

相关问题