当列标题名称的顺序不同时,将一个表插入另一个表

问题描述

我想将来自一个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的某些部分,我尝试使用公式以老式的方式进行操作,然后成功了。

它可能不是很优化,因为填充表格要花一些时间,完成后我很累。但是它完成了。

很抱歉,如果它有点混乱,它会根据另外两个表tabell1tabell2的值填充一个新表。它合并所有具有相同唯一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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...