从单元格中删除VBA后的逗号和任何内容

时间:2017-07-26 07:28:20

标签: excel vba excel-vba

我有以下代码,用于删除空格后的任何内容。

For i = 2 To lastRow33
    If InStr(ws3.Cells(i, 28), " ") > 0 Then
        y = Replace(ws3.Cells(i, 28), " *", "")
        x = Left(y, InStr(y, " ") - 1)
        ws3.Cells(i, 28) = x
    End If
Next I

我试图修改它以从字符串末尾删除逗号以及后面的任何内容。我只是不断溢出,即使我还没有宣布任何整数只有Longs。

For i = 2 To lastRow33
    If InStr(ws3.Cells(i, 28), " ") > 0 Then
        y = Replace(ws3.Cells(i, 28), ",*", "")
        x = Left(y, InStr(y, " ") - 1)
        ws3.Cells(i, 28) = x
    End If
Next I

知道我可能做错了什么吗?下面的声明

Dim lastRow33 As Long
Dim ws3 As Worksheet
Dim i As Long, j As Long

1 个答案:

答案 0 :(得分:3)

您正在检查单元格中是否存在空格,而不是逗号。相应地更改了您的代码。

For i = 2 To lastRow33
    If InStr(ws3.Cells(i, 28), ",") > 0 Then              `changed space to comma here
        y = Replace(ws3.Cells(i, 28), ",*", "")
        x = Left(y, InStr(y, ",") - 1)                    `changed space to comma here
        ws3.Cells(i, 28) = x
    End If
Next I

编辑:

溢出错误可能源自InStr函数,因为它总是返回一个整数。这个过程取决于单元格文本的长度。

但是你基本上做了两次相同的操作。在Y下,您可以用“”替换逗号和之后的所有内容。

然后在X下你会看到Y的结果为逗号,由于你在Y中的操作,它不再存在,并取出左边的字符。执行相同操作的较短代码将是:

For i = 2 to lastRow33
    If InStr(ws3.Cells(i, 28), ",") > 0 Then
        ws3.Cells(i, 28) = Replace(ws3.Cells(i, 28), ",*", "")
    End if
Next i

如果这仍然导致溢出,则可能是由于InStr结果变大而导致存储在整数中。您可以使用以下命令将其值强制为long:

For i = 2 to lastRow33
    If CLng(InStr(ws3.Cells(i, 28), ",")) > 0 Then
        ws3.Cells(i, 28) = Replace(ws3.Cells(i, 28), ",*", "")
    End if
Next i