1

何時間もの例を試しましたが、#NAME? という同じエラーが継続的に発生します。

VBA 関数内で VLOOKUP を使用し、結果をセルに入れる前に結果を処理する必要があります。まず、VBA VLOOKUP 部分を機能させるために問題が発生しています。

ここにテスト用の詳細があります スプレッドシートは...

ワークシート = Sheet1

4 行 x 2 列のデータ。セル D1:E4 ダンス : 23 フランス語 : 42 英語 : 2 音楽 : 33

セルA1には、ユーザーがコンテンツを挿入し、列Dの値になります。たとえば、フランス語です

セル B1 では、関数 =GetQty(A1,D1:E4,2) を呼び出しますが、常に #NAME? を取得します。

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

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

これは、VLOOKUP を機能させるためだけに関数で試した多くの例の 1 つです。

Function GetQty(Celly As Range, CellyRange As Range, Colretval As Integer) As Integer
Dim result As String
Dim sheet As Worksheet
Set sheet = ActiveWorkbook.Sheets("Sheet1")
GetQty = Application.WorksheetFunction.VLookup(sheet.Range(CellyRange), sheet.Range(CellyTable), Colretval, False)
End Function

多くの例を試しましたが、常に #NAME? が表示されます。エラー

4

2 に答える 2

2

主にいくつかの問題があります。

  • Vlookup の最初の引数は範囲にすることはできません。値を指定する必要があります
  • 戻り値の型を Integer として宣言しない方が安全です

VBA から 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 から操作された結果を返すことができます。

于 2011-12-14T13:15:42.067 に答える
0

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

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

あなたの方法をカスタマイズしてください。これにより、範囲を通過するのに役立ちます。

于 2014-12-16T07:10:43.037 に答える