• 締切済み

エクセルVBA 初期処理

エクセルVBA初心者の中年オヤジです。 あるエクセルブックを開く毎、不必要なシートを削除するための方法を、出来るだけ具体的に教えて下さい。 あるエクセルブックに「検索条件入力・名称マスタ・検索結果」の固定3シートがあります。 検索条件を入力し検索ボタンを押下する事で、別シートから該当データを抽出するのですが、検索条件を変更し検索ボタンを押下する毎に「結果シート」が増えて行く仕様としています。 抽出部分や結果シートのコピー部分の作成、及びクリアボタンを押下した場合の「結果」シート削除のプログラミングは完了しましたが、このエクセルブックを開いた時に、初期処理として全「結果シート」を削除するにはどの様にしたら良いのか教えて下さい。 ブック利用者が「結果シート」を残したまま保存した場合を考慮し、初期処理としてこの全「結果シート」を削除したいのです。 宜しくお願い致します。

みんなの回答

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

コードを書いていたら既に回答が出てしまいましたね。 参考までに 既に説明の通り、 Thisworkbook に Private Sub Workbook_Open() End Sub の間に記述したコードがファイルを開いたときに実行されます。 そのほかにも色々なイベントが準備されています。 Private Sub Workbook_Open() Dim sh As Worksheet For Each sh In Sheets If sh.Name Like "*結果シート*" Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True End If Next End Sub 全てのシートをチェックして シートの名前に 結果シート という文字を含んでいれば 削除しますかのメッセージを出さない状態で いきなり削除 といった感じです。

manba01
質問者

お礼

hallo-2007 様 ご回答頂きありがとうございました。 VBA初心者の私には大変参考になりました。 ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>初期処理として イベントプロシジャという自動起動マクロを使います 適宜ネットを検索するなどして,知識を増やしておいてください >全「結果シート」を削除する 手順: VBE画面のプロジェクトエクスプローラで当該のブックのVBAProjectに含まれるThisWorkbookをWクリックする 現れたシートに下記のように記入する private sub workbook_Open()  dim w as worksheet  application.displayalerts = false  for each w in worksheets  if w.name <> "検索条件入力" and w.name <> "名称マスタ" then   w.delete  end if  next  application.displayalerts = true end sub エクセル画面に戻し,保存し,閉じて開き直すと自動実行する。 #補足 削除したいシート(複数)のシート名を的確に何某かの計算で判定できるなら,そのような判定をして該当するシートを削除しても勿論構いません。実際にアナタが書いて使っているマクロの動作結果として「どのようになっているのか」を見ながら,応用を考えてみてください。

manba01
質問者

お礼

keithin ありがとうございました。 削除自体はできていたのですが、教えて頂いた「workbook_Open()」を知りませんでした。 お蔭様で希望通りの仕様が完了しました。 ありがとうございました。

