如何解决当列标题名称的顺序不同时,将一个表插入另一个表
我想将来自一个表copy_tbl
的所有数据插入到另一个表paste_tbl
的末尾,这两个表都在不同的工作表中,但是在同一工作簿中。
在两个表中具有相同标题名称的列将不会具有相同的顺序,因此我需要重新排列插入的数据列的顺序以匹配目标。
copy_tbl
可能具有paste_tbl
中不存在的列标题名称,我希望将这些列添加到paste_tbl
中(这是可选的,而没有如果很麻烦,可以忽略目标表中的匹配项。
我一直在尝试阅读ListObjects,还试图在插入数据之前编写某种与列标题名称匹配的循环,但是我被困住了。
这似乎是一个相当简单的任务,并且我确定至少要在google的帮助下才能解决,但是我已经坐在这里6个小时了,我什么都没走。
我确实使用Power Query找到了解决方案,但我在Mac上,并且尚未在Mac版Excel中实现:|
有人愿意帮助我解决这个问题吗?
谢谢!
编辑:
我放弃了尝试使用ListObjects的尝试,而尝试了其他方法。 到目前为止,这是我想出的代码:
Dim r As Range,c As Range,msg As String
Application.ScreenUpdating = False
With Sheets("copy_sht").Range("1:1").CurrentRegion
For Each r In Sheets("paste_sht").Range("1:1")
Set c = .Rows(1).Find(r.Value,xlWhole,0)
If Not c Is nothing Then
.Columns(c.Column).copy
r.PasteSpecial xlPasteValues
Else
msg = msg & vbLf & r.Value
End If
Next
Application.CutcopyMode = False
Application.ScreenUpdating = True
End With
End Sub
这会将一些值替换为正确的单元格,并且还将第二个表中的数据覆盖整个第一列。
这就是我要发生的事情:
╔════════════╦═══════╦═══════╦═══════╦═══════╗
║ Number ║ info1 ║ info2 ║ info3 ║ info4 ║
╠════════════╬═══════╬═══════╬═══════╬═══════╣
║ 1 ║ abc ║ ║ xyz ║ 456 ║
║ 2 ║ ║ 123 ║ ║ ║
║ 3 ║ ║ ║ 456 ║ ║
║ 4 ║ ║ ║ ║ ║
║ 5 ║ abc ║ asd ║ zxc ║ ║
╚════════════╩═══════╩═══════╩═══════╩═══════╝
╔════════════╦═══════╦═══════╦═══════╦═══════╗
║ Number ║ info1 ║ info3 ║ info4 ║ info5 ║
╠════════════╬═══════╬═══════╬═══════╬═══════╣
║ 1 ║ def ║ www ║ 123 ║ a ║
║ 3 ║ ║ ║ ║ b ║
║ 5 ║ ║ ║ ║ c ║
║ 6 ║ ║ ║ ║ d ║
║ 7 ║ 123 ║ ║ ║ e ║
╚════════════╩═══════╩═══════╩═══════╩═══════╝
╔════════════╦════════╦═══════╦════════╦════════╦═══════╗
║ Number ║ info1 ║ info2 ║ info3 ║ info4 ║ info5 ║
╠════════════╬════════╬═══════╬════════╬════════╬═══════╣
║ 1 ║ abcdef ║ ║ xyzwww ║ 456123 ║ a ║
║ 2 ║ ║ 123 ║ ║ ║ ║
║ 3 ║ ║ ║ 456 ║ ║ b ║
║ 4 ║ ║ ║ ║ ║ ║
║ 5 ║ abc ║ asd ║ zxc ║ ║ c ║
║ 6 ║ ║ ║ ║ ║ d ║
║ 7 ║ 123 ║ ║ ║ ║ e ║
╚════════════╩════════╩═══════╩════════╩════════╩═══════╝
从第二个表paste_tbl
添加数据后,第一个表copy_tbl
将成为第三个表。
╔═════════╦═══════╦═══════╦═══════╦═══════╗
║ Number ║ info1 ║ info2 ║ info3 ║ info4 ║
╠═════════╬═══════╬═══════╬═══════╬═══════╣
║ 1 ║ def ║ ║ www ║ 123 ║
║ 3 ║ ║ 123 ║ ║ ║
║ 5 ║ ║ ║ ║ ║
║ 6 ║ ║ ║ ║ ║
║ 7 ║ 123 ║ asd ║ ║ ║
╚═════════╩═══════╩═══════╩═══════╩═══════╝
所以我仍然缺少的是:
- 将丢失的列从
copy_tbl
添加到paste_tbl
。 - 确保从
copy_tbl
粘贴的数据与位于paste_tbl
第一列的相同唯一ID匹配,如果该唯一ID不存在,则粘贴整个行在表格底部。 - 如果目标单元格中已经存在数据,我想将其与
copy_tbl
中的数据连接起来。
编辑2: 实现了我从未了解的VBA的某些部分,我尝试使用公式以老式的方式进行操作,然后成功了。
它可能不是很优化,因为填充表格要花一些时间,完成后我很累。但是它完成了。
很抱歉,如果它有点混乱,它会根据另外两个表tabell1
和tabell2
的值填充一个新表。它合并所有具有相同唯一ID $A2
的现有单元格数据,该ID必须位于所有表的第一列中。
您必须收集所有唯一的ID,并将它们没有重复的放置在要填充的表中。然后只需将以下公式粘贴到表的每一列的第一行即可。
=IFERROR(
IF(
IF(
COUNTIF(tabell1;$A2)=1;
VLOOKUP($A2;tabell1;MATCH(B$1;tabell1[#Headers];0);FALSE);""
)
=
IF(
COUNTIF(tabell2;$A2)=1;
VLOOKUP($A2;tabell2;MATCH(B$1;tabell2[#Headers];0);FALSE);""
);
IF(
AND(COUNTIF(tabell1;$A2)=1;COUNTIF(tabell2;$A2)=1);
IFERROR(
VLOOKUP($A2;tabell1;MATCH(B$1;tabell1[#Headers];0);FALSE);
VLOOKUP($A2;tabell2;MATCH(B$1;tabell2[#Headers];0);FALSE));
CONCATENATE(VLOOKUP($A2;tabell1;MATCH(B$1;tabell1[#Headers];0);FALSE);" ";VLOOKUP($A2;tabell2;MATCH(B$1;tabell2[#Headers];0);FALSE)));
IF(
COUNTIF(tabell2;$A2)=1;
VLOOKUP($A2;tabell2;MATCH(B$1;tabell2[#Headers];0);FALSE);VLOOKUP($A2;tabell1;MATCH(B$1;tabell1[#Headers];0);FALSE)
));" ")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。