Vba 如何在不使用for each的情况下遍历单元格?
我希望能够通过循环设置单元格函数的索引,这样我就可以使用如下控制函数比较单元格:Vba 如何在不使用for each的情况下遍历单元格?,vba,excel,Vba,Excel,我希望能够通过循环设置单元格函数的索引,这样我就可以使用如下控制函数比较单元格: Sub cellsTest() Dim i As Long Dim price As Long For i = 1 To 100 price = Cells(i, 6).Value MsgBox (price) Next i End Sub 但这并不奏效。这似乎能够将长类型变量设置为数值单元格值将是VBA的基本操作。我不想强迫它成为一个for-each格式。有什么办法可以让这一切顺利吗
Sub cellsTest()
Dim i As Long
Dim price As Long
For i = 1 To 100
price = Cells(i, 6).Value
MsgBox (price)
Next i
End Sub
但这并不奏效。这似乎能够将长类型变量设置为数值单元格值将是VBA的基本操作。我不想强迫它成为一个for-each格式。有什么办法可以让这一切顺利吗 您已声明
price As Long
,这意味着在为price变量赋值时,如果赋值不是数字,代码将抛出错误13类型不匹配。i、 e.如果F列包含文本字符串或错误值,它将抛出错误13
在这种情况下,您应该检查所分配的值是否是如下所示的数字
Sub cellsTest()
Dim i As Long
Dim price As Long
For i = 1 To 100
If IsNumeric(Cells(i, 6)) Then
price = Cells(i, 6).Value
MsgBox (price)
End If
Next i
End Sub
您已声明
price As Long
,这意味着在为price变量赋值时,如果赋值不是数字,代码将抛出错误13类型不匹配。i、 e.如果F列包含文本字符串或错误值,它将抛出错误13
在这种情况下,您应该检查所分配的值是否是如下所示的数字
Sub cellsTest()
Dim i As Long
Dim price As Long
For i = 1 To 100
If IsNumeric(Cells(i, 6)) Then
price = Cells(i, 6).Value
MsgBox (price)
End If
Next i
End Sub
试试这个
Sub cellsTest()
Dim i As Long
Dim price As Variant
For i = 1 To 3
If Not IsError(Cells(i, 6).value) Then
price = Cells(i, 6).value
MsgBox price
End If
Next i
End Sub
如果存在对不存在的单元格的引用(即单元格包含\REF!
)或检测到其他错误,则将跳过该单元格并转到下一个单元格
另外,我将类型Long
更改为类型Variant
,因为这将接受任何类型的输入,而不仅仅是一个数字。试试这个
Sub cellsTest()
Dim i As Long
Dim price As Variant
For i = 1 To 3
If Not IsError(Cells(i, 6).value) Then
price = Cells(i, 6).value
MsgBox price
End If
Next i
End Sub
如果存在对不存在的单元格的引用(即单元格包含\REF!
)或检测到其他错误,则将跳过该单元格并转到下一个单元格
此外,我将类型
Long
更改为类型Variant
,因为这将需要任何类型的输入,而不仅仅是一个数字。对我有效,什么对你无效?由于某种原因,它在我的安装中不起作用。我将不得不进一步调查此事。我得到了错误13,输入mis-match。你得到了什么错误?在那个点上I的值是多少,那个单元格里有什么?听起来好像您正在尝试将文本转换为long。您是否尝试过将价格变为变体?F列中是否存在工作表错误(例如,N/A)。什么对我有效,什么对你无效?由于某种原因,它对我的安装无效。我将不得不进一步调查此事。我得到了错误13,输入mis-match。你得到了什么错误?在那个点上I的值是多少,那个单元格里有什么?听起来好像您正在尝试将文本转换为long。您是否尝试过将价格变为变体?F列中是否存在工作表错误(例如#N/A)。这仅适用于数值。这仅适用于数值。如果给定一个非数值、非错误值(例如任何非数值字符串),此操作将失败@MathieuGuindon刚刚测试了它,它对我来说运行良好。你能给我一个这样做不起作用的示例值吗?啊,那是因为price
是一个变体。如果声明为长
,则隐式转换失败。最好在检查IsNumeric
之前分配它,然后只读取单元格值一次。注意,MsgBox
调用中的参数是多余的。@MathieuGuindon对MsgBox
的理解很好,我错过了那个。但是,我想你可能会把我的答案和上面的混淆,我使用的是IsError()
而不是IsNumeric()
。如果给定一个非数字、非错误值(例如任何非数字字符串),这将失败@MathieuGuindon刚刚测试了它,它对我来说运行良好。你能给我一个这样做不起作用的示例值吗?啊,那是因为price
是一个变体。如果声明为长
,则隐式转换失败。最好在检查IsNumeric
之前分配它,然后只读取单元格值一次。注意,MsgBox
调用中的参数是多余的。@MathieuGuindon对MsgBox
的理解很好,我错过了那个。然而,我想你可能会把我的答案和上面的混淆,我使用的是IsError()
而不是IsNumeric()
。