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