名簿から検索して別のシートに貼り付けるには?

Question 7.2 Previous Next
エクセル97VBAは、本当に初心者で、本を読んでも、 難しい言葉ばっかりで、私のやりたい事はどうしたらいいのか、どの用語が必要なのか、わかりません。 よろしければ、アドバイスをいただけますでしょうか。

会員管理をエクセル97VBAで、行おうとしています。
ユーザーフォーム1で入力の画面を作り、シート1にデータを転記する事は出来ました。
項目は、会員番号、名前、性別、生年月日、住所、電話番号・・・等です。 会員が辞めたり、住所変更する事があるので、ちょっと困っています。

① ユーザーフォームで会員を検索したい。 項目は、会員番号、名前、電話番号の3つのボックスを設け、どれか1つを入力し、 OKボタンを押すと、データが入っているシート1を見にいき、シート2に転記する。 検索の結果、該当するデータは、すべてシート2に転記される事。
② シート2のセルをどこでもいいからダブルクリックすると、2行目のデータが ユーザーフォーム2(入力した画面と同じ構成)に表示される。
③ コマンドボタン1(修正)を押すと、シート2のデータを上書きし、元のシート1の データも上書きをする。 そしてなおかつ、シート2に3行目のデータが存在したら、3行目をユーザーフォーム2に表示する。
④ ②で、フォームが表示され、コマンドボタン2(削除)を押すと、シート2のデータを削除し、 元のシート1のデータも削除される。

以上の事がやりたいのですが、コードの書き方を教えてください。(ちょっと図々しいですか?・・・)
よろしくお願いいたします。
Answer   Copyright (C) 1998.7.10 永井善王
どんなシステムにしたいのか実にはっきりと、つかんでみえますね。 「エクセル97VBAは初心者」でも、システム経験はお有りと思います。
私は、この質問のすべてにお答えすることはできないので、申し訳ないですが①を中心にして、②以下はアドバイスと させてください。 なお、以下の説明は Excel95で行いましたが、Excel97でも共通と思います。

[質問①の回答(例)]
あなたが転記に成功した「ユーザーフォーム1」とはメニューバーのデータのフォーム(※)のことかと思いますが、 ①の「ユーザーフォーム」が何か、私にはわかりません。
この回答は、シート2に「検索」ボタンを追加し、押されると検索項目を入力するためのダイアログを映し出す方法で進めました。 シート2-2 上図のH~J列はダイアログとリンクするセルで、任意のシートに設けれます。

ダイアログ 右図の「一時」シートは、抜き出し作業に使う白紙のシートです。

ダイアログボックスで会員番号、名前、電話番号のどれか1つを入力して「OK」ボタンを押すと、検索して結果をシート2のA~F列に表示することにします。

マクロの詳細は「
検索して別のシートに貼り付ける」を見てください。

サンプルマクロ 名簿管理」をダウンロード すれば 実際に動かして見れます。

[質問②のアドバイス]
ダブルクリックにより2行目のデータをユーザーフォーム2に表示するためには、複雑なマクロが必要になると思います。
Excelのヘルプのトピックの検索でキーワードに「on」と入力して「OnDoubleClick プロパティ」と「イベントが発生したときにプロシージャを実行する」 をじっくり研究してみてください。

あまりにも難しいようでしたら、代替案として、シート2の検索ボタンの隣りに「フォーム」ボタンを作っておき、押されるとフォーム(※)を映し出す方法が考えられます。

[質問③④のアドバイス]
修正または削除ボタンが押されるたびに、シート1に修正内容または削除を反映してシート2と共に上書きしようとすると、マクロが複雑になりそうですし、 作業中の不測のトラブルによりシート1が破壊される場合もあり得ましょう。
すべてのデータの処理が終るまでシート2だけで作業すれば安全です。 この場合は検索結果でシート2を作る段階で、検索キーを逆転させてシート1を検索し結果をシート3に貼り付けておきます。 そして、シート2の検索ボタンの隣りに「反映」ボタンを設けておき、それが押されたらシート1の値をクリアしてから、シート3とシート2の内容をシート1に転記します。

Excel VBA Macro