繁体   English   中英

EXCEL VBA-与excel公式值相似的函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM