Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


27348 / 76732 ←次へ | 前へ→

【54707】自作のlookupを作りたいのですが
質問  エルマー  - 08/3/27(木) 9:35 -

引用なし
パスワード
   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回にしたいと思っています。

長々と済みません。よろしくお願いします。

0 hits

【54707】自作のlookupを作りたいのですが エルマー 08/3/27(木) 9:35 質問
【54708】Re:自作のlookupを作りたいのですが ハチ 08/3/27(木) 9:49 発言
【54709】Re:自作のlookupを作りたいのですが エルマー 08/3/27(木) 10:48 発言
【54710】Re:自作のlookupを作りたいのですが n 08/3/27(木) 10:52 発言
【54722】Re:自作のlookupを作りたいのですが エルマー 08/3/27(木) 16:28 お礼

27348 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free