Excel 删除最后一个数字后的字符

Excel 删除最后一个数字后的字符,excel,vba,formatting,Excel,Vba,Formatting,我使用的代码是将列中的数字格式化为一个字符串,数字之间用逗号分隔。在某种程度上,它工作得很好。例如,我“连接”成逗号分隔字符串的范围有398个可能的单元格(即A2:A400),如果数据从A300:A400开始,我得到一个完美的字符串,但如果它从A300:A370开始,那么在最后一个数字后我得到30个逗号(,)。例如: A300:A400=…-0.12345,0.34232,0.221312,0.231132 A300:A370=…-0.3345,0.014332,0.0021,-0.120031

我使用的代码是将列中的数字格式化为一个字符串,数字之间用逗号分隔。在某种程度上,它工作得很好。例如,我“连接”成逗号分隔字符串的范围有398个可能的单元格(即
A2:A400
),如果数据从
A300:A400
开始,我得到一个完美的字符串,但如果它从
A300:A370
开始,那么在最后一个数字后我得到30个逗号(
)。例如:

A300:A400=…-0.12345,0.34232,0.221312,0.231132

A300:A370=…-0.3345,0.014332,0.0021,-0.120031,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

因此,代码在
A370
A400
之间拾取空白文件并添加逗号。我不希望在最后一个数字后面有任何逗号,因为范围
A300-A400
就是这样。请告知。多谢各位

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
outStr = outStr & "," & rng.Value
End If
Next
OutRng.Value = outStr
End Sub

以下公式将获得您想要的结果,只需在单元格D2中输入即可:

=TEXTJOIN(",",TRUE,A2:A400)
Textjoin的工作原理与concatenate类似,但可以使用分隔符作为参数,还可以忽略空白单元格,第一个参数是分隔符,第二个参数是忽略空白的标志,第三个参数是范围

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
Sub Coltocommadelimitstring()
变暗rng As范围
变暗输入范围,输出范围
Set InputRng=ThisWorkbook.Sheets(1)范围(“A2:A400”)
Set-OutRng=ThisWorkbook.Sheets(1).范围(“D2”)
outsr=“”
对于输入中的每个rng
如果超过,则
超出量=额定值
其他的
如果rng.Value为“”,则outStr=outStr&“,”&rng.Value
如果结束
下一个
输出值=输出值
端接头

在将其添加到字符串之前,请输入另一个if以测试它是否为
rng.Value=“
。或者使用
IsEmpty
进行检查。根据您的excel版本,这可以通过TEXTJOIN()完成。您能否提供一个@ScottCraner示例?谢谢这里有一个UDF,它模仿了TEXTJOIN:完美!谢谢:)