如何将两列数据合并为一列,如下所示:
Col1 Col2 Col3 ======================== A 1 A B 2 1 C 3 B 2 C 3
nukf8bse1#
您可以按照我的示例在D列中使用以下公式。请记住,根据您的数据增加$A$1:$B$6范围。
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)
结果:
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)
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:$B或A:B,以便您可以轻松地将其复制到其他列集并创建新的合并,但它也会给予每列中的第一个值作为交替值之一,因此如果您有标题,则可以使用大的数字,所以$A$1:$B$99999或A$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)+1和MOD(ROWS(D$1:D1)-1,2)+1INT返回一个整数值,因此任何小数位都将被删除,它的功能基本上类似于向下舍入到最接近的整数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)+1INT([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)+1MOD([VALUE],[Divisor])+1返回值除以除数后的余数。使用示例:MOD(ROWS(D$1:D1)-1,3)+1在这种情况下,我们仍然除以3,但它是MOD函数的一个参数,我们仍然需要计算行数并在除以它之前减去1,这将为列返回0,1或2,但如上所述,我们向后移动1,因为列号以数字1开始,所以像之前一样,我们必须加上1
$A:$B
A:B
$A$1:$B$99999
A$1:B$99999
=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$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)+1
MOD(ROWS(D$1:D1)-1,2)+1
INT
MOD
-1)/2)+1
-1,2)+1
1
-1
/2
,2
2
Mod
+1
INT((ROWS(D$2:D2)-1)/2)+1
/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_#])
[RANGE]
[ROW_#]
INT((ROWS(D$1:D1)-1)/3)+1
INT([VALUE_A])+1
[Value_A]
(ROWS(D$1:D1)-1)/3
ROWS(D$1:D1)
D$1
D1
[COLUMN_#]
MOD(ROWS(D$1:D1)-1,3)+1
MOD([VALUE],[Divisor])+1
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))
olqngx595#
对于任何在2023年或以后访问的人,在现代版本的Excel(Microsoft 365 2022及以上)中,有一个专用功能可以实现这一点:TOCOL()。在任何单元格将一些自由空间低于它,只需输入公式=TOCOL(A1:B3)。这将获取区域中的每个单元格(首先从左到右,然后从上到下),并在单个值列中返回它们。结果将自动展开以填充所需的行数。其他密切相关的函数包括TOROW、WRAPCOLS/WRAPROWS、HSTACK/VSTACK和TRANSPOSE。更多的范围操作函数包括SEQUENCE、MAKEARRAY、CHOOSECOLS/CHOOSEROWS和TAKE/DROP。
TOCOL()
=TOCOL(A1:B3)
TOROW
WRAPCOLS
WRAPROWS
HSTACK
VSTACK
TRANSPOSE
SEQUENCE
MAKEARRAY
CHOOSECOLS
CHOOSEROWS
TAKE
DROP
5条答案
按热度按时间nukf8bse1#
您可以按照我的示例在
D
列中使用以下公式。请记住,根据您的数据增加$A$1:$B$6
范围。结果:
kqqjbcuj2#
谢谢@Koby Douek的回答。只是一个补充--如果您使用的是Open Office Calc,您可以将逗号替换为分号。
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:$B
或A:B
,以便您可以轻松地将其复制到其他列集并创建新的合并,但它也会给予每列中的第一个值作为交替值之一,因此如果您有标题,则可以使用大的数字,所以$A$1:$B$99999
或A$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)+1
和MOD(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)/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
kkih6yb84#
这里我们在A列和D列添加两个不同的公式,这取决于你是把公式添加到奇数行还是偶数行。
https://1drv.ms/x/s!AncAhUkdErOkguUaToQkVkl5Qw-l_g?e=5d9gVM
奇数起始行
偶数开始行
图中的A1是第一个数据单元格正上方的单元格。
如果你想把它放在一个不同的工作表,你只需要添加工作表名称:
olqngx595#
对于任何在2023年或以后访问的人,在现代版本的Excel(Microsoft 365 2022及以上)中,有一个专用功能可以实现这一点:
TOCOL()
。在任何单元格将一些自由空间低于它,只需输入公式
=TOCOL(A1:B3)
。这将获取区域中的每个单元格(首先从左到右,然后从上到下),并在单个值列中返回它们。结果将自动展开以填充所需的行数。
其他密切相关的函数包括
TOROW
、WRAPCOLS
/WRAPROWS
、HSTACK
/VSTACK
和TRANSPOSE
。更多的范围操作函数包括SEQUENCE
、MAKEARRAY
、CHOOSECOLS
/CHOOSEROWS
和TAKE
/DROP
。