行条件合并?

时间:2014-01-26 17:26:15

标签: excel excel-vba vba

我想要合并两张excel表。一些但不是所有的行在某种程度上可能是相同的,我想100%确定我没有丢失数据。

这就是我的意思:

Sheet 1 contains:

FName, Lname, Street, HasDog, HasCat, HasHorse
Joe, Carlson, 123 Street, 1, 1, 0
Bill, Jones, 345 Street, 1, 0, 0


Sheet 2 contains:

FName, Lname, Street, HasFish, HasBird
Joe, Carlson, 123 Street, 1, 0
Bill, Jones, 345 Street, 0, 1

最后,我想有这个:

Final Sheet Contains:

FName, Lname, Street, HasDog, HasCat, HasHorse, HasFish, HasBird
Joe, Carlson, 123 Street, 1, 1, 0, 1, 0
Bill, Jones, 345 Street, 1, 0, 0, 0, 1

注意:所有参赛作品都应在最终页面上,无论它们是在第1页,第2页还是两者中。

未设置的数据(例如HasFish)将为空或“0”

1 个答案:

答案 0 :(得分:1)

此站点供程序员帮助其他程序员改进。它不是一个免费的编码站点,尽管有时会提供大量的代码,特别是如果回答者发现问题很有趣的话。我不认为在达到你的要求方面有任何挑战,所以我怀疑有人会给你一个完整的宏。

您必须学习Excel VBA。即使有人为你编写宏,也不一定就是你想要的。如果不了解VBA,您将无法进行最终更改。

在互联网上搜索“Excel VBA教程”。有很多可供选择。我认为有些穷人,但其他人非常好。尝试一些并选择一个适合您学习方式的。也许你更喜欢书。访问一个好的图书馆或书店,看看精选的Excel VBA入门。图书馆的优势在于您可以将几个引物带回家并在决定购买之前先试用它们。我喜欢在我的桌子上放一本参考书,这是我的方法。

我认为解决这个问题所需的关键知识领域是:

  • 将数据从工作表复制到数组
  • 将数据从数组复制到工作表
  • 数组处理
  • for循环
  • 的if-else-ENDIF

我认为您向我们展示的示例数据是假的。在实际数据中,是左侧的识别列还是分散的?在实际数据中,两个工作表是否在同一序列中?我会根据需要移动列和排序工作表,以使编程尽可能简单。完成后,您可以重新排列行和列。

下面的宏:

  • 将工作表“Src1”复制到数组中。您必须将“Src1”替换为您的工作表名称。
  • 连接顶行和底行的值。
  • 将连接值输出到立即窗口。

此宏旨在证明从工作表访问数据或操纵该数据并不困难。

将您的问题分成小步骤。编写一个执行步骤1的宏,并证明它已正确执行了该步骤。扩展宏以执行步骤1和2,然后执行步骤1,2和3.依此类推。我已经为你写了第1步宏。尝试扩展该宏。如果你的步骤代码不起作用,请回到这里;我相信有人会帮忙。

Option Explicit
Sub LoadSrc1()

  Dim ColSrc1Crnt As Long
  Dim ColSrc1Last As Long
  Dim RowSrc1Last As Long
  Dim ValuesSrc1 As Variant
  Dim StgBot As String
  Dim StgTop As String

  With Worksheets("Src1")

    RowSrc1Last = .Cells(Rows.Count, "A").End(xlUp).Row
    ColSrc1Last = .Cells(1, Columns.Count).End(xlToLeft).Column

    ValuesSrc1 = .Range(.Cells(1, 1), .Cells(RowSrc1Last, ColSrc1Last)).Value

    StgBot = ""
    StgTop = ""
    For ColSrc1Crnt = 1 To ColSrc1Last
      StgTop = StgTop & ValuesSrc1(1, ColSrc1Crnt) & "  "
      StgBot = StgBot & ValuesSrc1(RowSrc1Last, ColSrc1Crnt) & "  "
    Next

  End With

  Debug.Print StgTop
  Debug.Print StgBot

End Sub