我正在使用的代码将列中的数字格式化为字符串,并用逗号分隔数字。工作到一定程度。例如。我的“连接”为逗号分隔字符串的范围有398个可能的单元格(即std::unique_ptr
),例如数据以A2:A400
开头,我得到了一个完美的字符串,但是如果它来自例如A300:A400
,然后最后一个数字后会出现30个逗号(A300:A370
)。示例:
,
A300:A400 = ...-0.12345,0.34232,0.221312,0.231132
因此,该代码拾取了A300:A370 = ...-0.3345,0.014332,0.0021,-0.120031,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
和A370
之间的空白文件,并添加了逗号。我不要在最后一位数字后加逗号,因为范围A400
就是这种情况。请指教。谢谢
A300-A400
答案 0 :(得分:2)
以下公式将为您提供所需的结果,只需在D2单元格中输入即可:
=TEXTJOIN(",",TRUE,A2:A400)
Textjoin的作用类似于连接,但可以使用定界符作为参数,它还使您能够忽略空白单元格,第一个参数是定界符,第二个是忽略空白的标志,第三个是用于范围的标志。
TEXTJOIN仅适用于Office 365订阅者,一种可能的替代方法是按以下方式构建您的UDF,这将允许您使用上面的公式而无需Office 365订阅:
Function TEXTJOIN(delimiter As String, ignore_empty As Boolean, rng As Range) As String
Dim compiled As String
For Each cell In rng
If ignore_empty And IsEmpty(cell.Value) Then
'nothing
Else
compiled = compiled + IIf(compiled = "", "", delimiter) + CStr(cell.Value)
End If
Next
TEXTJOIN = compiled
End Function
作为TEXTJOIN的替代方法,如注释所建议的那样,您可以在将rng.Value = ""
附加到字符串之前添加另一项检查以查看是否Sub Coltocommadelimitstring()
Dim rng As Range
Dim InputRng As Range, OutRng As Range
Set InputRng = ThisWorkbook.Sheets(1).Range("A2:A400")
Set OutRng = ThisWorkbook.Sheets(1).Range("D2")
outStr = ""
For Each rng In InputRng
If outStr = "" Then
outStr = rng.Value
Else
If rng.Value <> "" Then outStr = outStr & "," & rng.Value
End If
Next
OutRng.Value = outStr
End Sub
,如下所示:
SharedService