VBA在串联功能中识别范围内的最后一个单元

时间:2017-04-03 20:08:45

标签: excel vba excel-vba

我正在编写一个函数,该函数将获取一系列单元格,并将它们的值返回到以逗号分隔的单个单元格中。

因此,三个或四个股票代码的列表将如下所示:

GOOG, TSLA, APPL

这样做的简单方法是:

For Each cell In rng
    Tickers = Tickers & cell.Value & ", "
Next cell

问题当然是最后一个值会有一个不可取的逗号。

所以我认为可能包含一个If语句,它会改变最后一个单元格的输出,如下所示:

For Each cell In rng
    If cell = rng.Count - 1 Then
        Tickers = Tickers & cell.Value & "! "
    Else
        Tickers = Tickers + cell.Value & ", "
    End If
Next cell

但是,我认为这似乎不起作用,因为cellrng可能不是简单的整数,因此count-1没有意义。

那么最好的方法是什么呢?是否有rng的方法允许If语句知道该单元格是否确实是范围中的最后一个?

3 个答案:

答案 0 :(得分:3)

使用分隔符加入一串字符串的最佳方法是使用VBA.Strings.Join函数,该函数需要一维数组和分隔符。因此,您首先需要将输入范围转换为一维数组。

This answer解释了如何从Range中获取一维数组。

因此,假设您的输入范围是连续的,您可以这样做,然后使用VBA.Strings.Join函数来连接结果。

例如,如果您的值在Sheet1!A1:A10中,则此单行将为您提供以逗号分隔的10个值:

VBA.Strings.Join(Application.Transpose(Sheet1.Range("A1:A10").Value),", ")

如果范围不连续,那么您Dim使用源范围中Count个单元格的数组,使用For Each像您一样迭代每个单元格,填充数组,然后您的函数可以返回Join(theValues, ", ")

然后,如果你想附加一个惊叹号,你不需要关心哪个单元格是最后一个 - 你只需要在你的字符串上添加一个惊叹号,然后你就完成了。

答案 1 :(得分:0)

你可以试试这个......

Function CombineCellContent(ByVal Rng As Range) As String
Dim cell As Range
Dim str As String
For Each cell In Rng
    If str = "" Then
        str = cell.Value
    Else
        str = str & ", " & cell.Value
    End If
Next cell
CombineCellContent = str
End Function

然后假设您的数据在A1:A3范围内,您可以使用此功能,如下所示......

=CombineCellContent(A1:A3)

答案 2 :(得分:0)

我知道有两种方法可以做到这一点,首先是:

For Each cell In rng
    times = times + 1
    If times = rng.Count Then
        Tickers = Tickers + cell.Value & "! "
    Else
        Tickers = Tickers + cell.Value & ", "
    End If
Next cell

在这种情况下,每次进行循环时,变量时间增加1,所以当时间等于rng.count时,将选择第一个if。

另一种方式是不使用每个

For cell = 1 to rng.Count
If cell = rng.Count Then
    Tickers = Tickers + Cells(cell,column).Value & "! "
Else
    Tickers = Tickers + Cells(cell,column).Value & ", "
End If
Next cell

其中column变量是数据所在列的编号。