Excel 2010:合并和连接行

时间:2014-05-19 19:52:58

标签: excel vba merge excel-2010

我需要帮助。

似乎我在这个网站上偶然发现的所有宏都要求我写出我正在连接和合并的所有行。我想知道我是否可以用一段时间或if语句来做这件事。与此同时,

我需要合并一个超过21000个名称的表(其中一半以上是重复的),但每个名称重复的数据都有原始缺失的数据,反之亦然,或者有时在每列下有不同的数据,我需要合并他们。还有34个(最多AF)列。

谢谢, 埃迪

P.S。显然我需要至少10个声望来发布图片,所以如果你想要我正在寻找的截图,请通过我的帐户名给我发消息。

P.S.S。 因此,在与通过评论提供帮助的人协商后,我编写了这个基于java的伪代码。当我开始自己学习VBA时,有人可以帮我翻译成VBA吗?他们也可以验证它在理论上有效吗?我希望在一天结束时完成这项工作,这就是我要求翻译帮助的原因,但我计划在不久的将来能够自己完成这项工作。

//创建用于比较的主键,使用最后一个单元格作为PK以便于线条完成 //创建连接比较键(conKey)以比较单元格并合并 //导入新工作表并创建单元格位置以写入新工作表。

Create PK1 = (cell) AF1
Create PK2 = (cell) AF2
Create conKey1 = (cell) A1
Create conKey2 = (cell) A2
Create newSheet = [a new sheet]
Create writeLine = A1

//Initialize while loop. This list lasts until it reaches the last person's name
While(conKey2 <= maxClient) {

//Initialize the if statement. It finds out whether merge is necessary
    If(PK1.equals(PK2)) {

//Initialize while loop. This lasts until PK1 no longer equals PK2
        while(PK1.equals(PK2)) {

//Initialize if loop. It checks to see if the values are not equal. if so, it concatenates into conKey1
            if(!conKey1.equals(conKey2)) {
                conKey1 = concatenate(conKey1,", ",conKey2)
            }   

//Export cell to writeLine of newSheet. Shift everything to the right. verify writeLine equals conKey1
//Clear the doubled cell for safe keeping and to assist us in closing the while loop.
            exportTo(newSheet.writeLine, conKey1)
            conKey1.shiftsRight
            writeLine.coordinates(equals(conKey1))
            conKey2 = ""
            conKey2.shiftsRight
        }

//After this while loop is finished, delete the blank row. 
//coordinates of PK1 and PK2 should remain the same at this point
        deleteRow(PK2)

//If the merge was not necessary it will skip all of that above and shift each variable down a row.
    } else {
        PK1.nextRow
        PK2.nextRow
        conKey1.nextRow
        conKey2.nextRow
        writeLine.nextRow
    }

1 个答案:

答案 0 :(得分:0)

如果SQL是一个解决方案,并且所有值的MAX值都是可接受的值...那么使用ODBC,定义的表和自引用可能会起作用..

  1. 选择公式然后定义名称
  2. 定义现有数据的范围
  3. 选择要显示组合结果的位置(例如,工作表2(A1)而不是工作表1)
  4. 保存工作簿
  5. 然后从其他来源选择数据。
  6. 选择数据连接向导
  7. 选择ODBC DSN
  8. 选择Excel文件
  9. 查找保存的文件
  10. 现在选择新表(步骤1中定义的表)
  11. 并完成向导。
  12. 转到数据菜单
  13. 属性
  14. 点击连接属性按钮
  15. 选择定义标签。
  16. 修改命令文本以满足需要
  17. 它从表1中获取数据,例如: enter image description here

    如果向导已完成(步骤5-11),然后在步骤16中更新了SQL,您将获得类似enter image description here的内容

    这是我使用的命令文本。因为它的SQL可以改变以适应你的需要max,concat,无论

    Select firstName, MiddleName, LastName, max(attrib1), max(attrib2), max(attrib3), max(attrib4)
    From `yourPath&FileName.xlsx`.`YourDefinedName`
    GROUP BY firstName, MiddleName, LastName