Excel 如果是,则检查2个变量,但赢了';不要忽略文本
我正在运行一个Excel 如果是,则检查2个变量,但赢了';不要忽略文本,excel,vba,Excel,Vba,我正在运行一个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
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
修正你的宏
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
由于VBA将隐式地将仅包含数字的文本字符串转换为用于此比较的数字(即
2>“1”
为True
,2>“3”
为False
),因此您实际要检查的值是否为
正如格斯伯格在下面指出的那样,这也将捕获科学或程序员的符号,例如“&hFF”(“&h”表示十六进制,十六进制
FF
转换为十进制为255
)或“1d2”/“1e2”(1的幂为2,或1*10^2
=100
)。如果这是一个问题,你可能需要考虑。 这个宏可以更好地工作
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
如果您没有添加所有样板代码,而只是建议在值周围添加
Val()
。@Salim,我同意Gserg添加的内容:)我运行了它,效果会更好,但如果值以数字开头,后跟文本(如3G调制解调器),则情况会更清楚这真的取决于你为什么要检查它以及规则是什么。例如,如果单元格中有一个存储为文本的数字,是否应将其视为一个数字?@Gserg,Chronocidal所写的答案就是我需要的答案。我只需要检查这个值是否真的是一个数字——如果不是太清楚的话,很抱歉!它也解决了SalIMS回答中的问题,当值从一个数字开始,但后面包含文本。例如,isnumeric(“1d2”)
=>True
,isnumeric(&ha”)
=>True
@Gserg,只有一个数字,值中不能有文本或字母-因此在我的情况下,isnumeric似乎可以工作,因为没有检测到3G调制解调器。@CustomX然后isnumeric
不会帮助您,除非你能绝对确定你的数据中不会有任何东西是你没有的。@GSerg but,&ha
是一个数字:&h
表示它是十六进制的,而十六进制a
转换成十进制则是10
。类似地,xdy
是xey
或x*10^y
的同义词,因此1d2
是100
。“问题”在于IsNumeric
识别科学和编程符号
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