• ベストアンサー

エクセルで名前を削除するときに印刷範囲を削除しない方法について

下記のマクロでエクセル内の名前を一括でいつも削除しています。印刷範囲を設定していると、「Print_Area」という名前が設定されており、これも削除されてしまうので、印刷範囲の設定がなくなってしまいます。 印刷範囲を消さないようにするにはどうしたらいいでしょうか? --- Sub NameDel() Dim nm As Name For Each nm In ActiveWorkbook.Names nm.Delete Next End Sub

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

例えばこんなマクロでも Sub NameDel() Dim nm As Name  For Each nm In ActiveWorkbook.Names   If InStr(nm.Name, "Print_Area") = 0 Then    nm.Delete   End If  Next End Sub でも過去の質問例を見ていると、エクセルが勝手に「定義」した「名前」が存在する場合があり、その「名前」をDeleteしようとするとエラーになるそうなので   On Error Resume Next を入れておく方がよいかもしれません

t29x0479
質問者

お礼

ありがとうございました。うまくいきました。

その他の回答 (2)

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

逆転の発想で、一旦全ての名前定義を削除・抹消し 残すべき印刷範囲の名前定義の1行を加えてはどうですか。 残すべきものがすくない場合はコードがすっきりすると思う。 コードは既回答のもので間に合う。 Sub NameDel() Dim nm As Name For Each nm In ActiveWorkbook.Names nm.Delete Next '-- Set rng = Range("A1:G20") With ActiveWorkbook .Names.Add Name:="Print_area", RefersTo:="=Sheet1!" & rng.Address End With End Sub なお後半は1行にまとめられる。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

たとえば、印刷範囲設定がSheet1なら下記。 Sub NameDel() Dim nm As Name For Each nm In ActiveWorkbook.Names If nm.Name <> "Sheet1!Print_Area" Then nm.Delete End If Next End Sub

t29x0479
質問者

お礼

ありがとうございます。シート名の自動取得方法がわからなくて、行き詰ってしまっています。

