Excel,列出值为

时间:2016-08-27 15:21:47

标签: arrays excel

我正在使用Excel制作发票系统。 我有一个日期和客户列表。 每个日期都需要一项服务,一个数字表示输入的小时数,基本上是一份工作单。 我希望发票显示客户预订的日期列表。 我在Google表格中做到了这一点,并通过它工作:

=arrayformula(concatenate(if(not(ISBLANK(B2:D2)),text(B1:D1,"dd/MM/yyyy")&", ",""))) 

我现在已经花了好几周的时间来尝试做类似的事情,但是空白了。 任何人都知道如何在Excel中执行此操作? 谢谢, 克里斯

2 个答案:

答案 0 :(得分:0)

由于您使用Excel 2016,我相信您可以使用:

=CONCAT(IF(NOT(ISBLANK(B2:D2)),TEXT(B1:D1,"dd/MM/yyyy")&", ",""))

数组公式** 输入。

不幸的是我没有那个版本,因此我无法验证这一点。

我还应该补充一点,TEXTJOIN可能是一个效率最低的选择:

https://support.office.com/en-us/article/TEXTJOIN-function-357b449a-ec91-49d0-80c3-0e8fc845691c

此致

**数组公式的输入方式与'标准'相同。公式。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果您已正确完成,您会注意到Excel在公式周围放置了大括号{}(尽管不要尝试自己手动插入这些括号)。

答案 1 :(得分:0)

2016年之前:

Sub Concat_Vals()

Dim r       As Range
Dim Result  As String

For Each r In Range("A1:D1")
    If Len(r.Offset(1, 0)) > 0 Then
        Result = Result & ", " & r
    End If
Next r

Result = Mid(Result, 3)
Range("A10").Value = Result

End Sub

将连接的结果返回到单元格A10,并在范围A1:D1上运行(根据上面的要求更改)。

或者,作为UDF:

Function Concat_Vals(Rng As Range)

For Each r In Rng
    If Len(r) > 0 Then
        Result = Result & ", " & Cells(1, r.Column)
    End If
Next r

Concat_Vals = Mid(Result, 3)

End Function

此致