我需要合并几张工作表并保持数据的完整性。我已经设法将问题简化到下面的例子中,希望能得到一些帮助。这两列必须合并为一列。列中的数据必须保持原来的顺序,因为每个单元格都是引用时间数据的代码。重复项需要减少到一个条目,因为整个数据集稍后将被地理编码,并且不允许重复项。
数据是复杂和混乱的,但本质上,我无法解决的问题可以人为地简化为以下内容:
编辑:黄色公交站点按给定顺序在下列站点代码处停靠。蓝色公交车按给定顺序在下列站点代码处停靠。公共汽车停止的顺序不能改变。输出是一个列表,其中只包含一次所有停止代码,并保留两个列表中的顺序。
我想将其更改为:
颜色编码只是为了让读者在这里更清楚。绿色表示重复项减少到1的位置(这将允许我针对代码vlookup数据,并在同一行中输入来自两个工作表的数据。
代码所在的顺序必须得到维护,所以我认为我只需要将所有数据下移。
所以,这是,(从概念上讲),我在第一阶段试图做的事情。
每一行都保留了数据的顺序,但它分布在足够的行中,以便在一列中有足够的空间容纳这两列。重复项占据行号较大的项的位置。
解决方案的其余部分遵循程序。然后,我可以删除重复的代码,并创建一个包含所有值的新列表,然后删除空格。
所以,如果我能到那里,我应该没问题。
因此,据我所知,我需要匹配两个公式:
=MATCH(A1,$B$1:$B$11,0)
=MATCH(B1,$A$1:$A$11,0)
但我不确定这是否是真正的方向。它给出了出现公共条目的行号,但我不确定如何重新创建必要的位置。也许我需要创建这些虚拟列,然后计算必要的总行数,但是如何在出错之间做到这一点呢?或者,使用动态运行偏移量。但也不确定该怎么做。我发现很难理解它。
在我看来,每个值的行号都等于它上面两列中唯一值的数量。
非常感谢您提出的任何建议/解决方案。我已经试着减少这个问题,并让它尽可能的清晰。如果任何人可以看到解决方案,也可以看到我需要集中学习的地方,也欢迎关于特定培训领域的建议。干杯D
发布于 2019-03-29 07:20:48
我认为使用VBA更容易解决您的问题。假设您在A列和B列(即第1列和第2列)中工作。在您的示例中,您有两列和11行,由于您希望逐行处理数据,因此row是外层循环,column是内层循环:
Sub Indexing()
Dim irow, icol, count As Integer
Dim lookIn, FoundRange As Range
count = 1
For irow = 1 To 11:
For icol = 1 To 2:
Cells(irow, icol).Select
Selection.Copy
Set lookIn = Range("F1:F" & count)
Set FoundRange = lookIn.Find(what:=Cells(irow, icol).Value, lookIn:=xlFormulas, lookat:=xlWhole)
If FoundRange Is Nothing Then
Range("F" & count).Select
ActiveSheet.Paste
count = count + 1
End If
Next icol
Next irow
End Sub
这将产生以下结果,并在F列中输出:
请注意,顺序与您的稍有不同,但它更有意义。在您的结果示例中,68之前有113,尽管第4行中出现的第一个数字是68。还有其他的不同,所以可能我误解了你想要的顺序。
您可以按如下方式调整此代码:
如果您不熟悉宏,并且需要帮助来设置它,请让我知道。
https://stackoverflow.com/questions/55380457
复制相似问题