関連するQ&A

  • エクセルVBA 「名前の定義」について

    いつもお世話様です。エクセル2000での名前定義に関するVBA操作で疑問がありますのでよろしくお願い申し上げます。 (o。_。)oペコッ 以下のマクロで、あるエクセルのBOOKの名前の定義をすべて書き出してみました。 Sub Names_Check() Dim nm As Object Set sh = ActiveWorkbook.Worksheets.Add For Each nm In ActiveWorkbook.Names i = i + 1 sh.Cells(i, 1) = nm.Name sh.Cells(i, 2) = "'" & nm.RefersTo Next End Sub すると、なかにはセル範囲を参照していない名前の定義がけっこう見つかりました。 それらはよく見ると =○○○.xls!△△マクロ のようなマクロの名前を参照していました。 そんな名前の定義はつけた覚えが無いのですが、これは何でしょうか? なぜそのような名前の定義が出来てしまうのでしょうか? 次にセル範囲を参照していないこれらの名前定義を削除するため下記のマクロを書いてみたところ、「実行時エラー1004 その名前は正しくありません」というエラーがでてしまいます。 どう書いたら削除できるのでしょうか?(もちろん手動では削除できます。) Sub Del_NameRefQuestion() '不明な参照の名前定義削除 Dim nm As Object Dim mystr As String, ans As Integer For Each nm In ActiveWorkbook.Names If InStr(nm.RefersTo, "$") = False Then ans = MsgBox(nm.Name & "/" & nm.RefersTo, vbYesNo + vbQuestion, "削除しますか?") If ans = vbYes Then nm.Delete ’ここでエラー End If Next MsgBox "不明参照の名前定義削除完了", , " ( ̄ー ̄)v" End Sub

  • 名前を一括削除するマクロ

    次のようなマクロを組んで、エクセルファイル上の「名前」を一括削除しようとしています。 For Each objName In ActiveWorkbook.Names objName.Delete Next 実行すると 「実行時エラー"1004":その名前は正しくありません」 というエラーになってしまいます。 名前を一括削除する方法、またはエラーの解決方法がわかれば教えてください。 環境:WindowsXP+Excel2003

  • 範囲名定義の削除マクロ

    よろしくお願いします。 ブックに不定数の範囲名が設定されていて、ある複数の範囲名を除き、他はすべて削除するマクロを組もうと思い、以下の通りに組んでみました。 範囲名 A と Q 以外はすべて削除するつもりなのですが、 If 範囲名(i) <> "A" Or "Q" Then の行で「型が一致しません。」とエラーが出ます。 If 範囲名(i) <> "A" Then と Or を使わなければ、成功するのですが・・・。 Or はこの場合使えないということなんでしょうか? まったく違った組み方もあると思いますが、含めてご教授願います。 以下、自作マクロサンプル ----- Sub 不要範囲削除() Dim i As Integer Dim 範囲名(20) As String With ActiveWorkbook NC = .Names.Count For i = 1 To NC 範囲名(i) = .Names(i).Name Next For i = 1 To NC If 範囲名(i) <> "A" Or "Q" Then .Names(範囲名(i)).Delete End If Next End With End Sub

  • エクセルVBA名前の定義特定のシートの名前のみ削除

    いつもお世話になってます。 Excel2013のVBAより、特定のシート、例えばデータというシートに付けられた名前の定義を消す事は出来るでしょうか?他のシートの名前の定義は残しておきたいです。 ActiveSheet.Namesで指定しても消去されませんでした。 Sub Sample1() Dim n As Name For Each n In ActiveSheet.Names n.Delete Next End Sub

  • エクセル VBAで範囲に名前を定義する

    Sub 範囲import設定() Sheets("Format").Select Range("A1").Select Selection.CurrentRegion.Select ActiveWorkbook.Names.Add Name:="import", RefersToR1C1:="=Format!R1C1:R26C7" End Sub 「マクロの記録」でCTRL + * で全データ範囲を選択して"import"という名前を定義したところ 上のようなコードになりました。全データ範囲は毎回違うのですが、ごらんのようにセル番号 で指定されてしまいます。そのつど異なる全データ範囲に名前を定義するにはどうすればいいのでしょうか。 よろしくお願いします。

  • リストボックスに特定の複数のセル範囲名だけ表示させたい。

    リストボックスに特定の複数のセル範囲名だけ表示させたい。 印刷設定範囲等すべてのセル範囲設定名が以下の場合表示されます。 そこで特定のシート●のセル範囲名 「A 」「B」 「C」 だけリストボックスに表示させるにはどのようにしたらよいでしょうか? いろいろ試行してみましたがどうもうまくいきません。 Private Sub UserForm_Initialize() 'セルの範囲をリストボックスの選択項目として登録 Dim 名前 As Name For Each 名前 In ActiveWorkbook.Names Userform3.lstName.AddItem 名前.Name Next End Sub

  • Excel VBA 「名前の定義」で参照範囲RefersToR1C1に

    Excel VBA 「名前の定義」で参照範囲RefersToR1C1にString型を代入するとダブルクォーテーションが入ってしまう問題を解決するには? Excel VBAで、次のように「名前の定義」で参照範囲にString型を代入するとダブルクォーテーションが入ってしまいます。 Sub Macro0() Dim str As String Range("B162").Select str = "'" + Range("B162").Value + "'" + "!A1:Z65535" ActiveWorkbook.Names.Add Name:="name", RefersToR1C1:=str ActiveWorkbook.Names("tes1").Comment = "" End Sub これを実行しますと、「参照範囲」にダブルクォーテーション""が余計に入ってしまい、正しく参照できません。 このダブルクォーテーションをつけない方法はありますか?よろしくお願いします。

  • 名前の定義の一括削除したいんです。

    こんにちは。 先日、同一フォルダの複数ブックのワークシート名の変更とセルの幅の変更とセルへの色付けを教えていただきました。 そこから先に問題が発生して、毎月更新するファイルなので アクセスのクエリをエクスポートしていますが、エクスポート先の ブックに名前の定義が残っているため、ワークシート名を変更しても 前月のシートにデータを上書きしてしまいます。 なのでシートの名前の定義の削除を行いたいのですが、 Dim nm As Name  For Each nm In Application.Names   nm.Delete  Next のコードを以前の質問から検索して使用してみましたが nm.Delete のところで名前が正しくありませんと出てしまいます。 アクセスでエクスポートしてエクセルに張り付いた名前の定義は VBAでは削除できないのでしょうか? 最終的には同一フォルダの複数ブックのワークシートの 名前の定義をVBAで一括削除したいんですが・・・。 試してみたコードは下です。 結果はシート名(2)にシート名が変更されて 名前の定義は削除されていませんでした。 シート名を変更しているのでシート名と名前の定義の名称は 違っています。 Dim N As Object にしても結果は同様でした。 マクロの記録ではWorkbook.Names("AAA").Delete になっていて定義の名前を指定しないとダメなのかなとか 思っていたりします・・。 度々で申し訳ないですが、お知恵を頂戴できないでしょうか? Dim path$, wb As Workbook, wbName$ Dim ws As Worksheet, i& Dim nCount As Long Dim sVal As String Dim n As Name path = ThisWorkbook.path & "\" wbName = Dir(path & "*.xls") Do Until wbName = "" If wbName <> ThisWorkbook.Name Then Set wb = Workbooks.Open(path & wbName) i = 2 Set ws = wb.Worksheets(wb.Sheets.Count) If Trim(ws.Range("T2") & "月") <> "" Then On Error Resume Next ws.Name = ws.Range("T2") & "月" nCount = 1 sVal = ws.Cells(1, nCount).Value Do While sVal <> ""  ws.Columns(nCount).EntireColumn.AutoFit  ws.Cells(1, nCount).Interior.ColorIndex = 15  nCount = nCount + 1  sVal = ws.Cells(1, nCount).Value for each n in wb.names   n.delete  next    for each n in ws.names   n.delete  next Loop If Err.Number <> 0 Then ws.Name = ws.Range("T2") & "月" & " (" & i & ")" i = i + 1 End If On Error GoTo 0 End If DoEvents 'Next wb.Save wb.Close End If wbName = Dir Loop Set wb = Nothing Set ws = Nothing

  • ExcelvbaRefersToRange名前削除

    いつもお世話になります。 指定シートの名前を削除するコードを教えていただき、試していたのですが、あるブックの時エラーになり、 : RefersToRange : <アプリケーション定義またはオブジェクト定義のエラーです。> : Range というエラーになっていました。 ウィンドウで中身をみると、下記のコードのnの中のRefersToとかの値がまったく違うブックの名前になっており、最後に#REF!がついていたのでこれが原因なんだろうと思いますが、どうすればよいか全く分かりません。 一応、見えない名前の定義を消去するようなコードをかけて、#REF!になっていいる名前の定義を300ほどでてきたのを消しています。 リンクの編集のコマンドもグレーになっているので、リンクもないと思います。 もともと、そのブックを改造したんだと思います。 正常に動作するものは、きちんと自分のブックのシート名になっていました。 何か方法はありますでしょうか? Sub sumple() Dim n As Name For Each n In ActiveWorkbook.Names If n.RefersToRange.Parent.Name = "データ" Then n.Delete End If Next n End Sub

  • Excel VBA セル範囲に名前をつける

    Excel VBA独学中の初心者です。 セル範囲に名前をつける方法で以下の2つの方法があるようです。 (1) 同じように動作しますが違いは有るのでしょう。 (2) 本質的に考え方または内部動作は違うのでしょうか。 お分かりの方教えていただけますと助かります。 --------------- '方法1 Sub 名前の定義1() Range("sheet1!A2:B3").Name = "名前1" End Sub '方法2 Sub 名前の定義2() Range("A1").Select ActiveWorkbook.Names.Add Name:="名前2", _ RefersTo:="=sheet1!A2:B3" End Sub

専門家に質問してみよう