用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)非常易于安装和使用:
- ALT-F11调出VBE窗口
- ALT-I ALT-M打开一个新的模块
- 粘贴东西,closuresVBE窗口
如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除UDF:
- 如上所示调出VBE窗口
- 清除代码
- 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