こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBA MATCHをユーザー定義関数で使う

ユーザー定義関数の質問です。

ある値をB列で探し、見つけたセルの行番号を取得したいのですが分かりません。
条件が一つあってそれはAの値が10以下のものは検索から除外するということです。



A  B
6  50
5  45
7  2
12 45
11 9

例えばBが45かつAの値が10以上であるセルの行番号はこの例だと4になります。

ワークシート関数を使うと{=MATCH(45,(A1:A5>=10)*(B1:B5),0)}でできました。しかしユーザー定義関数で.Match(45, Worksheets("Sheet1").Range("A1:A5>=10") * Worksheets("Sheet1").Range("B1:B5"), 0)とやっても#VALUE!となってしまいました。何がおかしいのでしょうか。

投稿日時 - 2011-05-17 04:09:01

QNo.6743306

すぐに回答ほしいです

質問者が選んだベストアンサー

Sub test01()
x = Application.WorksheetFunction.Match("山田", Range("a1:A100"), 0)
MsgBox x
End Sub
A列に山田があります。上記を実行すると、」正しい行番号を返しましたが。
もちろんこれは最初の出現行しか返さない。
これはVBAでエクセルのワークシート関数を使うことで、ユーザー定義関数と違うし、この場合はユーザー定義関数にする必要も無い。
ユーザー関数にするなら、Findメソッドなどを使う手もあるだろうが、質問は何のことを言っているのか。質問者が混乱しているだけでは。

投稿日時 - 2011-05-17 09:56:50

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

何がおかしいかって?
Range("A1:A5>=10")
ここがおかしいんでしょうね

投稿日時 - 2011-05-17 10:16:27

あなたにオススメの質問