用宏连接一个范围,有条件地省略空单元格 - excel vba

时间:2015-02-27 11:18:56

标签: excel vba

我正在尝试将列中的一系列输入单元连接到单独工作表中的一个输出单元。对不同的细胞以不同的范围重复这一过程。例如范围(A1:5) - >细胞(B1);范围(A6:10) - >细胞(B2); ...等等。输出工作表也需要严格控制,因此我不希望对其进行任何调整。

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

所需输出的示例是:“x,y,z”。的

作为一名业余爱好者并且已经四处寻找,我所能找到的就是执行此操作的功能(因此没有初始代码)。我更喜欢“按钮”对象,以便用户可以以受控方式完成该过程。

任何帮助都将不胜感激。

此致

1 个答案:

答案 0 :(得分:4)

考虑这个 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. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从Excel使用UDF:

      = CONCAT(A1:Z1, “”)

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

      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

      必须启用宏才能使其生效!

      要求排除空白并使用逗号作为分隔符,这将是合理的 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:

      如果所有输入单元格可能为空,则使用此版本:

      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