向文本添加数字时出错

时间:2017-03-21 13:47:27

标签: excel vba excel-vba

我可以使用数字循环,但是使用文本时Do While不会循环。

Dim i As Integer
i = 1

Do While Cells(i, 1).Value <> ""
     Cells(i, 2).Value = Cells(i, 1).Value + 1
     i = i + 1
Loop

我该如何实现?

2 个答案:

答案 0 :(得分:4)

您可以像这样循环,并且在 VBA语法方面没有任何错误。唯一的问题是表达式:

  

Cells(i, 1).Value + 1

Cells(i, 1).Value无法转换为数字时,

将引发运行时错误。这很简单,当Cells(i, 1).Value是像“abcd”这样的字符串时,你有类型不匹配,你不能将该变量转换为数字以便向其添加1

在这种情况下,它不是宏代码的错误,而是数据的错误。

要处理异构数据,您可以检查,如果值是数字,然后再将其作为数字操作,如下所示:

Do While Cells(i, 1).Value <> ""
    If IsNumeric(Cells(i, 1).value) then Cells(i, 2).Value = Cells(i, 1).Value + 1
  ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    i = i + 1
Loop

答案 1 :(得分:3)

@ A.S.H在这里发现了真正的错误,但还有一些需要注意的事项:

  1. 在循环遍历此类列/行时,通常最好使用For Each循环。
  2. 在其上使用Cells会隐式引用ActiveWorksheet。最好明确指出您所指的细胞,例如: ThisWorkbook.Worksheets("Sheet1").Cells
  3. 试试这个:

    Sub Test()
        Dim rng As Range, r As Range
    
        Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1:A100") 'range to loop through
    
        For Each r In rng
            If r.Value <> vbNullString and IsNumeric(r.value) Then
                r.Offset(0, 1).Value = r.Value + 1
            End If
        Next r
    End Sub