• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで前々から気になっていることがあります。例えば、)

VBAで検索後にデータを更新や削除する方法は?

このQ&Aのポイント
  • VBAで連続検索可能な機能を実装し、検索結果を表示する方法が知りたいです。
  • データを更新や削除する場合、どのようにコードを記述すれば良いのか教えてください。
  • VBAでの検索後にデータを更新や削除する方法について、詳しい方にご教示いただけないでしょうか。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>などということは可能なのでしょうか、それとも更新や削除のソースは、 やって見ればわかりますが、エラーがでるだけです。 理由は、Sub xxx() ~ End Sub をセットで使用するのが文法で、文法違反でエラーが発生しますから、IF文のネストのようにプログラムの間に別のプログラムを記述する事はできません。 行うなら、サブルーチン(副プログラム)として関数のように任意の処理を実行します。 サブルーチンも関数と同様に引数を渡す事も可能です。 Call文に続けてプロシージャ名を記述すると、任意の処理をいつでも呼び出して使用する事が出来ます。 Call文無しで、プロシージャ名だけも同様に機能しますが、コードの可読性を考えると、Call文と共に記述する方が良いです。 Call 処理1 と書くのと、 処理1   と書いた場合では、コードを読んでいて突然に現れた”処理1”は何だろう?って事になると思います。 何かの変数宣言なのか、変数(式)の記述ミスなのか・・・?。 Sub MainModule() 'job1 IF C.value = "バイオ燃料" Then Call 削除 ElseIf C.value = "食料" Then Call 追加 EndIf MsgBox Fx1 End Sub Sub 削除() 'Job2 End Sub Sub 追加() 'Job3 End Sub Founction Fx1(int X) Fx1=X~2 End Founction http://www.excel-vba.net/excel-sub-001.html http://wiki.livedoor.jp/cafeboy1/d/VBA%20%A5%D7%A5%ED%A5%B7%A1%BC%A5%B8%A5%E3

crtlcdpdpel
質問者

お礼

やはり、そうですか。どうしても、検索ボタンを押して、表記されるデータを削除したい場合はソースの途中で、もし削除ボタンをクリックすれば、というのが必要なもので。 何か別の方法を考えて見ます。例えば、表記されるデータにユニーク番号を付けて、その番号を削除ボタンのソースで引数として取って、その番号のデータを削除するとか。 ありがとうございました。

その他の回答 (3)

回答No.4

はじめまして、通りすがりと申します。 ご質問の意図がよく見えないのですが。 コードとして可能かどうかのご質問なのでしょうか? それとも操作的に一般的なのはどちらのほうが 望ましいということなのでしょうか?また、更新/削除の処理を一つの関数として記述するべきかとい う質問なのでしょうか?  ・コードとして可能かどうかのご質問でしたら、どちらも可能です。どう記述しようと決まりはない   です。   ただ、削除と更新を同じボタンイベントで操作しようとした場合、アプリケーション側でどのよう   に判断(削除/更新)をさせようと考えているのでしょうか?  ・操作的に一般的なのはどちらのほうが望ましいかともうしますと、ご質問の内容だけでは判断でき   ないです。    たとえば、一つの画面に1件分のレコードについて更新するのでしたら、分けたほうが親切だと    思います。    (特に、削除は間違えて操作すると取り返しがつかない理由からはっきりと操作方法が分かれて     いる方がよいと思います。)    一つの画面に複数のレコードの内容を更新する場合には、削除/更新が一つのほうが解りやす    いと言えます。(ファイルとして、もっているのは複数レコードだと過程します)    この場合、5件中1件を削除したとしても操作者は削除という概念ではなく変更という感覚で操    作してると思います。このようなケースでは、更新/削除/登録は全て更新という一つのボタン    でまとめてファイルを更新すると思います。   ・更新/削除の処理を一つの関数として記述するべきかという質問なのでしょうか?     作成したソースは自分一人が未来永劫管理するとは限りません。    誰が見ても、そのソースの構造が理解できるように記述すべきだと思います。    あるイベントの記述をその下にだらだらと何kステップも記述すると、解析に時間を要しますし    何らかの変更または障害のための修正にも大幅に時間を取られてしまいます。    一つの関数はなるべく一つの目的毎に分けて記述する(構造的に)ことを心がけて作るべきです    上記例では、更新/削除の処理が一つの関数として記述しておりますがこの場合では、更新で    一つ削除で一つと関数を分けたほうがよろしいかと思いますが、実際には最っと多くの関数に分    けられると思います。最初の内はなれないと思いますが多くのプログラムを作成していくと構造    化することにより作業効率が格段に上がってきますので頑張って下さい。

crtlcdpdpel
質問者

お礼

詳細にわたり解説をいただきありがとうございます。参考にさせていただきます。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

>などということは可能なのでしょうか 可能と言うか、普通です 分岐処理ですよね イメージの仕方の問題です 質問のように書くと小難しいですが 次のようにすれば、よく見る処理ですよね Private Sub Button検索_Click() 何らかの処理コードが記述 if 条件削除 then 削除処理 elseif 条件更新 更新処理 end if End Sub サブルーチンを使用するなら Private Sub Button検索_Click() 何らかの処理コードが記述 if 条件削除 then call Button削除_Click elseif 条件更新 call Button更新_Click end if End Sub Private Sub Button削除_Click() 何らかの処理コードが記述 End Sub Private Sub Button更新_Click() 何らかの処理コードが記述 End Sub この様にすれば、ボタンでもマクロ実行できるよね こんな説明で分りますか? 参考まで

crtlcdpdpel
質問者

お礼

call文の事例を挙げていただきありがとうございます。スイマセン、質問がいたらなかったようです。条件削除とか、条件更新とかは、画面で表示されたものを見てユーザーが判断するもので、ソース上では条件が記述できないのです。ですから、subルーチンの中に、削除ソースを記述したsubが組み込めるかどうかをお尋ねした次第なのですお手数をかけしてすいません、ありがとうございました。

  • silverfd
  • ベストアンサー率57% (204/356)
回答No.1

Private Sub Button検索_Click() FindがAfterでなんたら   Form1.show  ’で、このForm1に更新・削除ボタンがあり、更新・削除の_Click()コードが書いてあるわけです End sub Functionは、この手のケースでは「しなければいけない」という性質になることはありません。 そうした方が便利な場合(戻り値を持たせる場合)に利用します。

crtlcdpdpel
質問者

お礼

お手数をおかけしました。参考にさせていただきます。ありがとうございました。

関連するQ&A