• ベストアンサー

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

下記のマクロでエクセル内の名前を一括でいつも削除しています。印刷範囲を設定していると、「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/17070)
回答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