WINXP Excel2003 VBA データベース検索について教えて下さい。
Sub データ表示()
Dim no As Long
With Sheets("データ入力")
On Error GoTo エラー処理
no = WorksheetFunction.Match( _
.[B1], [データ].Resize(, 1), 0)
On Error GoTo 0
.[B5] = [データ].Cells(no, 2)
.[D5] = [データ].Cells(no, 3)
.[E5] = [データ].Cells(no, 4)
.[F5] = [データ].Cells(no, 5)
.[B7] = [データ].Cells(no, 6)
.[C7] = [データ].Cells(no, 7)
.[D7] = [データ].Cells(no, 12)
.[B9] = [データ].Cells(no, 8)
.[B11] = [データ].Cells(no, 9)
.[B13] = [データ].Cells(no, 10)
.[D13] = [データ].Cells(no, 11)
Exit Sub
エラー処理:
MsgBox "該当するNo.のデータはありません"
.[B5:F5].ClearContents
.[B7:F7].ClearContents
.[B9:F9].ClearContents
.[B11:F11].ClearContents
.[B13:F13].ClearContents
End With
End Sub
というプログラム(EXCEL極意6VBAという参考文献の一部を利用)で、1枚のシート(”データ”という
名前のデータベース)51列ほどあります。からキー(一番右端の列をキー)の値と一致したデータを
別のシートへ呼び出す方法です。
そこで、こまっているのが、あるキーだとちゃんと呼び出してくるのに、肝心の希望のキーだと、エラーになって該当データ無となってしまうのです。
簡単にかくと
”データ”というデータベース
A列 B列 C列 D列・・・・・・・・ AY列
001 あああ AAAA 2012/08/20 120821002 ←このAY列をキーとして検索
をかけるとエラー処理にいってしまう。
B列”あああ”だとうまくデータを検索してくる。
Vlook関数だとキーとなるデータは一番左端にないといけないということなのですが、Match関数もそうなのでしょうか?
ちなみにオートフィルターでのVBAだとうまくいくのですが、・・・
もしこのつたない文で、御理解いただき、おわかりになる方が、いらっしゃれば、ご指導ください。
もしくは、Match関数以外での検索方法でもけっこうです。
最終的に希望する結果は、D列の日付(重複する日付有)で絞り込み、AY列のキー(重複するデーターは無)でその行のデーターを別シートに表示させること
No.2ベストアンサー
- 回答日時:
データの範囲を明示的に指定すれば、別の列でも検索できるようにはなります。
理由はよく判りません。それと[データ]の範囲は拡張してますか?
例えば、キーがF列の場合、
Hit = WorksheetFunction.Match( _
.[B1], [データ].Range("F1:F99"), 0)
On Error GoTo 0
この回答への補足
たびたびありがとうございます。
昨日より、ずっと頭を抱えております。
このプログラムでB1の値と[データ]の値についてなのですが、[データ]にある値をB1にコピーしても
一致する値がないと返ってきてしまいます。
御指摘のようにしても、同様なのです。
単純なこと(例えば変数の文字列宣言しているとか。(確認済みですが))なのでしょうが
理解できません。
デバッグでB1の値と[データ]の値を見てもどう見ても同じ数字なのですが、認識しません。
[データ]の値を手打ちで直してみても同じなのですが。
おわかりになれば、御指導下さい。
宜しくお願い致します。
No.4
- 回答日時:
#3です。
すみません。
どうも動作仕様を誤解していたようです。
検索したいのは
[データ]範囲の【51列目】
すなわち
[データ].Columns(,51) '[データ]の51列目
なのですね。
質問文のコードは
「行と列が逆」なのではなく
「検索する列を指定できていない」でした。
no = WorksheetFunction.Match( _
.[B1], [データ].Columns(,51), 0)
として、
[データ]の【51列目】を検索するようにしてやれば通るかと。
---------
先述のとおり
[データ].Resize(, 1) '[データ]の1列目
A列のことなので
てっきり
[データ].Resize(1) '[データ]の1行目
を検索する場面かと思ってました。
勘違い怪答大変失礼いたしました。 <(_ _)>
締め切り後にもかかわらず、わざわざありがとうございます。
ためしてみますね(*^^)v
本当にありがとうございました。
また、多分いろいろ質問すると思いますが宜しくお願い致します。<m(__)m>
No.3
- 回答日時:
ぇっと、行と列が逆になってますけど?
-------------------------------------
[データ].Resize(, 1)
というのは
[データ]範囲の【 1列目 】
つまり、A列のことです。
検索したいのは
[データ]範囲の【 1行目 】
すなわち
[データ].Resize(1)
なのでは?
-------------------------------------
転記部分も
.[B5] = [データ].Cells(no, 2)
というのは
[データ]範囲の第no【行】目の値をB5に転記する
記述になってます。
以上ご参考まで。
この回答への補足
その後、いろいろ試してみたところ、[データ].Range("AY1:AY65531"))と".Resize(1)をはずすと
うまく値をひろってきました。”AY65531はシートの最後の値65536から一番上の空白行3行とフィールド行の4行分をひいた値でうまくいきました。
いろいろありがとうございました。
これで一応解決(?)とさせていただきます。
ありがとうございます。本当ですね
訂正して、うまくいけば本当に単純なことだったんですね。
う~ん。でもやっぱり症状はかわらないので、MATCH関数を使わない別の方法でやってみます。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
VBAを使ってOutlookメール本文...
-
[C言語] コメント文字列を無視...
-
配列でデータが入っている要素...
-
ポケコン PC-E650 の...
-
Fortranで/(スラッシュ)を含...
-
携帯電話を水につけるとデータ...
-
シリアル通信におけるバイトデ...
-
VBAで「"」[']をエスケープする...
-
不規則なデータのfft処理
-
Excellで並べ替えについて(記号...
-
なぜ通りがけをすると昇順に整...
-
ウィンドウ枠の固定を行の2箇所...
-
【エクセル】測定時間がバラバ...
-
LoadPictureしたイメージデータ...
-
VB6でCSVの取込をする
-
カンマからスラッシュに
-
Excel VBAでのオートフィルター...
-
エクセルで2つの時系列のデー...
-
【USBメモリ】Sequential Writ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
この行は既に別のテーブルに属...
-
S9タイプからXタイプにデータ...
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
Accessで該当データにフラグを...
-
ユーザーフォームのテキストボ...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
[C言語] コメント文字列を無視...
-
VBAを使ってOutlookメール本文...
-
プログラミング python pandas ...
-
VBA 毎日取得するデータを順番...
-
<VB>String→Object
-
カンマからスラッシュに
おすすめ情報