2017-07-17 23 views
0

文字列を入力として受け取る関数を作成し、この文字列をvlookupの引数として使用して、閉じられたブックから値を取得したいとします。データと文字列が同じワークシートの両方にあるとき閉じられたブックに参照するVBAのVlookup

次のコードは動作します:

Function get_value(inputString as String) 

    Dim dataRange as Range 

    Set dataRange = Range("A1:B4") 

    get_value = Application.WorksheetFunction.Vlookup(inputString, dataRange, 2, False) 

End Function 

は単純に動作しません(下記のコードのような)の範囲を参照する(私はこれが原因関数であると仮定しましたSubsのようにWorkbooks.Openを処理できません)。

Set workbookVariable = Application.Workbooks.Open(path_to_file) 

dataRange = workbookVariable.Sheets(1).Range("A1:B4") 

マイテーブル(デスクトップに保存された 'names.xls' として保存された)のようになります。私のような関数呼び出しをしたいしたい

  A  |  B 
    1 Olivia |  Spaghetti 
    2 John  |  Steak 
    3 Samuel |  Rice 
    4 Brian  |  Chicken 

= GET_VALUE(A1)とそれはA1の名前の食物を返すでしょう。

get_valueが他のブックでも機能するように、コードを調整するにはどうすればよいですか?

+0

これはあなたにアイデアを与えるかもしれません、あなたはテストされていません。外部ワークブックをアクティブにして、 'Thisworkbook.Path&Application.PathSeparator&Range(" A1:B4 ")。Address(External:= true)'の直後のウィンドウから文字列を取得します。その一部を必要とし、そのワークブックへの接続を設定することができます。 – PatricK

+0

https://stackoverflow.com/a/42800024/4539709 – 0m3r

+0

0m3r、同じ質問ではなく、私は関数が必要です。 –

答えて

0
Function auto_open() 

Workbooks.Open ("C:\Users\bmartin598\desktop\name") 

Workbooks("Book2").Activate 
'make this match the workbook this code is in 

End Function 



Function get_value(inputString As String) 

Dim dataRange As Range 

Dim workbookVariable As Workbook 

Dim strVal As Variant 

Set workbookVariable = Workbooks("name") 'change to match workbook name 

Set dataRange = workbookVariable.Sheets(1).Range("A1:B4") 

strVal = Workbooks("name").Sheets("Sheet1").Range(inputString).Value 
'make sure workbooks matches the name of your workbook 

get_value = WorksheetFunction.VLookup(strVal, dataRange, 2, False) 


End Function 

Function auto_close() 
Workbooks("name").Close 
End Function 

これは回避策として使用できます。このワークブックが開いているときはいつでも自動的に別のワークブックを開き、バックグラウンドに配置します。参照ブックで作業しているブックを閉じると、同様に閉じます。

これが役に立ちます。

+0

まだ動作しません、それはあなたのために働く変です。私の問題は、関数の制限に起因すると疑われました。(https://stackoverflow.com/questions/7693530/excel-vba-cant-open-workbook) –

+0

コードはどこにありますか?また、どのバージョンのExcelを使用していますか? – bmartin598

+0

この関数は#VALUEを返します。任意の入力に対して。 Excel for Mac 15.33(2017)およびExcel 2010(Windows)の実行 –

関連する問題