如果符合特定条件,则将特定列标题复制到新工作表

我正试图在工作表2中创build一个新的行,该工作表由行1中的值组成。

工作表1有:

  ABCDEF
 1 Bob Sam Ken Allen Henry Ed
 2是否是否是否 

我想要一个公式来创build第2页中的第1行,只有那些第2行=“是”的值。

所以表2看起来像:

ABCDEF 1 Bob Ken Henry 

这将随着工作表1中的数据更新而dynamic更新。

使用这个公式将工作(在工作表2中inputA1,然后向右拖动)

=IF(Sheet1!A$2:$F$2="Yes",Sheet1!A$1:$F$1,"")注意:按Ctrl + Shift + Enter作为数组input

编辑:我注意到,上面的公式会留下一个“否”等价的列之间的空白。 我试图得到一个公式,消除了差距,但仍然允许向右拖。 下面是这样做, 除了我不明白为什么在A1,“鲍勃”没有被返回。 它从“山姆”开始。 (也作为数组input)

 =INDEX(Sheet1!$A1:$F1,SMALL(IF(Sheet1!$A2:$F2="Yes",COLUMN(Sheet1!$A1:$F1)-COLUMN(Sheet1!$A1)+1),COLUMNS(Sheet1!$A1:B1))) 

有任何想法吗? 我怀疑这是使用Small()的事情。 如果将其更改为Large() ,则返回的顺序相反

这是表格:

在这里输入图像说明

以下是使用该数组公式时Sheet2的外观:

在这里输入图像说明 鲍勃怎么样?

(#num只是因为没有更多的匹配,只是抛出一个IfError([array formula], "") ,以消除这一点)。

编辑2: 明白了! 使用此公式,作为数组公式input:

=IFERROR(INDEX(Sheet1!$A1:$F1,SMALL(IF(Sheet1!$A2:$F2="Yes",COLUMN(Sheet1!$A1:$F1)-COLUMN(Sheet1!$A1)+1),COLUMNS(Sheet1!$A1:A1))),"")

(最后的范围应该是$A1:A1 ,而不是$A1:B1

对于VBA,因为它在标签中,所以把它放在数据所在的工作表事件中:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("2:2")) Is Nothing Then Dim ws As Worksheet Dim rng As Range Set ws = Worksheets("Sheet5")'change to what ever sheet your want Dim strArr() As Variant ReDim strArr(0) With Target.Parent For Each rng In .Range(.Cells(1, 1), .Cells(1, 1).End(xlToRight)) If rng.Offset(1) = "Yes" Then strArr(UBound(strArr)) = rng ReDim Preserve strArr(UBound(strArr) + 1) As Variant End If Next rng End With If ubound(strArr) > 0 then ReDim Preserve strArr(UBound(strArr) - 1) As Variant End If ws.Range("A1").Resize(, UBound(strArr) + 1).Value = strArr End If End Sub