我正在运行for
循环,并有一条if/else
语句,该语句检查当前范围的值并查看其是否大于或等于1。问题在于,当前范围,也可以是文本而不是数字。
就像我现在看到的那样,它看到的文本大于或等于1,但是如何添加额外的条件以查看它是文本还是数字?
LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
For i = 3 To LastRow
If Range("A" & i).Value >= 1 Then
ws2.Range("A" & var1).Value = ws1.Range("A" & i).Value
var1 = var1 + 1
End If
Next i
答案 0 :(得分:2)
由于VBA会将隐含仅包含数字的文本字符串转换为用于此比较的数字(即2>"1"
为True
,而2>"3"
为False
),所以您实际上要检查值IsNumeric
If Range("A" & i).Value >= 1 And IsNumeric(Range("A" & i).Value) Then
如GSerg所指出的,这还将捕获科学或程序员表示法,例如“&hFF”(“&h”表示十六进制,而十六进制FF
则转换为255
的Decimal)或“ 1d2 ” /“ 1e2”(decimal exponent为1的幂2或1 * 10^2
= 100
)。如果这是一个问题,则可能要考虑使用using RegEx。
答案 1 :(得分:0)
更正您的宏
Option Explicit
Sub compaire_with_1()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim LastRow%, i%, var1%: var1 = 1
Set ws1 = Sheets("sheet1"): Set ws2 = Sheets("sheet2")
LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
For i = 3 To LastRow
If Val(ws1.Range("A" & i)) >= 1 Then
ws2.Range("A" & var1).Value = ws1.Range("A" & i).Value
var1 = var1 + 1
End If
Next i
End Sub
答案 2 :(得分:0)
也许这个宏可以更好地工作
Option Explicit
Sub compaire_with_Digit()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim LastRow%, i%, var1%: var1 = 1
Set ws1 = Sheets("Sheet1"): Set ws2 = Sheets("Sheet2")
LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
ws2.Range("A1").CurrentRegion.ClearContents
For i = 3 To LastRow
If ws1.Range("A" & i) Like "[1-9]*" Then
ws2.Range("A" & var1).Value = _
ws1.Range("A" & i).Value
var1 = var1 + 1
End If
Next i
End Sub