A
我有一个如和列所示的列表B
,并且我想要合并如所示D
:
我怎样才能做到这一点?
这里,字母 (a、b、c、d、e、f、g、h) 仅用作占位符。我真正需要的column D
是 A1、B1、A2、B2、A3、B3、A4、B4。
答案1
一个不太简单且易于维护的基于公式的解决方案是在 D 中使用以下公式:
=INDEX($A$1:$B$5,QUOTIENT(ROW()+1,2),IF(MOD(ROW(),2)=0,2,1))
让我添加格式并分部分解释:
=INDEX(
$A$1:$B$5,
QUOTIENT(ROW()+1,2),
IF(MOD(ROW(),2)=0,2,1)
)
因此,INDEX
将按坐标返回一定范围内的单元格。参数为:
$A$1:$B$5
- 范围,包含所需的两列。QUOTIENT(ROW()+1,2)
- 将当前行号除以 2 的整数倍。这样得到的行号范围是 (1)。IF(MOD(ROW(),2)=0,2,1)
- (2) 中的整数除法的余数。这给出了 (1) 范围内的列号。
该解决方案并不是真正灵活,需要稍加改进才能支持:
- 超过两列
- 不相邻的列
- 结果在特定范围内(例如从 D5 开始)
答案2
如果您不介意使用宏,这里有一个想法。
Sub MergeColumnsAlternating()
Dim total, i, rowNum as Integer
total = 4 '' whatever number of rows you need to merge.
i = 1
For rowNum = 1 to total
Range("D" & i) = Range("A" & rowNum)
i = i + 1
Range("D" & i) = Range("B" & rowNum)
i = i + 1
Next rowNum
End Sub
我对 VBA 非常生疏(我几乎不记得它了),我已经很多年没有用过 Office 了,但无论如何我都想做出贡献。
答案3
构建于default locale 的优秀答案,(并且响应 AHC 的要求)您可以通过定义一些变量和调整公式来增加灵活性。
让我们从默认语言环境的结果开始。
不幸的是,如果您有超过 2 列,或者您的输出不是从与您的范围相同的行开始,那么这里使用的公式将会中断。
让我们定义一些变量来指定您希望输出开始的行以及范围内的列数。
上面显示的灰色框列出了我们的变量。对于单元格 G1、G2 和 G3,依次单击每个单元格,然后单击以黄色突出显示的框来命名范围。输入相关范围名称:StartRow
和。NumOfCols
RangeIncHeaders
现在,您可以用使用变量的新公式替换原始公式:
=INDEX( $A$1:$B$4, ROUNDUP((ROW()-StartRow+1)/NumOfCols,0)+IF(RangeIncHeaders="Yes",1,0), MOD(ROW()-StartRow,NumOfCols)+1 )
现在让我们插入第三列。将公式中引用的范围更改为,以$A$1:$C$4
了解有 3 列的事实。NumOfCols
也设置为 3。
举个例子,我们将输出向下移动,使其从第 5 行而不是第 1 行开始。设置StartRow
为 5。
最后,您可能希望能够打开或关闭行标题。如果是这样,只需设置RangeIncHeaders
为Yes
。
答案4
A1 = a
B1 = b
我的理解是,在 D1 中,您需要一个输出为“ ab ”,即 A1,B1。然后您需要一个公式=A1&B1
。