2015-08-28 68 views
0

我是VBA的新手,我嘗試插入VLOOKUP函數。將函數插入一系列單元格

我從網頁獲取數據,經過一些自動過濾和自動刪除後,數據收縮爲較小的大小。但由於它是一個動態數據,所以最後一行總是變化。

我的數據是這樣的:

A   B  C 
FleetType MSN  Registration  

我有登記(C)填滿,並希望找到其在不同的表中所列出的船隊類型。

我試圖用FormulaR1C1插入公式,但最終得到了1004條消息。我也嘗試使用Application.VLookup,也得到了1004消息。

由於我無法做到這一點,因爲我知道註冊的前兩個字母提供了關於車隊類型的線索,所以我已經設置了一個嵌套的IF函數並試圖插入它;沒有運氣也。

這是sub進出口試圖使其運行(我沒有刪除,我試過的):

Sub formuller() 

    Worksheets("Data").Select 
    Worksheets("Data").Activate 

    'range("A1:A600").Formula = "=IF(LEFT(D2;2)="JK";"Boeing";IF(LEFT(D2;2)="JG";"Boeing";IF(LEFT(D2;2)="JF";"Boeing";IF(LEFT(D2;2)="JH";"Boeing";IF(LEFT(D2;2)="JV";"Boeing";IF(LEFT(D2;2)="JJ";"Boeing";IF(LEFT(D2;2)="JY";"Boeing";IF(LEFT(D2;2)="LJ";"Boeing";"Airbus"))))))))" 
    On Error Resume Next 

    Range("A1:A2").FormulaR1C1 = "=IF(LEFT(RC[3];2)=""JK"";""Boeing"";IF(LEFT(RC[3];2)=""JG"";""Boeing"";IF(LEFT(RC[3];2)=""JF"";""Boeing"";IF(LEFT(RC[3];2)=""JH"";""Boeing"";IF(LEFT(RC[3];2)=""JV"";""Boeing"";IF(LEFT(RC[3];2)=""JJ"";""Boeing"";IF(LEFT(RC[3];2)=""JY"";""Boeing"";IF(LEFT(RC[3];2)=""LJ"";""Boeing"";""Airbus""))))))))" 

    On Error GoTo 0 

    'Worksheets("Data").Range("A1:A600").FormulaR1C1 = "=VLOOKUP(RC[3];Filo!R1C1:R309C3;3;FALSE)" 

有沒有解決這個辦法嗎?我所要求的只是在VBA項目中使用好舊的VLookup

+2

把';'改成''',看它是否有效。無論您的本地公式分隔符是什麼,「FormulaR1C1」都使用逗號作爲公式字段分隔符。 – BrakNicku

+0

謝謝,像魅力一樣工作。 –

回答

0

您可以使用WorksheetFunction.VLookup舊的VLookup。 但另外你可以使用這個宏作爲你的porpuse。解釋在評論中。

Option Explicit 
Sub FindFleetType() 
    Const Boeing As String = "Boeing" 
    Const Airbus As String = "Airbus" 
    Dim MySheet As Worksheet 
    Dim MyRange, c As Range 
    Dim MyInt, LastRow As Integer 
    Dim MyStr, MyArray(7) As String 

    'filling string array 
     MyArray(0) = "JK" 
     MyArray(1) = "JG" 
     MyArray(2) = "JF" 
     MyArray(3) = "JH" 
     MyArray(4) = "JV" 
     MyArray(5) = "JJ" 
     MyArray(6) = "JY" 
     MyArray(7) = "LJ" 

    'defining worksheet 
    Set MySheet = ThisWorkbook.Worksheets("Data") 

    'finding lastrow has data on columnn C 
    'so you don't have to change the range manually every time 
    With MySheet 
     LastRow = .Range("C" & .Rows.Count).End(xlUp).Row 
    End With 

    'defining range to be filled 
    Set MyRange = ThisWorkbook.ActiveSheet.Range("A2:A" & LastRow) 

    'iterating each cell on defined range 
     For Each c In MyRange 
      MyStr = Left(c.Offset(0, 2).Value2, 2) 'get first two letters of "Registration" column C 
       'control if your array contains your string 
       If ContainString(MyStr, MyArray) Then 
        c.Value2 = Boeing 
        Else 
        c.Value2 = Airbus 
       End If 
     Next 
End Sub 
Private Function ContainString(ByVal StringToBeFound As String, StringArray As Variant) As Boolean 
    ContainString = (UBound(Filter(StringArray, StringToBeFound)) > -1) 
End Function 
相關問題