我正在编写一个函数,该函数将获取一系列单元格,并将它们的值返回到以逗号分隔的单个单元格中。
因此,三个或四个股票代码的列表将如下所示:
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
但是,我认为这似乎不起作用,因为cell
和rng
可能不是简单的整数,因此count-1
没有意义。
那么最好的方法是什么呢?是否有rng
的方法允许If
语句知道该单元格是否确实是范围中的最后一个?
答案 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变量是数据所在列的编号。