2014-10-01 54 views
0

我是VBA的新手,所以遇到了一個問題,試圖將某個字符串編號轉換爲IF驗證的值編號。EXCEL VBA - 與excel公式類似的函數值

問題是。我充滿了這樣的事情列 「A」:

E/B:房屋01

E/B:房屋02

E/B:建築/新別墅

E/B:建築/貝拉卡薩

E/B:房屋03

所以,在我的代碼,我想這與過去的2號填「B」柱,如果有號碼或姓名,如果有ISN 「T。

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個數字。但它的名稱和返回「新別墅」和「貝拉卡薩」的作品沒問題。我認爲問題在於Right(celula,2)從來不是一個數字,即使是一個數字。

我想知道是否有一種方法可以在值中轉換「Right(celula,2)」,就像在Excel中的= Value公式一樣,以進行驗證。 OBS:在嘗試這種方式之前,我已經將excel公式應用於這些單元格,並且它能夠工作,但是我想嘗試這種方式來進行學習。

感謝

+1

只需將您的代碼和示例數據複製並粘貼到新的Excel工作表中即可使用。你確定數字後沒有空格? 'Debug.Print「<」+ Right(celula,2)+「>」'確保(它應該打印'<01>','<02>'等)。 – ssarabando 2014-10-01 13:33:36

+0

看起來不錯。用它來測試它。可能是你沒有選擇正確的範圍。 For Each celula In Selection Select Case True .... – causita 2014-10-01 13:35:14

+0

我在自動過濾器後設置了rgn,這是問題所在。謝謝 – MVAmorim 2014-10-01 14:32:21

回答

1

我覺得for each循環本身工作正常。

然而,這

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

可能是問題所在。你必須確保你有正確的Range。您可以通過調試來驗證:Debug.print Rng.Address

+0

範圍沒問題,它與名稱一起工作。如果範圍關閉,它應該什麼也不返回。 編輯:我有我的工作表中的其他數據,「我」欄填寫,但沒有在此使用。 – MVAmorim 2014-10-01 13:32:09

+0

它爲「rng.address」打印什麼? – 2014-10-01 13:33:53

+0

應該還有其他的東西,它可以像預期的那樣在單獨的工作表中工作,但只有其他情況在我的主表中工作 – MVAmorim 2014-10-01 13:37:37

0
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