我有一个包含 100 行的工作表(例如)。我创建了一个新工作表以覆盖 400 行。原始工作表如下所示:
name1, value1, name2, value2
a, 1, b, 1
c, 1, d, 1
想要使新工作表看起来像:
name, value, joined
a, 1, ab
b, 1, ab
c, 1, cd
d, 1, cd
我在前两行使用的正式名称是:
=sheet1!A2, =sheet1!B2, =CONCATENATE(sheet1!A2,sheet1!C2)
=sheet1!C2, =sheet1!D2, =CONCATENATE(sheet1!A2,sheet1!C2)
现在我想将这些公式复制到所有其他行,但如果我选择这些公式并拖动,它只会关注最后一行的公式。我也尝试使用 VBA,但调试器毫无用处(说有错误,但没有指出行/实际错误)。
编辑
当我标记所有行并按住 ALT 拖动时,它保留了公式,但它添加+2
到行而不是+1
。越来越接近了。
编辑2
通过在每一行上放置断点来在 VBA 中进行排序,以识别有问题的行。 我所采用的 VBA 示例链接- 做的几乎一样。
答案1
IF, MOD, ROW, OFFSET, ROUNDDOWN
我可以建议您使用函数以及CONCATENATE
一直在使用的无数组公式解决方案。
通过将 Sheet 2 中的每连续两行映射到 Sheet1 中的一行,就可以实现这一点。
Rows 2,3 in Sheet2 -> Row 2 in Sheet1 (i = 0)
Rows 4,5 in Sheet2 -> Row 3 in Sheet1 (i = 1)
...
假设 Sheet1 中的第 5 行(使用 A5)
ROUNDDOWN((row(A5)-row(A$2))/2,0)
等于1
. ( i=1
)
您还需要知道 Sheet1 中的某一行是第一行还是第二行。这意味着如果我们从第 2 行开始计数,则确定某一行是偶数还是奇数。(即第 2 行 -> 1(奇数),第 3 行 -> 2(偶数),...)这可以通过使用MOD
以下方法实现:
mod(row(A5)-row(A$2),2)
1
由于(5-2=3
是奇数),因此返回。
剩下的就是将IF
前两列和CONCATENATE
第三列的公式合并起来,以OFFSET
得到 Sheet 1 中的内容。表格下方显示了三列的公式。您给出的值将更改为1,2,3,4
(行主编号顺序),以检查是否捕获了正确的单元格。