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)
编写代码的方式是合乎逻辑的,只是最初需要的一个小的语法更改.然而,
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 arrayTranspose使用B列和C列处理数组并返回Range.Lower和Upper绑定数组设置它;)