根据excel中另一列的匹配合并一列

时间:2016-01-12 18:16:42

标签: excel excel-vba excel-formula vba

在E栏中,我试图将列D合并为下一个单元格E,其中" /"如果列B包含匹配,则在每个新单元格值之间。如果没有匹配,那么只需从D列中获取值。如果你看一下最终目标,它会更好地解释。我试过了(匹配(但这似乎不起作用。谢谢大家!

Explanation ProductID   Qty Location Notes  (END GOAL)
RMA-1234    SKU1         1      A1A1         A1A1
RMA-7444    SKU2         1      A1A2         A1A2
RMA-9837    KSC U        1      A1A6         A1A6/A1A7/A1A8
RMA-5837    KSC U        1      A1A7         A1A6/A1A7/A1A8
RMA-6342    KSC U        1      A1A8         A1A6/A1A7/A1A8

2 个答案:

答案 0 :(得分:0)

当匹配时,可能使用VBA并遍历列b中的所有单元格,直到没有匹配为止,然后将值与斜线连接起来。

实施例

   Dim tempHolder as String
   For Each cell In yourWorkbook.Sheets(1).Range("B1:B6")
       If tempHolder == cell.Value Then
              'write your value and a "/" to the adjacent cell if there is a match to previous
       Else if tempHolder == ""
              'write singular values to adjacent cell
       End If
       tempHolder = cell.Value
   Next cell

这只是一个样本。如果您使用它,您必须为您的应用程序稍微调整一下,并编写在相邻单元格中插入连接值的代码。

答案 1 :(得分:0)

凭借一些独创性,您可以使用内置的Excel公式来实现这一目标。

以下是分解每个步骤的工作表:

enter image description here

  1. 确保您的数据按ProductID
  2. 排序
  3. 创建完整列表公式:=IF(B1=B2,E1&"/"&D2,D2)
  4. 计算实例公式:=COUNTIF($B$2:$B$11,B2)
  5. 查找第一个实例公式:=MATCH(B2,$B$2:$B$11,0)
  6. 使用斜杠公式的完整列表:=OFFSET($B$1,G2+F2-1,3)
  7. 将所有这些公式从第2行拖到数据集的末尾。

    我打破了步骤,这样你就可以更容易地理解了。但是,您也可以将它们全部写在两列中。使用以下公式创建完整列表列和另一列(将示例中的最后四列连接在一起):=OFFSET($B$1,MATCH(B2,$B$2:$B$11,0)+COUNTIF($B$2:$B$11,B2)-1,3)