微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我想将来自一个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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?