我是否正确使用了isnumeric函数?

The*_*Man 3 excel vba excel-vba excel-2010

该程序用于将一列数据从累积转换为非累积.在我的工作表上,我有A1,B1和C1,文本分别为非累积,累积和转换.我在A1下面有数字1到10,然后它们累计在B1下面.C1是我想要将B列转换回非累积的地方.

的则IsNumeric用于使用C等于B.数据的第一行应检测的标题是它上面正在评估的数量的数据的第一行,从而知道没有计算必须执行.对于其余的人来说,它会看到它正在评估的数字之上的数字是一个数字,因此必须进行计算.

我的问题是它无法正常工作.我认为原因是因为IsNumeric()不断回归是假的.我应该使用不同的功能吗?单元格引用在IsNumeric中不起作用吗?

这是程序!

Option Explicit

Dim i As Variant

Sub Conversion()

Sheets("Test Sheet").Select

For i = 1 To 10
    If IsNumeric("B" & i) = False Then
        Range("C" & i + 1) = Range("B" & i + 1)
    Else: Range("C" & i + 1) = Range("B" & i + 1) - Range("B" & i - 1)
    End If
Next

End Sub
Run Code Online (Sandbox Code Playgroud)

bon*_*igo 6

编写代码的方式是合乎逻辑的,只是最初需要的一个小的语法更改.然而,

  • 最好先检查范围是否为空...
  • 然后检查值是否为数字.
  • 如果将Range设置为Range对象并使用,则更好 offset

码:

Option Explicit '-- great that you use explicit declaration :)

Sub Conversion()
  Dim i As Integer '-- integer is good enough
  Dim rngRange as Range

  '-- try not to select anything. And for a cleaner code
  Set rngRange = Sheets("Test Sheet").Range("B1") 

    For i = 1 To 10
      If (rangeRange.Offset(i,0).value) <> "" then '-- check for non-empty
        If IsNumeric(rangeRange.Offset(i,0).value) = False Then
           rangeRange.Offset(i+1,1) = rangeRange.Offset(i+1,0)
        Else
           rangeRange.Offset(i+1,1) = rangeRange.Offset(i+1,0) - rangeRange.Offset(i-1,0)
        End If
      End if
    Next i '-- loop
End Sub
Run Code Online (Sandbox Code Playgroud)

为了使您的代码更具动态性:

  • 另一个建议,你可能只是需要验证Application.WorkSheetFunction.Transpose()的全部B column range内容variant array
  • Transpose使用B列和C列处理数组并返回Range.
  • 通过这样做,您可以省略手动设置循环大小,但使用LowerUpper绑定数组设置它;)