2016-04-25 12 views
0

Excel VBA関数を記述しようとしています。ユーザは2つのパラメータを入力し、最初のパラメータが2番目のパラメータであるかどうかを調べ、TRUEまたはFALSEを返します。私はサブルーチンとして機能するようにしましたが、関数ではありません。私は何が欠けていますか?Excel VBA:範囲内のオブジェクトを探す

これはおそらくかなり基本的ですが、それは私にいくつかの問題を与えています。

ありがとうございます!

**私は私ではなく、コレクションの配列を使用することができることを実現するが、私はこの可能であれば

EDITようにそれを好む:もう少し詳細に問題を記述するために:私は決定するために探していますinput_cellの値がlistの範囲にある場合、input_celllistの範囲に含まれていないと表示されません。

私は2つの値を入力すると、それはコレクションは私の強いスーツではありませんが、私は何を見逃していることはコレクションにキーを追加していると信じて#VALUE!エラー

Function INRANGE(input_cell As Range, list As Range) As Boolean 

Dim coll As New Collection 

'*******Add items to coll********' 

'Find size of collection 
Dim LastRow As Long 
LastRow = list.Rows.Count 
'Cells(Rows.Count, input_cell.Column).End(xlUp).Row 

'Add rows to collection 
Dim i As Integer 
For i = list.Row To LastRow 
    coll.Add Cells(i, list.Column).Value 
    Next i 

'*******Search collection********' 

Dim Current_Cell As Variant 

Dim isInList As Boolean 
isInList = False 

Dim k As Integer 'Count of loop through list 

For k = list.Row To LastRow 
    If input_cell = coll(k) Then 
     isInList = True 

    End If 

    Next k 

INRANGE = isInList 

End Function 
+0

関数内から関数を使用しようとしているようです。また、2つの範囲パラメータを宣言し、それらを供給していません。関数にfalseを指定するべきではありません。あなたは、(あなたが宣言したように)それからブール値を受け取るために関数にパラメータを与える必要があります。 – Brian

+0

組み込みの 'Intersect'関数を使用することを考えましたか?これは2つの範囲の交点に基づいて' TRUE/FALSE'を返します。あなたの記事に基づいて、私は 'Intersect'があなたが必要とするものを一行のコードでより効率的に達成すると思います。 – user3561813

+0

input_cellがリスト内にあるかどうかを調べようとしていますか(たとえば、C2がC1:C10の中にあるか)、input_cellの値がリスト内にあるかどうかを調べようとしていますか(5が{3,2,6,7 、5、10、11} – OldUgly

答えて

0

を返します。次の編集作業が必要です:

Dim i As Integer 
For i = list.Row To LastRow 
    coll.Add Cells(i, list.Column).Value, Cells(i, list.Column).Value 
    Next i 
+0

とあなたのコードの設定方法は、データが行1(ヘッダなし)から開始して動作する必要があります – Chris

+0

彼が使用しているメソッドは、コレクションのキーを必要としません。彼はコレクションアイテムの価値をチェックしています。 –

+0

テスト 'If input_cell = coll(k)'キーをチェックしませんか? – Chris

関連する問題