2017-09-28 29 views
1

我想在Excel中編寫一個簡單的密碼,它將從單元格中取出一個文本,將每個字母替換爲相鄰列中的數字,然後將輸出放入另一個單元格中。無法讓VLOOKUP工作 - 它以公式的形式工作,但不知何故無法在VBA代碼中使用它。試圖做一個簡單的過程,首先會做一個字符(稍後添加循環會很容易),但它不起作用。它編譯,但是當我運行它(按一個按鈕,我分配它),我得到了「#N/A」在結果單元格。Excel中使用表替換Excel中的VBA中的簡單密碼

Sub Zakoduj() 

Dim Literka As String 
Dim Liczba As Variant 
Dim ColumnToTake As Integer 

ColumnToTake = 1 ' Liczby 

On Error Resume Next 
Err.Clear 

Literka = Sheets("Sheet2").Range("B2").Value 

Liczba = Application.VLookup(Literka, Sheets("Sheet1").Range("A5:B39"), ColumnToTake, False) 

If Err.Number = 0 Then 
    Sheet2.Range("B6").Value = Liczba 
Else 
    Sheet2.Range("B6").Value = Err.Number 
End If 

End Sub 

範圍包含如下數和字符:

Kod Litera 
16 A 
73 B 
12 C 
40 D 
70 E 
etc. etc. 

無法找到一個教程將解釋如何做到這一點...

+0

'Application.worksheetfunction.VLookup'你之前通過加強和VLOOKUP後,嘗試刪除錯誤捕捉到,我覺得函數調用失敗而不是返回不適用也許? –

+0

是不是你的列回到前面?你目前的'VLookup'正在你的'Kod'列中尋找你從'Sheets(「Sheet2」)得到的值。Range(「B2」)。Value' - 但是你聽起來好像要從列中查找稱爲'Litera',所以你可能需要切換這些列。 (而且你也從第一列返回值,所以如果發生匹配,你只是返回相同的值,你可能想設置ColumnToTake爲'2'。) – YowE3K

+0

你可以嘗試[使用數組](https://stackoverflow.com/a/22050148/7690982)也是,因爲它們真的被優化了。而示例設置替換函數來替換您的密碼 – danieltakeshi

回答

1

下面是修改後的版本。請注意,這些值是A1:上表B6 1

Option Explicit 

Sub Zakoduj() 
    Dim Literka As Integer 
    Dim Liczba As String 
    Dim ColumnToTake As Integer 

    ColumnToTake = 2 ' Liczby 
    Literka = Sheets("Sheet2").Range("B2").Value 
    Liczba = "Value not found" 'If value is not found 

    On Error Resume Next 
    Liczba = Application.WorksheetFunction.VLookup(Literka, Sheets("Sheet1").Range("A1:B6"), ColumnToTake, False) 
    On Error GoTo 0 'Always reset error handling after On Error Resume Next 

    Sheet2.Range("B6").Value = Liczba 
End Sub 
+0

感謝您的幫助。但是,它仍然不起作用......在調用VLookup之後,「Liczba」不會從「未找到的值」更改。我不知道爲什麼,因爲一切都是正確的 - 範圍等。 – Andy

+0

好吧,明白了! Vlookup只查看第一列! – Andy

+0

VLookup在指定範圍的第一列中查找並獲取由ColumnToTake指定的下一列的值。如果將ColumnToTake設置爲1,則會得到與輸入相同的輸出。 – peakpeak