Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel中为已筛选行提取单元格数据?_Excel_Vba_Excel Formula - Fatal编程技术网

如何在Excel中为已筛选行提取单元格数据?

如何在Excel中为已筛选行提取单元格数据?,excel,vba,excel-formula,Excel,Vba,Excel Formula,我需要按颜色列出相关SKU的列表。A列为SKU,B列为产品名称,C列为颜色。例如:10种颜色的小衬衫、10种颜色的中衬衫和10种颜色的大衬衫。数据是按大小组织的,如黑色小号、红色小号、黄色小号等。我需要关联颜色,使黑色小号与黑色中号和黑色大号交叉关联 我通常会通过调整公式并运行下面的宏来实现这一点,以便B列中的每一个更改都会包含A列中的所有SKU。问题是,当筛选C列时,这不起作用,只选择黑色、白色或蓝色等颜色。我如何实现结果 我通常会按照这些步骤来做 在D列中输入以下公式:=IF(A2A1、B2

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

我通常会通过调整公式并运行下面的宏来实现这一点,以便B列中的每一个更改都会包含A列中的所有SKU。问题是,当筛选C列时,这不起作用,只选择黑色、白色或蓝色等颜色。我如何实现结果

我通常会按照这些步骤来做

  • 在D列中输入以下公式:
    =IF(A2A1、B2、C1&“、”&B2)
  • 在E列中输入以下公式:
    =IF(AW2AW3,AY2)
  • 向下填充D列和E列。复制D的值和过去的值,并清除所有“假”单元格
  • 运行以下宏:
  • 但这仅在不过滤列C时有效

    编辑

    上面是一张示例图像,显示了我正在处理的一些数据和所需的结果。最终结果是,如果新列具有相同的名称,则所有SKU都将由逗号分隔。因此,对于“锥形杆拉力”,第14、17、20、23、27和30行的拉力为M2100、M2101、M2102、M2103、M1171、M1174


    我对VBA持开放态度,并将标签更改为包含在帖子中。显然,我无法发布图像,因为我没有代表。

    因此这里有一个关于公式的解决方案:

    D2
    中的公式:

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

    拖下来

    如您所见,在应用过滤器后,它仍将工作

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


    请注意,我相信只有在某些订阅条件下,Excel 2016才能提供此功能。但是,您可以选择VBA路线,但是接下来您应该查看
    特殊单元格(xlCellTypeVisible)

    是否可以显示样本数据而不是描述它?具有所需的输出。另外,您还没有标记VBA,但是您描述了宏的使用,您是否对VBA和公式答案都持开放态度?谢谢您的建议。“我希望我的编辑能让它更清晰。”gangula提出了一个糟糕的编辑建议,我在意识到之前接受了这个建议。花了整整30分钟来纠正他的错误。我修改了公式中的12,使之与电子表格中的实际行数相匹配,这就奏效了。尽管由于某些原因,第一列在某些单元格中的逗号数量过多。非常感谢。
    =IF(C2=$D$1,TEXTJOIN(",",TRUE,IF(($B$2:$B$12=B2)*($C$2:$C$12=$D$1),$A$2:$A$12,"")),"")