• ベストアンサー

エクセルVBAで、関数で使用されていない名前だけを削除したい

Excel97,Windows98SEを使用しています。 セル範囲に名前をつけて、それを関数で引数として使っています。 よくシート削除などをするので、全く使わなくなった名前がたくさん出来てしまうのですが、 例えばブックを開いた時(Private Sub Workbook_Open()などで)に、ブック内でまったく使用されていない名前だけを削除する、というようなことはできますでしょうか? 色々考えてはみたのですが方法が思いつかず、質問させていただきました。 ご存知の方、どうぞよろしくお願いいたします。

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

  • ベストアンサー
noname#6303
noname#6303
回答No.2

Excel 2000 で動作確認しました(97 では行っていません)。 もしバグっていても責任は終えませんので、 使用するとしたら、事前にテストをお願いします。 Private Sub Workbook_Open() Dim n As Object For Each n In ActiveWorkbook.Names If n.RefersTo Like "*REF!*" Then n.Delete Next n End Sub

takahiro_
質問者

お礼

ご回答どうもありがとうございます。 範囲に「REF!」の入った名前を削除していったらいいんですね…。気がつきませんでした! 使わせていただいています。 どうもありがとうございました。またわからないことがありましたらよろしくお願いいたします。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

全く歯が立ちませんのですが、下記だけ思いつきました。 お役に立てば。 Sub test05() For i = 1 To Names.Count n = ActiveWorkbook.Names(i).Name m = ActiveWorkbook.Names(i).Value Cells(i, "c") = n Cells(i, "d") = "'" & m Next i End Sub ブック内の名前リストと範囲が紙に打ち出せます。 最悪サイトチェックで不要分削除するとか。 列c、dは適当に変える。

takahiro_
質問者

お礼

ご回答どうもありがとうございます。 名前削除用の作業列を作ればよかったんですね! 今回は#2の方のを使わせていただいたのですが、また別の機会に使わせていただきますね。 またわからないことがありましたらよろしくお願いいたします。 ありがとうございました。

