簡體   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