関連するQ&A

  • エクセルのVBAマクロで検索と結果表示(抽出)

    エクセルのVBAマクロで検索と結果表示(抽出)を行いたいです。 業務で使用している膨大なリストデータから、特定のキーワードで情報の絞り込みを行いたいのですが、上手くマクロが組めません。 機能としては、シート1で特定のキーワード(テキストボックスに)を入力し検索ボタンを押下すると、 シート2のリストデータから検索に引っかかったセルの"行"を、シート1にリストアップ(貼り付け)していくようなマクロを作りたいのです。 シート2にはB列~AH列xn行のリストデータがあり、シート2のK列のセル内から「シート1のテキストボックスで入力したキーワードを含む」検索を行い、 HITした行をシート1のA9の行から結果として表示を行いたいんです。 簡単に言えばオートフィルタ機能の部分一致版を作りたいのですが・・・。 (オートフィルタでは完全一致でしか抽出が出来ないので) そして、検索ボタンを押下すると前回結果はクリアしたいです。 ネット上のサンプル等も参考にしながらやってみたのですが上手く行きません。。。 どなたか上記のマクロ文をご教授願えないでしょうか。 必要な情報(シート2の特定の列)のみ表示させたいとも思いましたが、むずかしくて断念・・・。 もし可能でしたらこちらもお願い致します。 よろしくお願いいたします。

  • EXCELのVBAで出来ますか?

    WINXP、EXCEL2002を使用しています。 今、シート「入力」-シート「帳票」-シート「履歴」の3シートがあり、以下の処理を行う為の手続きの記述について、ご教授お願いします。 ●シート「入力」に対し、氏名、住所、電話番号を入力し、実行ボタンを押下する事により、⇒ シート「入力」の内容がシート「帳票」に転記され、(←この部分は、今回の質問範囲ではありません。)シート「帳票」が印刷され、同時に、シート「入力」のレコードをシート「履歴」に書き込み、終了する。 以降、シート「入力」に入力されたレコードが実行ボタン押下により、シート「履歴」に追加される仕組みを作成したい。 宜しくお願いします。

  • Excel VBA 2つのブック間での関数操作

    はじめまして。 以下のような処理ができるかどうか教えて下さい。 <環境> Windows XP Excel2002 SP-1 <内容> 2つのブックが用意されているとします。 【ブックA】  マスタと集計表が含まれる。  ユーザーはシート変更の権限、およびVBA変更権限を持たないため、  一切の変更はできない。 【ブックB】  一括印刷専用機能が含まれる。 処理としては、 (1)ブックBを起動させ、ブックBのSheet1にある「処理実行」ボタンを押下。 (2)(1)を実行すると、印刷部数を入力するInputBox表示。 (3)(2)で数値入力後、それをパラメータとして保持。 (4)ブックAを起動させ、その中に含まれる、   処理を実行するための関数を呼び出す。 ブックBより処理実行をかけ、ブックAに含まれる関数を遠隔で 実行できないかということです。 もしよい方法があったら教えて下さい。お願いします。

  • ● Excel VBAでの計算処理

    ● Excel VBAでの計算処理 超初心者です。いろいろ研究したのですが、よくわかりません。 VBAに詳しい方、是非をお教えください。VBAでやりたいことは以下のことです。 (1)あるブックのSheet1、A列の項目の特定のキーワード(例えば”数量”)を検索条件にしてデータを検索し、その行の複数の列(例えばAA列からCC列)の数値データに-1を掛けて正の数をすべて負の数にする。 (2)上記(1)の結果を別のブックの”計算結果”というシートに抽出する。 (3)元のブックには”数量”のほかさまざまなキーワードが設定されたデータが混在しています。また、計算の対象となる列のはじまりと終わりは特定できる。しかし、もとのブックの行数(データ件数)は特定できないとします。 イメージとしては、 元のブックにあるデータ) A列  B列  C列  ・・・・・ AA列 ・・・・ CC列 数量                5000     2376 数量                1234     9932 金額                30000    2099 結果が抽出されたブックのイメージ(結果は別のブックに抽出される) A列  B列  C列  ・・・・・ AA列 ・・・・ CC列 数量                -5000     -2376 数量                -1234     -9932

  • 【Excel-VBA】特定の処理をしている間、関数を止める方法について

    Excelで実現可能かどうか教えてください。 入力用Book1 ⇒ 入力シート1 入力用Book2 ⇒ 入力シート2 入力用Book3 ⇒ 入力シート3 集計用Book ⇒ 集計シート1、集計シート2、集計シート3、入力シート1、入力シート2、入力シート3 上記の4ファイルがあり、入力用Book1~3はそれぞれ5名ぐらいが 共有してデータを入力しています。 集計用Bookの集計シート1で入力シート1を集計したいので、VBAで 入力シート1~3を集計用Bookに取り込みたいと考えております。 ただ、集計シート1~3にはそれぞれSumproductを多用しており、 VBAで取込処理を行うと10分近くかかってしまいます。 集計シート1~3を削除して取込を行うと10秒ほどで完了します。 取込処理を行う間、各セルに入力している数式の処理を止めることは 可能でしょうか? 入力用シート1~3を扱うメンバーは定期的に変わるため、 全てをVBAで構築するのは躊躇われます。 なんとかsumifやsumproductを使用して、メンテナンス工数を 削減したいので、よろしくお願いいたします。

  • Excel VBAでの初期設定

    Excel VBA 初心者です。Excelは2013です。VBAでBookを開いたときにあるシートの初期設定をしたいと考えています。Activateイベントを使おうと思いましたがイベントが発生しないことがあるため質問しています。 例として以下のようなコードを記述したとき、sheet1以外を開いて保存している場合にはActivateイベントは発生しますが、sheet1を開いて保存している場合にはイベントが発生しないため初期設定の処理ができませんでした。 対応方法をお分かりの方ご教授いただけないでしょうか。 ============================= '"以下をThisWorkbook"に記述 Private Sub Workbook_Open() '②Worksheets("sheet2").Activate も入れれば Activateイベントは発生する Worksheets("sheet1").Activate '①もともと sheet1がActiveで保存されていた場合、Activateイベントは発生しなかった End Sub ============================= '"以下をsheet1"に記述 Private Sub Worksheet_Activate() '初期設定処理 MsgBox "sheet1の初期設定をしました" End Sub ============================= 宜しくお願いします。

  • エクセルで別ブックを検索するマクロ、VBA

    エクセルで以下の処理を行えるマクロを作成したいです。 当方、マクロについてほとんど知識がありません。 恐縮ですが、教えていただけると嬉しいです。 ・主にしたいこと  [検索]ブックで一致するコードを探して、  [結果]ブックの対応するコードの行にそれぞれの項目を返したい。 ●ブック1 [検索]  シートが12個あります(それぞれ、1、2、3…12というシート名=1~12月分)  ↓各シートの内容    A    B    C    D 1  氏名  数値  コード  内容 2  abc   111  SS1234 あいうえお 3  bcd   123  SS3456 かきくけこ ・ ・ ・ といった感じです。 12個のシートの中身はそれぞれ似たようなものですが、 「コード」や「内容」などは少しずつ違います。 ●ブック2 [結果]  ↓シートの内容    A    B    C    D 1  氏名  コード  内容  数値 2      SS3456 3      SS1234 ・ ・ ・ といった感じです。 (注)検索用ブックとは列の並びが異なっています。 ここでやりたいことの詳細ですが、 ・[結果]ブックの「コード」(B列)にコードを入力すると、  [検索]ブックで一致するコードを検索し、  A列「氏名」、C列「内容」、D列「数値」に、[検索]シートの内容を  自動的に表示させたい。  (ただし[結果]ブックに入力した「コード」は、[検索]ブックの1~12のうち、   どのシートにあるかわからない) ・入力したコードが見つからない場合は何も表示しない。 ということです。 最初VLOOKUP、MATCH等の関数で表示することを考えましたが、 シートが複数にまたがっているのと、 列の並び方が[検索][結果]ブックで違うのでわかりませんでした。 長くなってしまい申し訳ありませんが、どうかおしえてください。 よろしくお願いします。

  • Access-VBAでExcelファイルを作成する。

    こんにちわお世話になります。 「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。 AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。 Office97を使用しています。

  • ExcelのVBAで作りたいんです

    Excelのマクロで以下のようなものを作りたいのですが、調べても適当なものが見つからず、どのようなコードを書いたらいいのか分からないので有識者の方のお力をお貸しください。 Sheet1に検索ワードが入力された表を作成しておきます。(表自体は数十行程度で1列だけ) Sheet2にSheet1に書かれている検索ワードがあるかどうかを調べて、該当した場合にはその行を削除する。 もしくは別シートに移動する。 この作業をSheet1の検索ワード行数分自動で処理する。 Sheet2は数百行程度で複数列ありますが、検索ワードが該当さえすれば削除(移動)してしまって構いません。 また、話は変わりますがこのようなものも作りたいのです・・・。 CSVからの整形用マクロがあるのですが、整形処理が終了したら整形済みのシート(例としてSheet2~5)から1つのシートにまとめたい(Sheet1へ)と思っているのですが、データがどこまで入力されているか(Sheet2~5に)の判断と、Sheet1へのコピーでSheet1にどの行までデータが入っていてどの行から追加すればいいのかをお教えください。

  • Excelシートごとに処理

    あるExcelブックがあり、その中には「DUT40」「DUT63」「Sheet1」「Sheet2」「sheet3」というシートが存在します。 処理内容は、まず、「DUT40」について処理をさせ、結果をテキストファイルに保存した後に、テキストファイルの内容を別のExcelブックへ書き込みます。 次にに「DUT63」について処理を行います。 このようにして「DUT*」というシートのみを読み込み処理をさせたいのですが、 私の考えとしましては、シートをループさせたらどうかなと思うのですが、 他に何かよい方法はありますでしょうか?

専門家に質問してみよう