如何使用VBA修剪字符串中未使用的逗号

时间:2015-04-21 00:13:47

标签: vba excel-vba excel

我正在为Excel工作表上的命令按钮编写代码,该代码将从输入表中获取数据并将其传输到不同的工作簿模板。

我有6个可能的输入部分(在一个部分中)x1-x6,用户可以放入数据。当我按下命令按钮时,我希望将其复制然后粘贴到另一个工作表上的指定单元格中,来自这6个输入的数据(如果有的话)。

这是我的问题所在:我有副本&找出粘贴的东西和连接部分,但我无法弄清楚如果用户只放入x1和x2并将其余部分留空则如何删除额外的逗号。

基本上我正在尝试从行尾修剪逗号并停在第一个非逗号字符,这有意义吗?我将把代码和示例输出放入帮助

Private Sub CommandButton1_Click()
Dim x1, x2, x3, x4, x5, x6, X As String
Dim HData As Worksheet
Dim Sdata as Workbook

Worksheets("Information").select
x1 = Range("B1").Value
x2 = Range("B2").Value
x3 = Range("B3").Value
x4 = Range("B4").Value
x5 = Range("B5").Value
x6 = Range("B6").Value
X = x1 + ", " & x2 + ", " & x3 + ", " & x4 + ", " & x5 + ", " & x6

'lots of code between here and the next part'

.Offset(1,1) = X

OUTPUT sample1, sample2, , , ,< - 如果在这些单元格的输入部分中没有输入数据(或者如果没有输入任何内容则根本没有逗号),我不希望这些逗号显示...

3 个答案:

答案 0 :(得分:2)

抱歉,我目前所使用的机器上没有安装Excel,因此我的语法可能需要稍微调整一下,因为我无法测试它。你基本上有两个选择。

首先是一些混乱的算法工作。

'Strip leading commas
Do While InStr(X,", ") == 1
    X = RIGHT(X,LEN(X)-2) ' remove the first two characters
Loop
'Remove trailing commas
Do While InStrRev(X,", ") == LEN(X) - 1 ' check the math on this one
    X = LEFT(X,LEN(X)-2)
Loop
'Remove internal extra commas
Do While InStr(X,", , ") > 0
   X = REPLACE(X, ", , ", ", ")
Loop

EDITED:REPLACE函数应该在循环中,因为REPLACE不会在代码上递归运行。之前,“X ,,,, X”只会减少到“X,,X”

更好的解决方案是在没有额外逗号的情况下生成X.

X = ""
For row = 1 to 6
    x = Range("B" & i).Value
    If LEN(X) > 0 Then
        If LEN(X) == 0 Then
           X = x   ' fencepost solution
        Else
           X = X & ", " & x
        End If
    End If
Next i

答案 1 :(得分:2)

试试这个(更新范围内缺少的单元格):

Private Sub CommandButton1_Click()
    Dim X As String, HData As Worksheet, Sdata As Workbook
    Worksheets("Information").Select
    X = Join(Application.Transpose(Range("B1:B6")), " ")
    X = Replace(Trim(X), " ", ",")
    Do Until InStr(1, X, ",,") = 0
        X = Replace(X, ",,", ",")
    Loop
    'lots of code between here and the next part'

    .Offset(1, 1) = X

假设您在该范围内没有空格如果有回复,我们可以解决它。

工作原理: 取范围(数组/值组)并将其直接填充到字符串中,用空格连接每个元素

修剪字符串,即删除前后空格

用逗号替换所有剩余空格

这就是为什么如果您的数据已经有空格,我们将不得不再添加几行,这很简单。

我赞成这种方法,因为不涉及循环。

答案 2 :(得分:1)

循环,如果不为空则添加到字符串并为后续预挂起分配分隔符:

Dim X As String, delimiter As String, cell As Range
For Each cell In Range("B1:B6")
    If (Len(cell.Value) > 0) Then
        X = X & delimiter & cell.Value
        delimiter = ", "
    End If
Next

Debug.Print X
相关问题