2011-12-14 6 views
1

数時間、数時間の例を試しましたが、#NAMEと同じエラーが繰り返し表示されますか?Excel 2007のVBA関数でVLOOKUPを使用

VBA関数内でVLOOKUPを使用し、結果をセルに格納する前に結果を処理する必要があります。まず、VBA VLOOKUPの一部を動作させるだけの問題があります。ここで試験のため

は=シート1

4行データのX 2列 スプレッドシートで詳細...

ワークシートです。 細胞D1:E4 ダンス:23 フランス語:42 英語:2 音楽:セルA1に33

私はセルになり、列D例えばフランス語から値

ユーザー帰属コンテンツを持っていますB1私は関数を呼び出します = GetQty(A1、D1:E4,2) 私はいつも#NAMEを取得しますか?

1)関数を正しく呼び出すにはどうすればよいですか。私はこれをしっかりしていますか?

私のVBA関数 "GetQty"では、セルA1の値に対してVLOOKUPを実行し、テーブル(Cell D1:E4)から一致するエントリの値を返したいとします。たとえば42を返し、その値を配置します(B1のワークシートセルの式を使用するだけでなく、VBAを介してC1列にも)

ここでは、VLOOKUPを動作させるために私が試した多くの例の1つです。

私は多くの例を試しましたが、いつも#NAMEを取得していますか?いくつかの問題がありますが、主にエラー

+1

ここでは、本来のVLOOKUP関数よりもUDFを使用する利点はありません。それはずっと遅くなります。これには何らかの理由がありますか? –

答えて

2

を:VLOOKUPため

  • 最初の引数が範囲することはできません、それは整数
として戻り値の型を宣言しない方が安全だ値
  • にする必要があります

    ここVBAからVLOOKUPを使用する方法の作業例です、多分それはお手伝いします(あなただけVLOOKUPそれを呼び出す):

    Function VBAVlookup(ByVal search As Variant, _ 
            cell_range As Range, _ 
            offset As Long, _ 
            Optional opt As Boolean = False) 
    
    Dim result As Variant 
    result = WorksheetFunction.VLookup(search, cell_range, offset, opt) 
    'do some cool things to result 
    
    VBAVlookup = result 
    
    End Function 
    

    あなたがやっていることがかなり洗練されていない限り、いつも=Vlookup(...) * 55 +2とそのようなものを使って、1つの式を使ってvlookupの操作結果を返すことができます。あなたの道をカスタマイズ

    Range("A2", Range("A2").End(xlDown)).Rows.Count 
    

    ので、これはあなたの範囲を渡し役立つことがあります。以下は

  • +0

    私は上記の関数を試して、セル参照の代わりに値をインクルードするためにワークシートから関数への呼び出しを変更しますが、まだ#NAMEを取得していますか?エラー。私は= VBAVlookup( "French"、$ D $ 1:$ E $ 4,2)とVBAVlookup( "French"、D1:E4,2)を試しましたが、運がないと、どのようにしてセルから関数を呼び出せますか? –

    +0

    それは正しいことです。その名前の機能が登録されていないので、問題はマクロセキュリティでなければなりません。マクロ対応の本を使用していること、および設定が中程度以下であることを確認してください。 – aevanko

    +0

    @user:コードはどこに置いていますか?シートモジュールではなく、通常のモジュールでなければなりません。 –

    0

    は、列の範囲を取得するためのサンプルです。

    関連する問題