|
Excel2003を使っています。
ワークシート上にあるリストのなかで、条件式をつかって条件に合えば"v"が表示されるようになっています。
そのリストを検索し、"v"がついているセルの右側にあるデータを抽出したいと思っているのですが、vlookup機能では、式の中の"v"を拾ってしまい、結果の方をひろってくれません。そこで自分で作ろうとしたのですが、うまくいかず困っています。
詳しくは以下です。
データの並びは
A列 B列
1
2
v 3a
3b
4
のような並びになります。同様のリストが下にいくつか並ぶようになります。
A列には条件式が入っていて、=IF(濃度>3,"v","")といったような式がそれぞれ入っています。場合によっては、全部に"v"がつかない場合があります。
上記のような結果になった場合、結果として「3a」を得られる式をつくりたいのです。lookup機能では、式の中に"v"があるので、結果が「1」になってしまいます。
そこでfunctionを使おうと思ったのですが、For文の回転数をうまく設定できず、
多く設定すると、指定していないのにさらに下の行の方も検索してしまい、当該リストのなかに"v"がないと、そのまま下の行までどんどん検索していってしまいます。
Function ALookup(ARange, col)
Dim i As Long
For i = 1 To 10
If ARange(i, 1) = "v" Then
ALookup = ARange(i, col)
Exit For
End If
Next i
End Function
つまり、ARangeの範囲をA1:B5に設定しても、For文で100まで指定すれば、"v"がみつかるまで下の行を検索してしまいます。下にも同様のリストがあるため、結果的に下のリストの結果を表示してしまいます。
配列の大きさを調べようとおもっても、Uboundではワークシートで指定した範囲の大きさは返してくれません。というか、この場合、宣言していないのでエラーになります。
配列の大きさをみつける方法、あるいは下の行まで検索しないで済む方法はないでしょうか。
あるいは根本的に他の方法に変えた方がいいのでしょうか。
Count関数を使ってということも考えたのですが
=IF(COUNTIF(A1:A5,"v")=1,Alookup(A1:B5,2),"")
そうすると2回範囲指定をしなければならず、同様の式を多く作らなければいけないので、できればセルに書き込む際の範囲指定は1回にしたいと思っています。
長々と済みません。よろしくお願いします。
|
|