EXCEL VBA – 与excel公式值类似的函数

我是VBA的新手,所以我遇到了一个问题,试图将一些string编号转换为IFvalidation的值编号。

问题是。 我有列“A”充满了这样的事情:

E / B:房屋01

E / B:房屋02

E / B:build筑/新别墅

E / B:build筑/贝拉卡萨

E / B:房屋03

所以,在我的代码中,如果有数字或名字,如果没有的话,我希望它用最后2个数字填充“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 

但是案件是数字(右(celula,2))=真从来不是真的。 它不捕获最后2个数字。 不过名称还是可以的,还有“新别墅”和“贝拉卡萨”。 而我认为问题在于右(celula,2)从来不是一个数字,即使是一个数字。

我想知道是否有一种方法来转换“Right(celula,2)”的值,就像在Excel中的= Value公式一样,进行validation。

OBS:在尝试这种方法之前,我已经将excel公式应用到了这些单元格中,并且工作,但是我想用这种方式来学习。

谢谢

我认为for each循环本身按预期工作。

但是,这个

Set Rng = Range("A8:A" & Range("I" & Rows.Count).End(xlUp).Row)

可能是问题所在。 你必须确保你有正确的Range 。 您可以通过debugging来validation: 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