- ベストアンサー
Excel2003 Match関数について
- Excel2003のMatch関数について教えてください。VBAを使用してデータベース検索を行いたいのですが、特定のキーでの検索がうまくいきません。
- Excel2003のMatch関数は、指定した値を検索範囲内で探し、該当する位置を返します。しかし、希望するキーでの検索ではエラーが発生してしまいます。
- Vlookup関数では、検索する値は検索範囲の最初の列になければなりませんが、Match関数でも同様の制約があるのでしょうか?他の検索方法も教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
データの範囲を明示的に指定すれば、別の列でも検索できるようにはなります。理由はよく判りません。 それと[データ]の範囲は拡張してますか? 例えば、キーがF列の場合、 Hit = WorksheetFunction.Match( _ .[B1], [データ].Range("F1:F99"), 0) On Error GoTo 0
その他の回答 (3)
- _Kyle
- ベストアンサー率78% (109/139)
#3です。 すみません。 どうも動作仕様を誤解していたようです。 検索したいのは [データ]範囲の【51列目】 すなわち [データ].Columns(,51) '[データ]の51列目 なのですね。 質問文のコードは 「行と列が逆」なのではなく 「検索する列を指定できていない」でした。 no = WorksheetFunction.Match( _ .[B1], [データ].Columns(,51), 0) として、 [データ]の【51列目】を検索するようにしてやれば通るかと。 --------- 先述のとおり [データ].Resize(, 1) '[データ]の1列目 A列のことなので てっきり [データ].Resize(1) '[データ]の1行目 を検索する場面かと思ってました。 勘違い怪答大変失礼いたしました。 <(_ _)>
お礼
締め切り後にもかかわらず、わざわざありがとうございます。 ためしてみますね(*^^)v 本当にありがとうございました。 また、多分いろいろ質問すると思いますが宜しくお願い致します。<m(__)m>
- _Kyle
- ベストアンサー率78% (109/139)
ぇっと、行と列が逆になってますけど? ------------------------------------- [データ].Resize(, 1) というのは [データ]範囲の【 1列目 】 つまり、A列のことです。 検索したいのは [データ]範囲の【 1行目 】 すなわち [データ].Resize(1) なのでは? ------------------------------------- 転記部分も .[B5] = [データ].Cells(no, 2) というのは [データ]範囲の第no【行】目の値をB5に転記する 記述になってます。 以上ご参考まで。
お礼
ありがとうございます。本当ですね 訂正して、うまくいけば本当に単純なことだったんですね。 う~ん。でもやっぱり症状はかわらないので、MATCH関数を使わない別の方法でやってみます。 どうもありがとうございました。
補足
その後、いろいろ試してみたところ、[データ].Range("AY1:AY65531"))と".Resize(1)をはずすと うまく値をひろってきました。”AY65531はシートの最後の値65536から一番上の空白行3行とフィールド行の4行分をひいた値でうまくいきました。 いろいろありがとうございました。 これで一応解決(?)とさせていただきます。
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
gokui6.exeのどのファイル? AY列、これは日付?
補足
jazzcorpさんありがとうございます。 補足します。 極意の5章5です。AY列は、請求番号になります。 宜しくお願いします。
補足
たびたびありがとうございます。 昨日より、ずっと頭を抱えております。 このプログラムでB1の値と[データ]の値についてなのですが、[データ]にある値をB1にコピーしても 一致する値がないと返ってきてしまいます。 御指摘のようにしても、同様なのです。 単純なこと(例えば変数の文字列宣言しているとか。(確認済みですが))なのでしょうが 理解できません。 デバッグでB1の値と[データ]の値を見てもどう見ても同じ数字なのですが、認識しません。 [データ]の値を手打ちで直してみても同じなのですが。 おわかりになれば、御指導下さい。 宜しくお願い致します。