お品書き
書き直し中…
とりあえず、中へどうぞ
↓↓↓
スポンサーリンク

シートをコピーすると「名前 '___abc123456' は既に存在します」が大量に出る

PC/ネット
時々、入力するよう渡されたエクセルのファイルで、シートのコピーをしようとすると、領域名のエラーが大量に出てしまう事がありまして。また当たってしまったのでその処理の覚書き。(☆環境はWindows8.1 Excel2013 ですが、多分バージョン関係なく出ると思います。)

こんな感じのヤツ

exc_err_v2.gif

数個程度なら[はい(Y)]を押せばいいのですが、何百個(もしかしたら何千?※)になるとウンザリしてきますし、効率が悪くて仕事にならない。(※マクロを使ってカウントさせてみたら2万以上ありました・・・><)

なんでこうなるのか原因がいまいちよく分からないのですが、使用できない文字が領域名に使われているとか?

書類のテンプレートとして沢山の人・沢山のプロジェクトで使いまわされて上書きを繰り返されたファイルがなるとか?

「Y」キーを押しっぱなしにして気長に待てはいずれ終わりますが

※終わった後セルにYYYYYYYと入力されてしまいますので何もないセルを選択した状態でやりましょう(笑)

それでも大量にあると結構待たされます。シートを複数コピーしたい時など毎回出るのでは仕事にならない(-_-;)

この領域名を削除するには
スポンサーリンク

■方法1

[数式]→[名前の管理]で出るダイアログから削除できます

exc_err2.gif

削除できるはず・・・

出来た人はおめでとうございます。

しかぁし!

全部選択して削除ボタンを押すと、ダイアログ内も空白になり成功したように見えますが、ダイアログを閉じてもう一度[名前の管理]を開いてみると、できてない・・・

こんな簡単にできるなら、多分エラー出てないですよね・・・(+_+)

■方法2

検索してみると同様の問題で悩んでいる人は多いようで、

領域名を消してくれるマクロを作って下さっている方が居ます、有りがたい事です。

Server World

高密度商業地域

他にも、探すと結構たくさんありますね。

ところが・・・

以前のバージョンのエクセルはこれらのシンプルなマクロで削除できていたのですが、2013だからでしょうか?今回はこれらのマクロでもうまく行きませんでした。

■方法3

こちら(trash-area.com)で解説されてた方法

オプションの中にある「R1C1 参照形式を使用する(C)」のチェック状態を入れてやると、[名前の重複]と言うダイアログが出てきて、名前の変更を求めらます。

いちいち手動で修正してられませんので、ランダムな名前を自動的につけさせてしまうマクロを書いてくださっています。

やってみました⇒ できた!!

ように見えたのですが・・・

ファイルを保存しようとすると、エラーで落ちてしまう・・・(><)

ザンネ~ン!!

■方法4

もうしょうがない、力技で(笑)

シートの複写を使わずに、セルを全選択してコピー、新しいシートにペーストするとエラーが出ないようです。

新しいブックに張り付けてやれば、名前はついてこないで中身だけコピーできるようです。

シートの数が少なければこれで新しいファイルに保存しなおしてあげたほうが早いですね。

で、シートの数が多かったので面倒だったので、私もマクロを書いて処理しました。

すべてのシートを新しいブックの新しいシートに複写するマクロです。
Sub シート全て複写()
' エラー時の処理ルーチン
On Error GoTo Err
' クリップボードを空に
Application.CutCopyMode = False
' 現在のブック名取得
Dim SourceBook As String
SourceBook = ActiveWorkbook.Name
' 新規ブック作成
Workbooks.Add
' 新規ブック名取得
Dim TargetBook As String
TargetBook = ActiveWorkbook.Name
Windows(SourceBook).Activate
' ページ設定変数宣言
Dim strSheetName As String
Dim strPaperSize As String
Dim strOrientation As String
Dim intZoom As Integer
Dim strLeftMargin As String
Dim strRightMargin As String
Dim strTopMargin As String
Dim strBottomMargin As String
Dim strHeaderMargin As String
Dim strFooterMargin As String
Dim strView As String
Dim varPrintQuality As Variant
' 処理
For I = 1 To Worksheets.Count ' 繰り返し処理
Sheets(I).Select ' シート選択
' 現在シートの設定取得
strSheetName = ActiveSheet.Name
strPaperSize = ActiveSheet.PageSetup.PaperSize
strOrientation = ActiveSheet.PageSetup.Orientation
intZoom = ActiveSheet.PageSetup.Zoom
strLeftMargin = ActiveSheet.PageSetup.LeftMargin
strRightMargin = ActiveSheet.PageSetup.RightMargin
strTopMargin = ActiveSheet.PageSetup.TopMargin
strBottomMargin = ActiveSheet.PageSetup.BottomMargin
strHeaderMargin = ActiveSheet.PageSetup.HeaderMargin
strFooterMargin = ActiveSheet.PageSetup.FooterMargin
varPrintQuality = ActiveSheet.PageSetup.PrintQuality
strView = ActiveWindow.View
' セル全選択・コピー
Cells.Select
Selection.Copy
' Window切替
Windows(TargetBook).Activate
' 新規シート追加
Sheets.Add After:=ActiveSheet
' 貼り付け
ActiveSheet.Paste
' ページ設定
ActiveSheet.Name = strSheetName
ActiveSheet.PageSetup.PaperSize = strPaperSize
ActiveSheet.PageSetup.Orientation = strOrientation
ActiveSheet.PageSetup.Zoom = intZoom
ActiveSheet.PageSetup.LeftMargin = strLeftMargin
ActiveSheet.PageSetup.RightMargin = strRightMargin
ActiveSheet.PageSetup.TopMargin = strTopMargin
ActiveSheet.PageSetup.BottomMargin = strBottomMargin
ActiveSheet.PageSetup.HeaderMargin = strHeaderMargin
ActiveSheet.PageSetup.FooterMargin = strFooterMargin
ActiveSheet.PageSetup.PrintQuality = varPrintQuality
ActiveWindow.View = strView
' A1セル選択
Range("A1").Select
' 元ファイル選択・A1セル選択
Windows(SourceBook).Activate
Range("A1").Select
Next
Err:
Resume Next ' エラーの場合も次の処理続行
End Sub
これでなんとか、無事クリーンなファイルにすることができました。\(^o^)/

※やってみたら、一部書式の設定(印刷範囲・行の高さ等)が崩れるという問題点があった・・・orz

セルの全選択からの書式のコピペでは、上記書式がコピーされないんですね

行を選択して書式のコピー→貼り付けなら反映されることが判明したので、取り急ぎ、応急修理で、マクロで全シート回してみた

(後で時間があれば上記マクロと合成しよう)
Sub シート全て複写()
' エラー時の処理ルーチン
On Error GoTo Err
' クリップボードを空に
Application.CutCopyMode = False

For I = 1 To Worksheets.Count ' 繰り返し処理

Windows("コピー元のファイル名").Activate

Sheets(I).Select ' シート選択

    Rows("1:150").Select
    Selection.Copy
    
Windows("コピー先のファイル名").Activate
Sheets(I).Select ' シート選択

    Rows("1:150").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

Next
Err:
Resume Next ' エラーの場合も次の処理続行
End Sub
取り急ぎの応急処置なので、「コピー元ファイル名」「コピー先ファイル名」は任意に直打ち

コピーする行数は、必要に応じて修正

最終行取得マクロはさらにややこしくなるのでやめ(笑)
時間ができたらあとで組み込もう・・・

印刷範囲は手動で設定しなおし。。。

コメント