追い詰められているマクロ初心者です。
ネットで相談させていただき、下記マクロを完成する事が出来たのですが、
一部修正がうまくいかない為投稿させていただきました。
マクロ内容:エクセルファイルを指定し、選択したシートを現在のブックにコピーする
その際、不要な名前管理を削除してからコピー
修正したい箇所:指定したブックからコピーした際、シート参照の数式が入っていると外部参照になってしまう。
やってみた事:①(i)の前にarrayを入れる 外部参照のまま
②(i)を削除してみた 外部参照にならなくたったが際限なくシートをコピーし続けた
Sub 名前管理削除()
Dim myPath As String
Dim wb_A As Workbook
Dim i As Integer
'
myPath = Application.GetOpenFilename(("Excelファイル,*.xls*,CSVファイル,*.csv"), , "ブックを選択して下さい。")
If myPath = "False" Then Exit Sub
Set wb_A = Workbooks.Open(myPath)
Dim name As Object
For Each name In Names
If name.Visible = False Then
name.Visible = True
End If
Next
On Error Resume Next ' エラーを無視。(削除件数にカウントしてしまいます)
For Each nm In ActiveWorkbook.Names
If InStr(nm.Value, "#REF") > 0 Or _
InStr(nm.Value, "\") > 0 Then
nm.Delete
i = i + 1
Else
End If
Next nm
' 終了の表示
MsgBox "不要な名前定義を削除しました。" & vbCr & _
"削除定義件数=" & i & "件", vbInformation, cnsTitle
For i = 1 To wb_A.Sheets.Count
wb_A.Sheets(i).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Next
wb_A.Close False
End Sub
不勉強で申し訳ございませんが、何卒よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>やってみた事:①(i)の前にarrayを入れる
とありますが、「wb_A.Sheets(array(i))」と記述したのなら、参照が設定されてしまいます。
参照設定させないためには、全シートを一括でコピーさせる必要があり、そのためにarray()を使用します。
最後のForループで、いきなりコピーせず、1つずつシート名を取得します。
(配列に格納すると良いと思います)
その後に、array()の中に、取得した全てのシート名を列記すれば大丈夫です。
お忙しいところ本当にありがとうございました。ご回答いただきましたサンプルをもとに、じっくり修正してみたいと思います。本当にありがとうございました!
No.1
- 回答日時:
少し直してみましたが、マクロでは除去できないものがあります。
以前、それ専用のマクロを作ったことがありますが、基本的には、無理だったような気がします。
それで、エラーを出したら、エラーを出した数を数えるようにしました。 変数 j, k
具体的には、IFERROR という関数を使った名前定義は、セルの中に潜り込んで取れなくなったのだったという記憶があります。
不要な名前定義の削除について、このサンプルをとおして検討し直してみてください。
'//
Sub 名前管理削除r()
Dim myPath As String
Dim wb_A As Workbook
' Dim i As Integer
'
myPath = Application.GetOpenFilename(("Excelファイル,*.xls?,CSVファイル,*.csv"), , "ブックを選択して下さい。")
If myPath = "False" Then Exit Sub
Set wb_A = Workbooks.Open(myPath)
'------------------------
Dim n As Name
Dim nn As String
Dim j As Long, k As Long
Dim r As Range, b As Range
Const cnsTitle = "名前削除"
For Each n In wb_A.Names
n.Visible = True
nn = Mid(n.RefersToLocal, 2)
If IsError(Evaluate(n.Value)) Then
On Error Resume Next
n.Delete
If Err() <> 0 Then
k = k + 1
Else
j = j + 1
End If
On Error GoTo 0
Else
Set r = Range(nn)
If IsError(r) Then
n.Delete
j = j + 1
ElseIf InStr(nn, "\") > 0 Then
n.Delete
j = j + 1
End If
End If
Next
If j > 0 Or k > 0 Then
MsgBox "不要な名前定義を削除しました。" & vbCr & _
"削除定義件数=" & j & "件" & vbCrLf & _
"削除失敗件数 =" & k & "件", vbInformation, cnsTitle
End If
If j > 0 Or k > 0 Then
MsgBox "名前削除に失敗しましたので、中止します。", vbCritical
Exit Sub
End If
'----------------------------
For i = 1 To wb_A.Sheets.Count
wb_A.Sheets(i).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Next
wb_A.Close False
End Sub
お忙しいところご丁寧にありがとうございました。ご回答いただきましたサンプルを元にじっくりと検討したいと思います。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
【ExcelVBA】マクロの入ったシートをコピーしても新しいシート内でマクロを動作させるには?
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
Excelでブックをまたいでシートをコピーした時に、元のブックを参照させない方法
その他(Microsoft Office)
-
-
4
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
5
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
6
コピーしたファイルのマクロを実行すると前のファイルが開く
Access(アクセス)
-
7
EXCELで別のブックから式をコピーしたときにブック名がついてきてしまうのですが
Excel(エクセル)
-
8
【Excel】数式をそのまま他のシートにコピーする方法
その他(Microsoft Office)
-
9
Excel VBA シート保存時のリンク解除について
Excel(エクセル)
-
10
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
11
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
12
DATE型変数を初期化する方法
Visual Basic(VBA)
-
13
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
14
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
15
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
16
(Excel VBA)and,orについて
Excel(エクセル)
-
17
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
18
Excel2000/VBA:値と書式のみ貼り付けたい。
Excel(エクセル)
-
19
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
20
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マカフィーの完全削除を求む!
-
Windows10 スタートメニューに...
-
Windows police proをインスト...
-
ローカルディスク(B)? のアイ...
-
Acronis True Imageでセキュア...
-
Google Chromeでのクッキーの削除
-
ATOKからMS-IMEへ勝手に変わる
-
IE7で強制終了されてしまう...
-
ファイルの削除のエラーがでて...
-
OS上で異常な音がして、動作が...
-
サーバー証明書をインストール...
-
Excelが開けるということは、マ...
-
Androidのスマホを 使ってます...
-
Windows10で「映画&テレビ」を...
-
Lhaplus(ラプラス)でのzip解凍...
-
Wordで作成した文章は自分以外...
-
isoファイルにレイヤーブレーク...
-
vbsでexcel利用、”ActiveXコン...
-
特定の事をするとPCからビー(...
-
VBA LoadPictureで原因不明のエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マカフィー金庫 非表示または削...
-
他ブックからのシートコピーの...
-
削除できないファイルがあるん...
-
購入時からあるPCのアプリの削...
-
プリンタードライバーがアンイ...
-
TIFファイルを削除しようとすると
-
yahooのパーソナル天気の・・・
-
Outlook2003のエラー。。。
-
ローカルディスク(B)? のアイ...
-
ダウンロードに失敗したファイ...
-
エラー[0x80070570]でファイル...
-
ノートン体験版のアンインスト...
-
クリーンアップしても削除でき...
-
google日本語入力が削除できない
-
マカフィーの完全削除を求む!
-
Java(TM) 6 Updateが複数あるの...
-
過去に作ったホームページの削...
-
windous media format Runtime...
-
Dropboxからのメッセージ
-
Vistaのローカルプロファイルを...
おすすめ情報