[[20231216152122]] 『別ファイルからシートコピーの上書きをするには』(タカ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別ファイルからシートコピーの上書きをするには』(タカ)

別のファイルから同じ名前のシートをコピーしてきた場合、シート名(2)というファイルが自動的に作成され、上書きがされません。
これを上書きする方法はありますでしょうか?
元シートを全選択して、コピー先の同名シートへ貼り付ければできることなのですが、仮にシート枚数が多かったりした場合、何か別のやり方で出来る方法はありますでしょうか?
皆様のお知恵をお借りしたいと思います。
何卒宜しくお願い致します。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


コピー先のシートを削除しておけばいいのでは?
(MK) 2023/12/16(土) 15:53:01

 いちいちシート名の重複をチェックするのが面倒ということであれば、マクロで
 シート名重複チェックをすればいいと思います。もちろんシートのコピーもマクロ
 でできます。
(MK) 2023/12/16(土) 15:55:15

 やってることは少し違いますが、参考になりそうな過去ログがありました。

[[20111030084857]] 『シート名同じ場合上書きする方法』(みみ)

 これはエラー処理を使う方法ですが、前もってコピー先ブックのシート名一覧
 を取得しておき重複チェックをするという方法もあります。
(MK) 2023/12/16(土) 16:02:19

考え方の一例です

Sub test()

 Dim wbpathA As String
 Dim wbpathB As String
 Dim wbA As Workbook
 Dim wbB As Workbook
 Dim ws As Worksheet
 Dim dic As Object

  Set dic = CreateObject("Scripting.Dictionary")

  wbpathA = "コピー元のブックのパス"
  wbpathB = "コピー先のブックのパス"

  'コピー元ブックを開く
  Set wbA = Workbooks.Open(wbpathA)

  'コピー元ブックのシート名をループ処理で取得
  For Each ws In wbA.Worksheets
   userdic.Add ws.Name, ws.Name
  Next ws

  'コピー先ブックを開く
  Set wbB = Workbooks.Open(wbpathB)

  'コピー先ブックのシートをループ処理
  For Each ws In wbB.Worksheets
   If dic.exists(ws.Name) Then シートを削除するコードを記述 'シート名が重複していたら
   'シートをコピーする記述
  Next ws

  wbA.Close

  'wbbを保存するなりなんなりする

  dic.RemoveAll

  Set dic = Nothing
  Set wbA = Nothing
  Set wbB = Nothing
End Sub
(MK) 2023/12/16(土) 16:20:50

 >userdic.Add ws.Name, ws.Name

 ↓へ修正願います。

 dic.Add ws.Name, ws.Name
(MK) 2023/12/16(土) 16:24:24

 >  'コピー元ブックのシート名をループ処理で取得

 dicに格納するのはコピー先ブックのシート一覧でした。
 私のコードは逆になってました。

 > 'コピー先ブックのシートをループ処理

 これもコピー元ブックのシートをループ処理、としなければなりません。
(MK) 2023/12/16(土) 17:05:19

修正版です。

Sub test2()

 Dim wbpathA As String
 Dim wbpathB As String
 Dim wbA As Workbook
 Dim wbB As Workbook
 Dim ws As Worksheet
 Dim dic As Object

  Set dic = CreateObject("Scripting.Dictionary")

  wbpathA = "コピー元のブックのパス"
  wbpathB = "コピー先のブックのパス"

  'コピー先ブックを開く
  Set wbB = Workbooks.Open(wbpathB)

  'コピー先ブックのシート名をループ処理で取得
  For Each ws In wbB.Worksheets
   dic.Add ws.Name, ws.Name
  Next ws

  'コピー元ブックを開く
  Set wbA = Workbooks.Open(wbpathA)

  'コピー元ブックのシートをループ処理
  For Each ws In wbA.Worksheets
   If dic.exists(ws.Name) Then コピー先ブックのシートを削除するコードを記述 'シート名が重複していたら
   'シートをコピーする記述
  Next ws

  wbA.Close 'コピー元ブックを閉じる

  'wbbを保存するなりなんなりする

  dic.RemoveAll
  Set dic = Nothing
  Set wbA = Nothing
  Set wbB = Nothing
End Sub
(MK) 2023/12/16(土) 17:25:59

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.