匹配并移动Excel中的列

匹配并移动Excel中的列,excel,vba,Excel,Vba,嗨 我有一张有4列的纸 A列和C列有产品编号 B列和D列是产品的详细信息 我想做的是;如果a列中的数字与C列中的数字匹配,则我希望将B的值(产品详细信息)带到E列。但如果该数字在第二行重复,并再次与C列中的数字匹配,则我希望将新值带到F列 这对我们来说是一个非常特殊的问题。我们正在尝试为我们的新网页创建一个新的sql数据库,我们必须像这样转换所有数据 我用Excel中的=vlookup公式进行了尝试,但没有成功。我认为这个问题只能用宏来解决。(如果我没有错的话…) 请检查图片,用我的母语甚至很难

我有一张有4列的纸

A列和C列有产品编号

B列和D列是产品的详细信息

我想做的是;如果a列中的数字与C列中的数字匹配,则我希望将B的值(产品详细信息)带到E列。但如果该数字在第二行重复,并再次与C列中的数字匹配,则我希望将新值带到F列

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

我用Excel中的=vlookup公式进行了尝试,但没有成功。我认为这个问题只能用宏来解决。(如果我没有错的话…)

请检查图片,用我的母语甚至很难解释


谢谢

如果您的数据行少于2000-3000行,可以通过一些数组公式来实现。如果您有更多,VBA解决方案将更适合。这些数组公式所引用的范围越大,计算量就越大。从某种意义上说,这根本不值得等待,而VBA解决方案会更好

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列和第C列中添加空白行:

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

抄袭下来以适应。隐藏列B并过滤另一列以选择
FALSE
。选择第2行结束并将特殊值粘贴到原始图纸的F1中

您的最佳解决方案将在很大程度上取决于需要聚合和转换多少行数据。谢谢您的回答!我希望它能正常工作。我有5500行,我花了一点时间,但它没有任何问题。我的公式非常原始。再次感谢你。@Aura-很高兴听到你这么做了。听起来我的排位限制有点保守,但至少在相同的范围内。谢谢你的反馈!
  =A1=A2