- ベストアンサー
VBAで検索フォームから行の削除を行う方法
- VBA初心者が顧客データベースで検索フォームから行を削除する方法について困っています。職場での運用でいくつかの問題が発生しており、名前が完全一致じゃない場合や間違った検索がエラーになるなどの問題があります。したいことは名前の半角全角スペースの違いでもヒットするようにすることや、名字や名前だけでも検索できるようにすることです。その他の間違いはエラーメッセージで表示するなどの対処方法も考えています。
- 質問者はVBA初心者であり、顧客データベースで検索フォームから行を削除する方法に困っています。運用時に名前の一致しない場合や間違って検索した場合にエラーが発生しています。したいことは名前の半角全角スペースの違いでもヒットするようにしたり、名字や名前だけでも検索可能にすることです。その他の間違いについてはエラーメッセージを表示するなどの対処方法を考えています。
- VBA初心者が顧客データベースで検索フォームから行を削除する方法について質問しています。職場での運用時にいくつかの問題が発生しており、名前の一致しない場合や間違って検索した場合にエラーが発生しているようです。したいことは名前の半角全角スペースの違いでも検索できるようにすることや、名字や名前だけでも検索可能にすることです。その他の間違いについてはエラーメッセージを表示するなどの対処方法を検討しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
いろいろ言いたいことは山ほどあります。 正直に言って要件と実データをもらって 一から作らせてもらったほうが、 良いものが出来るでしょう。 しかし、そうも言っていられないので、 気がついた点を少々挙げさせていただきます。 >>r = Columns(3).Find(TextBox1.Value).Row 使い捨てのカウンタ変数など以外でアルファベット一文字の 使用はしないで、どういう種類の値を代入する変数か 分かる名前を使用しましょう。 >>Range("B" & r).Select >>Range(Selection, Selection.End(xlToRight)).Cut ここだけではないですが、 selectしてselectionを指定するのは単に二度手間です。 直接Rangeに対象セルを書きましょう。 >>苗字と名前の間が全角スペースでエラー どんなエラーか知りません。しかし、エラー処理を書くことは勿論 ですが、想定範囲なら事前に(全角→半角)に変換しましょう。 ヒント:replace >>名字だけ名前だけでもヒットできればしたい。 ヒント:instr >>それ以外の間違いはMsgBox"見つかりません”でも良い。 単にif文で処理でしょう >>最後に念押しで○○を削除しますか?まで出してみたい。 出すのは簡単でしょう? 重要なのは「はい、いいえ」などのクリックを、 msgboxの戻り値で分岐させる事ですね。 >>そもそも検索する値は読み仮名で良いのか 同音異義語・同姓同名・加えて生年月日も同じ人がいる・・ などをどこまで勘案するかは要件に属することで、 プログラムの設計や実装以前に決めておくべきことです。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
>検索フォームから ユーザーフォームを使うということでしょうが、VBAには、もともと当初では、検索フォームというものはありません。自分で作るのです。最低では、退職者の顧客番号をInputBoxに入力させる、手もあります。 普通に設計されるのは、ユーザーフォームにテキストボックスなどを設けて、そこに顧客IDなどのキーなどを入力させて、その文字列(顧客番号など)で現マスターデータシートの該当行をVBAで探し、その行を抹消するか、その行の所定の列に退職サインを立てるのです。普通は、退社(会)者の登録には、顧客キーしか聞かないで済むはずです。 >私の言う「該当行を探し」は、VBAのFindメソッドを使えばよい。これはGoogleで「VBA Find」で照会すればたくさん記事が出ます。 退職者データの登録の場合は、1つの顧客番号に2つ以上該当は見込まないので、 Set x=(セル範囲=列指定でしょう).Find(顧客番号)で、行はその x.Row捉まえられます。 見つからない場合=Nothingの処理さえして置けばよいかと思う。 == 質問文を読んで、全般的にVBAのコード・文法以外に、もっと応用例を学ぶか、エクセルのデータ処理の大きい・広いことを、教えてもらう指導者を得ないと、実践では、行き詰まるか、時間が掛かるか、へんてこな仕組みのものを作ってしまうような危なさを感じます。
お礼
親切にありがとうございます! そうですユーザーフォームにテキストボックス配置し、そこに顧客の読み方(ひらがな)で調べる仕組みです。電話番号、顧客番号がないので読み方が1番良いかなと思いそうしました。 そうなんです。 おそらくみる人が見たらカードもメチャクチャだと思います。マスターするならばどこがで習おうともいます。
- tanakanono
- ベストアンサー率24% (134/553)
検索フォームを作って、部分一致で削除候補を出し、候補から選択されたデータを消す。 名字だけでヒットさせて間違って消したら面倒ですよ。複数一致したらどうするんですか? そもそもcopy,cut,pasteなんて使わないほうがいいです。 例えば、paste前にユーザーがnotepadを開いてたとして、文字をコピーしたら、あなたが実行したpasteでnotepadの文字がpasteされますよ。 もう少しリスクを考えて構想設計からやり直したほうが良いと思います。
お礼
ご回答ありがとうございました。 まだまだ未熟で分からない事だらけでした。 ありがとうございました。
お礼
ご回答ありがとうございます。 初心者すぎる質問でもう少し勉強してからのほうが良いですね。すいませんでした。