如果一个值范围内的单元格包含一个types编号,则打印相应的标题

如果我在Excel中连续给定一个值的范围。 该特定的每个单元格可以具有types编号的内容,或者可以是空白的。 Excel中是否有函数/函数的组合(非VBA)将打印该types数字单元格的相应标题(用逗号)。

此外,如果单元格不包含types编号的内容,则不要打印相应的标题并转到下一个单元格。 如果它是范围中的最后一个值,那么最后也不要打印逗号。 我宁愿它以某种方式在一个单元格中查看单元格范围,然后确定要打印哪个标题以及要忽略哪个标题。

我正在使用Excel 2013

我想这样做没有VBA。 下面是一个例子:

示例Excel结果

有一个简单的方法, 如果第一列总是一个数字,或者如果你可以住在一个以逗号开头的string,如果第一列不是一个数字。

= IF(ISNUMBER(F5); F4&IF(ISNUMBER(G5); “ ”&G4“; ”)IF(ISNUMBER(H5);“, ”&H4;“ ”)&IF(ISNUMBER(I5);“,” &I4; “”)&IF(ISNUMBER(J5); “ ”&J4;“ ”)&IF(ISNUMBER(K5);“, ”&K4“; ”)IF(ISNUMBER(L5);“, ”&L4;“”))

如果它是完全随机的哪一列包含第一个数字的公式,则必须展开公式以包含与此公式中的第一个ISNUMBER语句类似的第二个单元格。 这将被放置在两个右括号之间的最后,如下所示:

…..&IF(ISNUMBER(L5); “ ”&L4;“”); IF(ISNUMBER(G5); G4&IF(ISNUMBER(H5 …….)

使用中间行来保存复制和粘贴值的地狱。

在第6行的中间,把这个公式拖过去:

 =IF(ISNUMBER(B3),B1&",","") 

然后,在一个中间结果单元格B8 ,把这个:

 =CONCATENATE(B6,C6,D6,E6,F6,G6,H6,I6) 

现在,删除最后一个逗号:

 =left(B8,Len(b8)-1) 

请注意,在Excel 2016中,这非常容易: Concat()函数意味着您可以input单元格以连接到一个范围: =concat(B6:AZ6)或其他。

对于什么是值得的,使用VBA来做到这一点非常简单:

 Public Function Concatenate_if(valuesToConcatenate As Range, cellsToCheck As Range) As String Dim i As Long Dim sOutput As String For i = 1 To valuesToConcatenate.Columns.Count If IsNumeric(cellsToCheck(1, i).Value) Then sOutput = sOutput & valuesToConcatenate(1, i) & "," End If Next i Concatenate_if = Left(sOutput, Len(sOutput) - 1) End Function 

所以我最初想出了这个解决scheme,稍微改进了一下。 我只是希望它不那么繁琐,如果我有8列以上的话就更容易些。

= IFERROR(IF(M243 = 0,LEFT(IF(D243> = 1,D $ 1&“,”,“”)&IF(E243> = 1,E $ 1&“,”,“”)&IF(F243> = IF 1,F $ 1 “ ”“ ”)&IF(G243> = 1,G $ 1“, ”“ ”)&IF(H243> = 1,H $ 1“, ”“”)&IF(I243> = 1,I $ 1 “ ”“ ”)&IF(J243> = 1,J $ 1“, ”“ ”)&IF(K243> = 1,K $ 1“, ”“”)&IF(L243如果(M243> = 1,M $ 1,“”),LEN(IF(D243> = 1,D $ 1&“,”,“”)&IF(E243 > = 1,E $ 1 “ ”“ ”)&IF(F243> = 1,F $ 1“, ”“ ”)&IF(G243> = 1,G $ 1“, ”“”)&IF( H243> = 1,H $ 1 “ ”“ ”)&IF(I243> = 1,I $ 1“, ”“ ”)&IF(J243> = 1,J $ 1“, ”“”)&IF (K243> = 1,K $ 1 “ ”“ ”)&IF(L243> = 1,L $ 1“, ”“ ”)&IF(M243> = 1,M $ 1,“”)) – 1) (F243> = 1,F $ 1“,”1“,D $ 1&”,“,”“)和IF(E243> = 1,E $ 1& “”)IF(G243> = 1,G $ 1”, “” “)&IF(H243> = 1,H $ 1”, “” “)&IF(I243> = 1,I $ 1”, “ ”“)IF(J243> = 1,J $ 1”, “” “)&IF(K243> = 1,K $ 1”, “” “)&IF(L243> = 1,L $ 1”如果(E243> = 1,E $ 1&“,”)“,则IF(M243> = 1,M $ 1,”“),LEN(IF(D243> = 1,D $ 1& “” “)&IF(F243> = 1,F $ 1”, “” “)&IF(G243> = 1,G $ 1”, “”“)&IF(H243> = 1,H $ 1& “ ”“, ”)IF(I243> = 1,I $ 1“, ”“ ”)&IF(J243> = 1,J $ 1“, ”“”)&IF(K243> = 1,K $ 1 & “ ”“ ”)IF&(L243> = 1,L 1 $&“, ”“ ”)IF&(M243> = 1,M $ 1,“ ”)))),“”)

它取出输出的长度并在最后取出最后一个逗号。 我将行更改为零,而不是只留下单元格空白。

虽然上面是丑陋的,但这显然不是没有VBA的最好的解决scheme,但它是唯一能够使用Excel函数的解决scheme。