• ベストアンサー

VBA シートをコピーして名前を変更する

Sub サンプル() Dim sh_name As String sh_name = Range("A1") ActiveSheet.Copy Before:=ActiveSheet End Sub (1)別ブック「book.xlsx」の「サンプル1」というシートを選択 (2)A1セルに記載している名前に変更する(テスト) (3)一番左にペースト という流れをやってみたいのですが、Range("A1”)がうまくいきません。 教えてください。 宜しくお願いします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.4

Book.xlsxをアクティブにしたらちらちらするのでアクティブにせずに実行します。アクティブにしたい場合' Wb1.Activateを有効にしてください。 Sub サンプル() Dim sh_name As String Dim Wb1 As Workbook, Wb2 As Workbook Set Wb1 = Workbooks("Book.xlsx") Set Wb2 = ThisWorkbook ' Wb1.Activate With Wb1.Worksheets("サンプル1") sh_name = .Range("A1") .Copy Before:=Wb2.Worksheets(1) ActiveSheet.Name = sh_name End With Set Wb1 = Nothing Set Wb2= Nothing End Sub

nkmyr
質問者

お礼

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

その他の回答 (3)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.3

別ブックのシートを選択するには、以下の手順です。 (1)別ブックをアクティブにする。 (2)該当シートを選択する。 Workbooks("book.xlsx").Activate Sheets("サンプル1").Select

nkmyr
質問者

お礼

ありがとうございます。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.2

ActiveSheet.Copy コピーするシートが決まっている場合、どのシートがその時点でアクティブになっているのかあいまいな場合は、シート名を明記したほうが間違いがないと思います。 Sub サンプル() Dim sh_name As String Dim Wb As Workbook Set Wb = Workbooks("Book.xlsx") Wb.Activate sh_name = Wb.Worksheets("サンプル1").Range("A1") ActiveSheet.Copy Before:=Wb.Worksheets(1) ActiveSheet.Name = sh_name Set Wb = Nothing End Sub

nkmyr
質問者

お礼

ありがとうございます。 結果はBook.xlsxのサンプル1の左にコピペしてしまいます。 説明不足ですみません。 (1)test.xlsm(今回のコードを記述する) (2)Book.xlsxを開く(開かないとエラーになる) (3)マクロを実行 (4)Book.xlsxのサンプル1シートよりコピーする (5)test.xlsmの一番左側にコピーしたシートにA1セルに記載している名前を付けてペースト といったものです。 宜しくお願いします。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.1

コードがどこに書かれているのか、また、A1がどのシートのA1なのかわかりませんが Dim sh_name As String sh_name = Range("A1") ActiveSheet.Copy Before:=ActiveSheet ActiveSheet.Name = sh_name

nkmyr
質問者

お礼

コメントありがとうございます。 ActiveSheet.Name = sh_nameが抜けていました。うまくいきました。 「また、A1がどのシートのA1なのか」 そのコードを追加しました。 Sub サンプル() Dim sh_name As String sh_name = Worksheets("サンプル1").Range("A1") ActiveSheet.Copy Before:=ActiveSheet ActiveSheet.Name = sh_name End Sub ですが、(1)別ブック「book.xlsx」の「サンプル1」というシートを選択 そのコードが分からないのです。 教えてください。

nkmyr
質問者

補足

追記です。 一番左にコピペする「Before:=ActiveSheet」ですが、一番左ではなく、アクティブシートの隣になってしまいます。一番左にするにはどうしたら良いでしょうか?

関連するQ&A

専門家に質問してみよう