関連するQ&A

  • excel vba 選択されたセルの範囲を別のセル

    excel vba 選択されたセルの範囲を別のセルに書き込みたい。 お世話になっております。 乱筆乱文お許し下さい。 EXCEL VBAについてですが、或るブックを閉じる時(Private Sub Workbook_BeforeClose(Cancel As Boolean))にその時点でACTIVEなsheetの名前を指定シートの指定セルに書き込み、そのブックを開く時(Private Sub Workbook_Open())に指定シートの指定セルの値の名前sheetをACTIVEにすることは出来たのですが、もう一歩進んで、 ブックを閉じる時(Private Sub Workbook_BeforeClose(Cancel As Boolean))にその時点でselectされているcellの範囲(単一セル・複数セル共に、名前がついていたら名前、ついていなければrangeを表す文字列)を指定シートの指定セルに書き込み、そのブックを開く時(Private Sub Workbook_Open())に指定シートの指定セルの値の名前cell範囲をselectするようなことがやりたいのですが、私の検索の仕方が下手で、なかなか出てきません。どなたかご教示下さい。よろしくお願いします。

  • エクセルの名前について教えてください。

    エクセルのセル範囲の名前について質問です。 エクセルのシートでセルの範囲を選択して、左上の名前ボックスに直接名前を入力すると名前が定義できます。しかし、別のセル範囲を選択して、同じ(既に定義されている)名前を定義しようとすると、定義済みの範囲にアクティブセルが飛ばされます。異なるシートで同じ名前をつけようとしても同じ結果になります。名前がついたセル範囲を移動させようと、カットペをすると移動します。もしくは、挿入-名前-定義で名前を削除してから名前ボックスで定義する必要があります。ここで、質問です。しかし、名前が定義されたシートをタブ(一番下のシートの名前が書かれていて選択する部分)を右クリックしてシートのコピーをすると同じ名前がついた異なるセルが出来てしまいます。 色々試してみると、前に、imogasi様にご指導頂いた。名前は、ブックレベルとシートレベルとであるとの内容にからんだことだと思いました。(以下にその時の転記) >名前定義はブック単位とシート単位の2つがあります。上記の2つが >その例です。 シート上でも、=Book1!名前1や='Sheet1'!名前1って出てきました。 考え方として次のような考え方で宜しいのでしょうか? 名前ボックスでは、ブックレベルでの名前定義になる。 シートレベルでの定義は、エクセルのシートからは出来ない? bookレベルを指す時は、Book1!と''でくくらない Sheetレベルを指す時は、'Sheet1'!とシート名の部分を''でくくる 同じセル範囲を、同じ名前であっても、シートレベルとブックレベルで重複定義できる? vbaで使用する時は、同じく、'Sheet1'でくくる どなたか?詳しいかた教えて頂けないでしょうか?宜しくお願いします。

  • Excel ユーザー定義関数入力方法

    ユーザー定義関数はその関数を作ったファイルでないと セルに直接入力しても関数は出ないのですか 例えば Book1.xlsxとmacro.xlsmというファイルがあります。 macro.xlsmファイルにユーザー定義関数を作成しました。 macro.xlsmだとセルに直接入力しても作成した関数が候補が出ます。 Book1.xlsxだと関数の挿入から見つけないといけません。 macro.xlsmのファイルのThisWorkbookには Private Sub Workbook_Open() Application.MacroOptions _ Macro:="aaa", _ Description:="説明" End Sub と入ってます。

  • VBAにおけるセルの名前の参照方法

    現在、Aシート、Bシートがあり、BシートのA1セルに test という名前を付けました。(範囲はブック) Aシートが再計算されれば、BシートのA1セルをメッセージボックスで表示したいのですが、調べましたが、よくわかりませんでしたので、詳しい方教えてください。 範囲はブックになっているし、他に同じセルの名前もつけれないようになっているので、 このような記述で大丈夫かと思いましたがエラーが出でしまいました。 なぜでしょうか?やはりわざわざ毎回シート名から記述が必要なのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range)      MsgBox (Range("test").Value) End Sub このようにシート名から書けば表示されました。 Private Sub Worksheet_Change(ByVal Target As Range)      MsgBox (Worksheets("B").Range("test").Value) End Sub

  • Excel VBA ブックが閉じれない

    Excel2016を使用してVBAを使用しています。 VBA初心者ですが、よろしくお願いします。 質問内容は以下になります。 EXCEL起動と同時にUserFormを表示させ、UserForm上のコマンドボタンから ダイアログボックスを表示し、他ブックを開く処理なのですが、 他ブックを開くまでは問題ないのですが、他ブックが閉じれない状態になります。 Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub UserForm_Initialize()  各種処理 End Sub Private Sub CommandButton1_Click() Dim OpenFileName As String SetCurrentDirectory (Worksheets(1).Cells(11, 3)) OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open OpenFileName End Sub UserFormを閉じると開いたブックも閉じることが可能です。 タスクマネージャーから強制的に終了しようとすると、以下メッセージが出ます。 ”開いているダイアログボックスがあるため、Microsoft Excel を終了できません。[OK]をクリックしてから、Microsoft Excelに切り替えてダイアログを閉じて下さい。" UserFormを閉じないで他ブックを閉じるには、どうすれば宜しいでしょうか。 申し訳ございませんがご教授下さい、よろしくお願いいたします。

  • エクセルのマクロ イベントプロシージャについて

    エクセルのマクロについて教えて下さい 今 book1を開いたら動くマクロを組んでいます 「Private Sub Workbook_Open()」を 使って 内容は この中で別のブック(仮にbook100とします) を開いてその中のデータ (すでに選択してあります) をコピーして book1に貼り付けて book100を閉じる。 という作業なのですが book100を選択しようとするとエラーが起きてしまいます。 Private Sub Workbook_Open() の中では違うブックに対して 作業ができないようになっているのでしょうか? よかったら御教授ください

  • EXCEL97のVBAのトラブル

    EXCEL97のVBAで誤ったプログラミングをしたため、 大切なファイルが開けなくなってしまいました。 "Private Sub Workbook_Open()"のところです。 Sheetが開ければ、他はすべて消えても構わないのですが、 なにか開く方法はないでしょうか? 強制終了になってしまいます。詳細には "EXCEL のページ違反です。 モジュール : EXCEL.EXE、アドレス : 0137:3009a7fd・・・"と出ます。

  • エクセルVBAで、ユーザーフォーム初期化時のエラー

    Excel97を使用しています。 コンボボックスにリストをセットしようとして、 Private Sub Workbook_Open() Range("A1:A5").Name = "社員" 'セル範囲はブックを開く度に変わります End Sub Private Sub UserForm_Initialize() ComboBox1.ListFillRange = "社員" End Sub というコードを書いたのですが、 「コンパイルエラー:メソッドまたはデータメンバが見つかりません。」というエラーが出てきて、 .ListFillRange = の部分が選択されてしまいます。 ListFillRange を RowSource に変更するとエラーは出ないのですが、RowSource で設定してしまうと、後にリストが変更できないと教わりましたので、これ以外でコンボボックスにリストをセットする方法がありましたら教えて下さい。 プロパティ/メソッドの一覧にListFillRangeが見当たらなかったので、もしかしたらエクセル97では使えないのでしょうか? どうぞよろしくお願いします。

  • Office2010のVBAファイル自動オープン

    VBAの自動オープンで対象ファイルの開き方によって VBAが正常に動かないので質問させt下さい。 ネットワーク上のサーバーである AD-1から開くのとネットワークドライブPから開くのとでは Excelの名前の管理機能が動作しません。 Private Sub Workbook_Open() Workbooks.Open Filename:= _ "\\ad1\共通\aaaa.xlsx" Worksheets("Sheet1").Activate と Private Sub Workbook_Open() Workbooks.Open Filename:= _ "P:\共通\aaaa.xlsx" Worksheets("Sheet1").Activate 両方とも稼働させる方法はあるのでしょうか? よろしくお願いします。 End Sub

  • エクセル VBAについて

    Private Sub Workbook_Open() プロシージャーにてapplication.visible=falseを記述し、Userformのみ表示している状態で、違うエクセルファイルを開くと、表示されません。違うエクセルファイルを開いた時に自動でエクセルが表示できるような対象法を教えてください。お願いします。

専門家に質問してみよう