在excel范围中-忽略空单元格

在excel范围中-忽略空单元格,excel,vba,Excel,Vba,我正在使用excel范围连接: 设置rng=范围(“A1:A8”) 如果区域中的一个单元格为空,则会添加一个空格 如何阻止添加此空格?假设这些非空单元格中有常量: Set rng = Range("A1:A8").SpecialCells(2) 不幸的是,非连续范围使我们无法将rng放入数组或在Join操作中使用它。您必须循环范围内的每个单元格 但是,我会使用Application.Trim而不是设置范围。这样,我们可以通过内存(数组)而不是更缓慢的范围对象引用: Sub Test() Di

我正在使用excel范围连接:

设置rng=范围(“A1:A8”)

如果区域中的一个单元格为空,则会添加一个空格


如何阻止添加此空格?

假设这些非空单元格中有常量:

Set rng = Range("A1:A8").SpecialCells(2)
不幸的是,非连续范围使我们无法将
rng
放入数组或在
Join
操作中使用它。您必须循环范围内的每个单元格

但是,我会使用
Application.Trim
而不是设置范围。这样,我们可以通过内存(数组)而不是更缓慢的
范围
对象引用:

Sub Test()

Dim arr As Variant: arr = [TRANSPOSE(A1:A8)]
Debug.Print Application.Trim(Join(arr, " "))

End Sub
或者,如果您不想利用
。请评估

Sub Test()

Dim arr As Variant: arr = Range("A1:A8")
With Application
    Debug.Print .Trim(Join(.Transpose(.Index(arr, 0, 1)), " "))
End With

End Sub
注意-1:我们需要
转置
来返回1D数组,以便能够在
连接中使用


注意-2:如果一个人已经访问了
TEXTJOIN
函数,则不需要所有这些,但您可以在数组形式中使用该函数。

如果您要连接范围,则简单的循环可能会有所帮助:

Dim rng As range, cell As range

For Each cell In range("A1:A8") ' looking through the desired range
    If Not cell = "" Then ' if the cell is not empty we have to add it to range
        If Not rng Is Nothing Then ' if the range already has some cells in it
            Set rng = Union(rng, cell) ' we have to add the cell to an existing range
        Else ' if the range does not yet exists
            Set rng = cell ' create it and add the first cell
        End If
    End If
Next

你能发布你的全部代码吗?这是一种非常迂回的描述
特殊单元格的方法(是的:)但是无论如何,它是有效的,它很简单,人们可以添加任何条件来过滤所需的单元格。