如何在Excel中为已过滤的行合并单元格数据?

时间:2019-07-18 17:51:33

标签: excel vba excel-formula

我需要根据相关SKU的颜色来列出它们的列表。列A为SKU,列B为产品名称,列C为颜色。例如:小衫10种颜色,中号10种颜色,大号10种颜色。数据是按大小组织的,例如黑色小号,红色小号,黄色小号等,我需要关联颜色,以便黑色小号将与黑色中号和黑色大号交叉关联。

通常,我会通过调整this page上的公式并运行下面的宏来执行此操作,以便B列中的每个更改都将合并A列中的所有SKU。问题是,在过滤列时这是行不通的C仅选择黑色,白色或蓝色等颜色。如何获得结果?

我通常会按照以下步骤进行操作。

  1. 在D列中输入以下公式:=IF(A2<>A1,B2,C1 & "," & B2)
  2. 在E列中输入以下公式:=IF(AW2<>AW3,AY2)
  3. 向下填充D和E列。复制和过去的D值,并清除所有“ FALSE”单元格
  4. 运行以下宏:
    Sub FillDown()

      Dim r As Range

      For Each r In Range("D:D").SpecialCells(xlCellTypeBlanks).Areas
            r.Value = r.Offset(r.Rows.Count).Resize(1).Value
      Next r

    End Sub

但这仅在不过滤列C时有效。

编辑
https://imgur.com/safxL8C
上图是一个示例图像,显示了我正在使用的一些数据以及所需的结果。最终结果将是在新列中,如果所有SKU的名称相同,则所有SKU都将以逗号分隔。因此,对于“锥形拉杆”,将在第14、17、20、23、27和30行上使用M2100,M2101,M2102,M2103,M1171,M1174。

我对VBA开放,并更改了标签以将其包含在帖子中。显然,我没有代表,因此无法发布图片。

1 个答案:

答案 0 :(得分:1)

这是公式的一种解决方案:

enter image description here

D2中的公式:

=IF(C2=$D$1,TEXTJOIN(",",TRUE,IF(($B$2:$B$12=B2)*($C$2:$C$12=$D$1),$A$2:$A$12,"")),"")

通过 Ctrl Shift Enter

输入

向下拖动。

enter image description here

如您所见,应用过滤器后它仍然可以工作。

enter image description here

这基于数组公式,该公式仅在C列的值等于D1时计算。因为在进行大量计算之前进行此简单检查是数组的好处。

请注意,这是我相信只能在Excel 2016下使用的某些功能。但是,您可以走VBA路线,但随后应查看SpecialCells(xlCellTypeVisible)