匹配并移动Excel中的列

时间:2015-03-31 03:45:43

标签: excel excel-vba vba

enter image description here

您好;

我有一张有4列的表格;

A栏和C栏的产品编号

B栏和D栏是产品的详细信息。

我想做的是;如果A列中的数字与C列中的数字匹配,那么我想将B的值(产品详细信息)与E列相关联,但如果数字重复,则在第二行再次与C中的该数字匹配,然后我希望将新值添加到F列。

对我们来说这是一个非常特别的问题。我们正在尝试为新网页创建一个新的SQL数据库,我们必须转换所有这些数据。

我在Excel中使用= vlookup公式尝试了它,但它没有用。我认为这个问题只能通过宏来解决。 (如果我没错......)

PS_请检查图像,甚至很难用我母语解释。

由于

2 个答案:

答案 0 :(得分:1)

如果您的数据行少于2000-3000行,则可以使用一些数组公式来完成。如果你还有更多,那么VBA解决方案将更适合。这些数组公式随着它们所指的范围变大而指数地消耗计算负荷。在某些时候,它根本不值得等待,VBA解决方案会更好。

Array formulas to aggregate and transpose

F2 中的数组公式

=IF(LEN(F1), IFERROR(INDEX(A$1:A$999, MATCH(0, IF(LEN(A$1:A$999), COUNTIF(F$1:F1, A$1:A$999&""), 1), 0)), IFERROR(INDEX(C$1:C$999, MATCH(0, IF(LEN(C$1:C$999), COUNTIF(F$1:F1, C$1:C$999&""), 1), 0)), "")), "")

请注意,此需要 F1中的标题列标签。 无法进入F1。数组公式需要使用 Ctrl + Shift + Enter↵进行最终确定。输入正确后,请填写以从A列和C列中选取所有零件编号的唯一列表。

G2中的数组公式

=IF(LEN($F2), IFERROR(INDEX($B$1:$B$999, MATCH(0, IF($A$1:$A$999=$F2, COUNTIF($F2:F2, $B$1:$B$999&""), 1), 0)), IFERROR(INDEX($D$1:$D$999, MATCH(0, IF($C$1:$C$999=$F2, COUNTIF($F2:F2, $D$1:$D$999&""), 1), 0)), "")), "")

这还需要使用 Ctrl + Shift + Enter↵进行最终确定。输入正确后,向右填充几列,然后向下填充所有公式,以匹配在F列中检索到的条目。

我已经将这些公式留给了999行。如果您的需求超出该范围,您可能需要向上调整。搜索 $ 999 并替换为 $ 1999 可以很快实现这一目标。

这就是它的全部。确保在底部留下几行,以防另一个文件有更多行,右边有几列,原因相同。

答案 1 :(得分:1)

如果订单不重要,只有公式的可能替代方法是将后两列附加到前两列(在副本中),在ColumnC中添加空白Row1:

 =IF(COLUMN()<=COUNTIF($A:$A,$A2)+2,INDIRECT("$B"&(COLUMN()-3+ROW())),"")  

横向和向下复制以适应和在另一列中:

  =A1=A2  

复制到西装。隐藏ColumnB并过滤另一列以选择FALSE。选择Row2结束并选择Paste Special,Values到原始工作表的F1。