• ベストアンサー
※ 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

  • エクセル2003VBA チェックボックスについて

    エクセル2003VBA チェックボックスについての質問です よろしくお願いします。    A         B 1 あああ       □ 2 いいい       □ 3 ううう        □ . . . . 35 かかか      □ 複数のチェックボックスをB列に配置し、 B1がオンになるとbook1を開く B2がオンになるとbook2を開く ・ ・ B35がオンになるとbook35を開く処理を行いたいのですが、 非常にコードが長くなってしまいます。 以下のコード以外で、 どのチェックボックスがオンになっているかを調べる方法が知りたいのですが、よろしくお願いします。 Private Sub CheckBox1_Click() book1を開く処理 End Sub Private Sub CheckBox2_Click() book2を開く処理 End Sub ・ ・ ・ Private Sub CheckBox35_Click() book35を開く処理 End Sub

  • VBA コンボボックスのコード記述位置について

    初心者です。初歩的な質問でお恥ずかしいのですが、コンボボックス用のコードを 記述するには「Private Sub UserForm_Initialize()」の下に記述するしかないのでしょうか。 例えば、縦長のユーザーフォームに上からコンボボックス1、コマンドボタン、コンボボックス2を 配置した場合、コードの記述をコンボボックス1の処理、コマンドボタンの処理、コンボボックス2の処理と、順番通りに記述することは出来るのでしょうか? 現在はこのようにコードを記述しています。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "赤色" .AddItem "青色" .AddItem "黄色" End With With ComboBox2 .AddItem "緑色" .AddItem "黒色" .AddItem "紫色" End With End Sub Private Sub CommandButton1_Click() MsgBox "テスト" End Sub 本当であれば、下記のように順番通りに記述したいです。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "赤色" .AddItem "青色" .AddItem "黄色" End With End Sub Private Sub CommandButton1_Click() MsgBox "テスト" End Sub With ComboBox2 .AddItem "緑色" .AddItem "黒色" .AddItem "紫色" End With End Sub With ComboBox2の上に、必要なコードを記述すればできるのでしょうか。 ご教示下さい。

  • VBA フォームに入力された数値を検索条件としたい

    ど素人ですので、よろしくお願いいたします。 VBAでユーザーフォームのテキストボックスに入力された数値○○~○○という条件でエクセルのデータをフィルターをかけて検索する構文を書きたいのですが、フォームのコードと標準モジュールのコードをどう繋げたらよいのかわかりません。よろしくお願いいたします。 以下が途中まで書いた構文です。 モジュールコード Sub 抽出() Range("a4").AutoFilter field:=1, Criteria1:=">=■1", _ operator:=xlAnd, Criteria2:="<■2" End Sub フォームコード Private Sub 実行_Click() ■1(○○以上の数値が入るテキストボックスの構文) ■2(○○未満の数値が入るテキストボックスの構文) End Sub 全く違っているのかも知れませんが、フォームは無視してモジュールの■に数値を直接入れると正しく検索します。

  • VBの記述。サブや関数のコードを束ねる

    VBの記述でsubやfunctionの上の単位でまとめる記述があったように思えますが、久々で思い出せません。 クラスの構成だとかではなくコメントレベルの操作です。 □フォームの操作関係  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load   ' code  End Sub  Private Sub Form1_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed   ' code  End Sub □ボタンの操作関係  Private Sub Button_Close_Click(sender As Object, e As EventArgs) Handles Button_Close.Click   Me.Close()  End Sub  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click   ' code  End Sub サブの頭のところクリックしたら、コードが見えたり隠れたりするように、 記述ブロックの頭のところをクリックすると、記述ブロック全体のコードが見えたり隠れたりしたような。。。 なんというヤツでしたっけ?

  • VBAでユーザーフォーム上に参照したファイルを開きたいのですが…

    EXCEL2003 SP3での質問です。 ユーザーフォームをVBAで作成中です。 主な機能は、対象月をコンボBOXで選択させた上で、 データ元とインプット先のファイルをテキストBOXに参照し、 実行ボタンクリックでデータ元からインプット先の該当月シートに データをコピーするといった感じです。 (データ元の該当シート内データを全てコピー&ペースト) 取り込み以降の処理はVBAを使用せずに作成しようと考えています。 質問は、取込みたいファイルの参照後の「ファイルを開いてデータをコピーする」処理がうまくいかず、 どのようにしたらよいか教えて頂けますでしょうか。 現在、以下のように記述していますが、 CommandButton3_Click()の部分の処理が分からずファイルが開けません。ご教授ください。 Private Sub CommandButton1_Click() With Application.FileDialog(msoFileDialogFilePicker) .Filters.Clear .Filters.Add "テキスト", "*.csv;*.txt", 1 If .Show = 0 Then Exit Sub Me.TextBox1.Text = .SelectedItems(1) End With End Sub Private Sub CommandButton2_Click() With Application.FileDialog(msoFileDialogFilePicker) .Filters.Clear .Filters.Add "テキスト", "*.csv;*.txt", 1 If .Show = 0 Then Exit Sub Me.TextBox2.Text = .SelectedItems(1) End With End Sub Private Sub CommandButton3_Click() Dim file_name As String If TextBox1.Text = "" Then MsgBox "ファイルが指定されていません", vbInformation ElseIf TextBox1.Text = "" Then file_name = TextBox1.Text = "" Shell "Workbooks.OpenText TextBox1.Value " End If End Sub Private Sub CommandButton4_Click() yesno = MsgBox("保存後、ファイルを閉じます。終了していいですか?", vbYesNo + vbQuestion, "Reportの終了") If yesno = vbYes Then ActiveWorkbook.Save ActiveWorkbook.Close Else End If End Sub

  • Buttonを押してもファンクションF1を押しても同じコードを実行したい

    VS.NETでの開発です。 初歩的な質問ですいません。 フォームにButton1を貼り付けて、以下でButton1がクリックされたときにコードが実行されますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub ファンクションF1を押しても、同じコードが実行されるようにしたいのですが、 どのようにコードを記述すればよろしいでしょうか?

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • VB2013でのプログラム作成でつまづきました

    初めまして ご質問です 会社にて、職場改善のため VB2013でプログラムを作成していますが PCに詳しいのが自分しかいなく、指名されました。。。 もちろん自作PCとか作れるぐらいですが プログラムなんてやったことないし困っています 職場にプログラム専門の方がいるので教育を受けていますが 2.3回教えてもらって  「windowsの電卓を作ろう」と言われました 電卓作成は、初心者用の題材らしいですが とりあえず教えてもらった事を駆使し まずは、テキストボックスとテキストボックスに数字を入れ その二つを +や-ボタンを押し =ボタンを押すと、3つ目のテキストボックスに表示させるという 簡単なプログラムは、なんとかできましたが windowsぽくすると 例 11 + 12 - 9 とテキストに表示され =ボタンを押すと 表示が消え 計算結果が表示されます いまの問題 ・整数と文字列を表示させ、計算だけさせる ・変数宣言、IF、Serectしか教わってない(それだけでできる言われた笑) ・まだ、いまいちわかっていないため 詳しく知りたい 無論、教えてもらったコードをそのまま使いたいわけじゃなく どーいう流れで、どーいう風にというのを理解したいです 結局は自分が理解して、少しずつやらないといけないので 詳しい方、教えてください。 現在なにもできてないコードです ここにどう埋めるか教えてほしいです ------------------------------------------------------------------------------ Option Explicit On Public Class Form Public oboe As String '押されたボタンが数値以外を覚える変数 Public befor As String '押されたボタンが数値の場合 覚える変数 Public anser As Integer ' 計算結果を保存する 変数 Public number As Integer '入力された数値を保存する 変数 Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '1 befor = "1" ans.Text &= "1" End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '2 befor = "2" ans.Text &= "2" End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '3 befor = "3" ans.Text &= "3" End Sub Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 'たし算 oboe = "+" ans.Text &= "+" number = befor + ans.Text End Sub Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click '掛け算 End Sub Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click '計算 End Sub Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click 'CLEAR End Sub Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click '引き算 End Sub Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click '割り算 End Sub Private Sub ans_TextChanged(sender As Object, e As EventArgs) Handles ans.TextChanged

  • ボタンをクリックしても空白をリストに追加しないようにしたい

    初心者ですのでよろしくお願いいたします。 以下のようなコードでボタンを押すとテキストボックスに入力してあるテキストをリストに登録したいのですが、空白の場合は追加したくありません。どのように書けばいいでしょうか? よろしくお願いいたします。 (ちなみにLabel3にはリストに登録された数が出ます) Public Class Form1 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(TextBox1.Text) TextBox1.Clear() Label3.Text = ListBox1.Items.Count End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Remove(ListBox1.SelectedItem) Label3.Text = ListBox1.Items.Count End Sub End Class

  • VBA

    エクセルのVBAで下記のようにすると テキストボックス1=10,テキストボックス2=20の値を入力すると セル"A1"に1020と表示されます。合計を求めるにはどうすればよろしいですか?  ―・*・/は、正しい答えが表示されます。 Private Sub InputBtn_Click() Worksheets("Sheet1").Range("A1") = TextBox1.Text + TextBox2.Text End Sub