[英]EXCEL VBA - Similar function to excel formula Value
我是VBA的新手,因此在尝试将某些字符串数字转换为值数字以进行IF验证时遇到问题。
问题是。 我在“ A”列中填充了以下内容:
E / B:房屋01
E / B:房屋02
E / B:建筑/新别墅
E / B:大楼/贝拉卡萨
E / B:房屋03
因此,在我的代码中,如果有数字,我希望它用最后两个数字填充“ B”列,如果没有数字,则要使用名称。
Set Rng = Range("A8:A" & Range("I" & Rows.Count).End(xlUp).Row)
For Each celula In Rng.SpecialCells(xlCellTypeVisible)
Select Case True
Case IsNumeric(Right(celula, 2)) = True
celula.Offset(0, 1).Value = Right((celula), 3)
Case Else
celula.Offset(0, 1).Value = Mid(celula, InStr(4, celula, "/") + 1, Len(celula))
End Select
Next celula
但是Case IsNumeric(Right(celula,2))= True永远不会是True。 它不会捕获最后2个数字。 但它的名称可以正常使用,并返回“ New Villa”和“ Bella Casa”。 而且我认为问题在于,即使有数字,Right(celula,2)也不是数字。
我想知道是否有一种方法可以将值中的“ Right(celula,2)”转换为Excel中的= Value公式,以进行验证。
OBS:在尝试这种方式之前,我已经将一个excel公式应用于这些单元格并起作用了,但是我想尝试这种方式以用于学习目的。
谢谢
我认为for each
循环本身都能按预期工作。
但是这个
Set Rng = Range("A8:A" & Range("I" & Rows.Count).End(xlUp).Row)
问题可能出在这里。 您必须确保您具有正确的Range
。 您可以通过调试进行验证: Debug.print Rng.Address
。
Sub t()
Dim rng As Range
With ActiveSheet
Set rng = .Range("a1:a" & .Range("a" & .Rows.Count).End(xlUp).Row)
For Each cell In rng.Cells
If Val(Right(cell.Value, 2)) = 0 Then
cell.Offset(0, 1) = Mid(cell.Value, InStrRev(cell.Value, "/") + 1, Len(cell))
Else
cell.Offset(0, 1) = Val(Right(cell.Value, 2))
End If
Next cell
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.