- ベストアンサー
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”)がうまくいきません。 教えてください。 宜しくお願いします。
- みんなの回答 (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
その他の回答 (3)
- masnoske
- ベストアンサー率35% (67/190)
別ブックのシートを選択するには、以下の手順です。 (1)別ブックをアクティブにする。 (2)該当シートを選択する。 Workbooks("book.xlsx").Activate Sheets("サンプル1").Select
お礼
ありがとうございます。
- kkkkkm
- ベストアンサー率66% (1734/2604)
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
お礼
ありがとうございます。 結果はBook.xlsxのサンプル1の左にコピペしてしまいます。 説明不足ですみません。 (1)test.xlsm(今回のコードを記述する) (2)Book.xlsxを開く(開かないとエラーになる) (3)マクロを実行 (4)Book.xlsxのサンプル1シートよりコピーする (5)test.xlsmの一番左側にコピーしたシートにA1セルに記載している名前を付けてペースト といったものです。 宜しくお願いします。
- kkkkkm
- ベストアンサー率66% (1734/2604)
コードがどこに書かれているのか、また、A1がどのシートのA1なのかわかりませんが Dim sh_name As String sh_name = Range("A1") ActiveSheet.Copy Before:=ActiveSheet ActiveSheet.Name = sh_name
お礼
コメントありがとうございます。 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」というシートを選択 そのコードが分からないのです。 教えてください。
補足
追記です。 一番左にコピペする「Before:=ActiveSheet」ですが、一番左ではなく、アクティブシートの隣になってしまいます。一番左にするにはどうしたら良いでしょうか?
お礼
ありがとうございます。 うまくいきました。