我有以下代码,用于删除空格后的任何内容。
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
答案 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