如果所有内容都为空,则用逗号连接多个列,然后显示#value

这个解决scheme几乎解决了我的问题,但仍然有一个小问题

Function MyConcat(ConcatArea As Range) As String For Each x In ConcatArea: xx = IIf(x = "", xx & "", xx & x & "-"): Next MyConcat = Left(xx, Len(xx) - 1) End Function 

如果所有选定的单元格值都为空,则在Excel表格中显示#value的单元格输出。 如果所有的单元格都是空的,我想显示一个破折号。 我怎么解决这个问题?

真的有两个修复你可以适用于你的情况:

第一个解决办法是修改你的UDF来检测它返回之前的错误状态,然后确保你的UDF返回string"-"

 Function MyConcat(ConcatArea As Range) As String For Each x In ConcatArea: xx = IIf(x = "", xx & "", xx & x & "-"): Next If Len(xx) = 0 Then MyConcat = "-" Else MyConcat = Left(xx, Len(xx) - 1) End If End Function 

第二个修补程序通过在错误检查公式中将您的调用包装到UDF中而在工作表单元格内工作。 这是一个例子:

 =IFERROR(myudf(xxxx), "-") 

编辑:添加错误检查您的OP代码。 我也build议把你的单行If语句分成多行。 作为一种惯例,它使您的代码更容易debugging。 通过你的UDF的步骤告诉我,你收到#Value错误,因为你是一个Length参数-1传递给Left函数。