用macros连接一个范围,用条件来省略空单元格 – excel vba

我试图将一列中的input单元格的范围连接到单独的工作表中的一个输出单元格。 这是不同的范围不同的细胞重复。 例如范围(A1:5) – >单元格(B1); 范围(A6:10)→细胞(B2); …等等。 输出工作表也需要严格控制,因此我不希望对其进行调整。

我目前在输出单元格中使用了连接公式,但是当要连接的范围内的单元格为空时(函数中的分隔符是“,”),我觉得它是混乱的。 例如,由于空单元格,输出单元有可能变成“,, x,y ,,,, z”等。 因此,我需要将一个条件语句合并到一个macros中以忽略空单元格,并将其余部分与分隔符“,”连接起来。

期望输出的一个例子是:“x,y,z”。 整洁

作为一名vba业余爱好者,四处搜寻,我所能find的就是这样做的function(因此没有初始代码)。 我更喜欢“button”对象,以便用户能够以受控方式最终确定进程。

任何帮助,将不胜感激。

问候,

考虑这个UDF

Public Function concat(rng As Range, sep As String) As String For Each r In rng If concat = "" Then concat = r.Value Else concat = concat & sep & r.Value End If Next ' End Function 

用户定义的函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开一个新的模块
  3. 粘贴东西,closuresVBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. closuresVBE窗口

从Excel中使用UDF:

= CONCAT(A1:Z1, “”)

要了解有关macros的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关UDF的具体信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

macros必须启用这个工作!

排除空格,并使用逗号作为分隔符 ,这将是一个合理的UDF

 Public Function Konkat(rin As Range) As String For Each r In rin v = r.Value If v <> "" Then Konkat = Konkat & "," & v End If Next r Konkat = Right(Konkat, Len(Konkat) - 1) End Function 

编辑#1:

如果所有的input单元格可能是空白的,那么使用这个版本:

 Public Function Konkat(rin As Range) As String For Each r In rin v = r.Value If v <> "" Then Konkat = Konkat & "," & v End If Next If Konkat = "" Then Exit Function Konkat = Right(Konkat, Len(Konkat) - 1) End Function