• ベストアンサー

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
  • ベストアンサー率65% (1606/2443)
回答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
  • ベストアンサー率65% (1606/2443)
回答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
  • ベストアンサー率65% (1606/2443)
回答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

  • VBA ワークシートオブジェクトがうまく使えない

    以下のサブプロシージャ、動きません。 Sub main() Dim Thissheet As Worksheet Set Thissheet = ActiveSheet Workbooks.Open Filename:="Book2.xlsx" Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) Range("B1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 2) ActiveWindow.Close End Sub 機能:Book1.xlsxで上記マクロを起動すると、Book2.xlsxを開きセルの一部ををBook1にコピーし、閉じる エラーメッセージ: コンパイルエラー メソッドまたはデータ メンバーが見つかりません。 Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) この行のThissheet.で引っかかります。 ちなみにThissheetの代わりにWorksheets(1)を用いるとうまくいきます。 Thissheetを用いた場合、何がマズイのでしょうか? 以下の認識で書いてますが、誤りあるでしょうか? ThisWorkbook=マクロが納められているワークブック、つまりBook1.xlsx Activesheet= 行を実行した時にアクティブになっているワークシート、ここではBook1.xlsxのマクロ起動時のワークシート

  • VBA シートを別ブックの先頭・一番左にコピー

    このシート(例Sheet1)を別ブックの先頭・一番左にコピーしたいのです。 下記のコードは一番右にコピーです。 宜しくお願いします。 Sub SheetCopy5() Dim bk As Workbook  Set bk = Workbooks("コピー先のブック.xlsx")  ActiveSheet.Copy _    After:=bk.Sheets(bk.Sheets.Count) End Sub

  • VBAでsheetのコピー

    ご回答有難う御座いました。補足説明を致します。動作するとこまでは、出来たのですが、一点変更しました。:=のコピーの所でデバッグすると、エラーになるので、=だけにしました。すると動作するのですが、新しいsheetの名前が、コピー元のsheet名になります。そして、MsgBoxを入れると、エラーになります。また、1sheetだけがコピーされます。大変恐縮ですが、もう一度ご教授願います。補足説明なりますが、やりたい事は、拡張子がxlsmの中に名前のついた10個のsheetがあります。この10個のsheetを拡張子がxlsxのBookにコピーしたいのですが、このBook1のsheetをVBAから新に作成しBook2のsheet1に纏めたいのですが、纏め方は、Book2のsheet1の下から上に10sheetをコピーして、条件としてBook2のsheet1の名前は、固定で構いません。Book1の一番初めのsheetにコピーする時だけ3行目にある見出しだけは、Book2のsheet1に付けたく。それ以外のBook1のsheetは、デターだ4行目以降をコピーしたいのですが、また、コピーしたいsheetの範囲に列は、A1~AFで列は3~62までです。マクロはご教授頂いた、下記通りです。 Sub macro1() Dim i As Long Dim w0 As Workbook Dim s As Worksheet Set w0 = ActiveWorkbook '1枚目シートから貼り付け先のブックを作る w0.Worksheets(1).Copy Set s = ActiveSheet '2枚目以降のデータをコピーする For i = 2 To w0.Worksheets.count With w0.Worksheets(i) .Range("A4:AF" & .Range("A65536").End(xlUp).Row).Copy Destination = s.Range("A65536").End(xlUp).Offset(1) End With Next i End Sub これを先ほど書きました、マクロを教えて頂けませんでしょうか?何せ、マクロ初心者なので、msm相談箱がたよりです。何卒マクロを教えて頂きたく宜しくお願い申し上げます。

  • VBA シート指定とファイル名入力

    部署ごとに分割し、ブックで保存するコードです。 sheet名は「部署」です。 Sub macro1() Dim w As Worksheet Dim n As Long Dim r As Long Dim s As String Dim WSH As Variant Dim myPath As String Set w = ActiveSheet n = Worksheets.Count Application.ScreenUpdating = False On Error GoTo errhandle For r = 5 To w.Range("B65536").End(xlUp).Row s = w.Cells(r, "B") w.Rows(r).Copy Worksheets(s).Range("B65536").End(xlUp).Offset(1, -1) Next r On Error GoTo 0 Set WSH = CreateObject("Wscript.Shell") myPath = ActiveWorkbook.Path & "\1\" For r = Worksheets.Count To n + 1 Step -1 Worksheets(Worksheets.Count).Copy ActiveSheet.Columns.AutoFit ActiveWorkbook.SaveAs Filename:=myPath & ActiveSheet.Name ActiveWorkbook.Close False Application.DisplayAlerts = False Worksheets(Worksheets.Count).Delete Application.DisplayAlerts = True Next r w.Select Exit Sub errhandle: Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = s w.Rows(1).Copy Range("A1") w.Rows(2).Copy Range("A2") w.Rows(3).Copy Range("A3") w.Rows(4).Copy Range("A4") Resume Application.ScreenUpdating = True End Sub (1)sheet1にマクロ実行ボタンを配置し、部署seedにマクロ実行命令をする。 (2)sheet1のB2セルにファイル名を入力して、そのファイルに保存する。(例部署ファイル) (1)Dim w As Worksheets("部署")と変更したのですが、エラーが出ました。 (2)myPath = ActiveWorkbook.Path & "\部署ファイル\"   ↑ これをsheet1のB2セルから指定できるようにしたいです。 宜しくお願いします。

  • エクセルVBA ブック間のコピー

    選択したテキストファイルをエクセルで開いたコピーし、 もう一つ開いたエクセルファイルにペーストするというマクロをVBAで 作成していますが、つまずいてしまいました。 ----------------------------------- Dim wb1 As String Dim wb2 As String Sub Opentxt() wb1 = Application.GetOpenFilename("テキストファイル,*.txt") If wb1 <> "False" Then Workbooks.OpenText Filename:=wb1, DataType:=xlDelimited, comma:=True End If End Sub Sub Copy() Dim LastRow As Long wb2 = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") If wb2 <> "False" Then Workbooks.Open wb2 LastRow = wb2.Sheets("一覧表").Range("A" & Rows.Count). End(xlUp).Row wb2.Sheets("一覧表").Range("A5:A" & lastRow).Copy _ wb1.Sheets("Sheet1).Range("B33") End If End Sub ----------------------------------- Opentxtの方は問題ないですが、Copyの方を実行すると wb1とwb2で引っかかって「コンパイルエラー/ 修飾子が不正です」と 表示されて、エラーになってしまいます。 この場合変数の型などがおかしいのでしょうか? excel2007を使用しています。 よろしくお願いします。

  • sheetの中身もコピーしたい

    表題通りの質問になります。以下のソースを実行すると、コピーはされますが、中身はコピーされません。どうすればよろしいでしょうか? アドバイスお願いいたします。 Sub sheetの連続コピー() Dim sheet_name As String '文字型変数の宣言 sheet_name = ActiveSheet.Name '現在アクティブになっているシート名の取得 'Range("A1") = sheet_name '取得したsheet名をA1のセルに表示 Dim NewWS As Worksheet For i = 1 To 10 'Worksheets.Add ~ 空のSheetが ○個 挿入される Set NewWS = Worksheets.Add(Before:=Worksheets(sheet_name)) NewWS.Name = sheet_name & i Next End Sub

  • VBA 最終行を選んだシートにコピーする。

    VBAど初心者です。どうしても最終行のデータを選んだシートにコピーできません。 LastRow.Selectのところで、止まってしまいます。どのように行を設定していいのかさっぱりわかりません。どなたか、ご指導のほどよろしくお願いします。 Sub copy_last_line() Dim LastRow As Long Sheets("Sheet1").Select LastRow = Cells(Rows.Count, 1).End(xlUp).Row LastRow.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select End Sub

  • Excel VBA連続コピー、貼付処理について

    特定のフォルダ内に格納されている複数のExcelファイルの「sheet1」シートのデータを 所定のExcelファイルにコピー&ペーストしたいのですが、うまくいきません。 (貼付先のファイルを閉じようとするとエラーが発生します。) どうすればできるようになるでしょうか? ご教授の程よろしくお願いいたします。 -------------------------------------------------------------------- Sub copy_test() Dim myPath As String Dim copyFile As String Dim pasteFile As String Dim n As Long myPath = "C:\copy\" copyFile = Dir(myPath & "*.xls*") pasteFile = "C:\paste\paste_data.xlsx" n = 2 Do Until copyFile = "" Workbooks.Open Filename:=myPath & copyFile Workbooks(copyFile).Worksheets("sheet1").Range("A2:L201").Copy Workbooks.Open Filename:=pasteFile 'Workbooks(pasteFile).Worksheets("paste_data").Active Range("B1").Select Selection.End(xlDown).Select Selection.End(xlToLeft).Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste ActiveWorkbook.Save Workbooks(pasteFile).Close False Application.CutCopyMode = False Workbooks(copyFile).Close False n = n + 999 copyFile = Dir() Loop End Sub ---------------------------------------------------------------------------------

  • VBAでセルのコピーをすると、エラーになる

    =IF(COUNTIF('5月'!B4:I13,E13)=0,"",COUNTIF('5月'!I:I,E13))というセルを コピーして、別のシートのセルに貼り付けたのですが、値が「0」の場合「””」が セルに張り付いてしまい、その後の計算ができません。 「””」を本当の空欄にするにはどうしたらいいのでしょうか? Sub 転記() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim SN As String SN = Month(Now()) Set sh1 = Sheets(SN) Set sh2 = Sheets("差出票") sh1.Range("A35").End(xlUp).Offset(1) = sh2.Range("B9") sh1.Range("A35").End(xlUp).Offset(0, 1) = sh2.Range("F13") sh1.Range("A35").End(xlUp).Offset(0, 2) = sh2.Range("F14") sh1.Range("A35").End(xlUp).Offset(0, 3) = sh2.Range("F15") sh1.Range("A35").End(xlUp).Offset(0, 4) = sh2.Range("F16") sh1.Range("A35").End(xlUp).Offset(0, 5) = sh2.Range("F17") sh1.Range("A35").End(xlUp).Offset(0, 6) = sh2.Range("F18") sh1.Range("A35").End(xlUp).Offset(0, 7) = sh2.Range("F19") End Sub

  • エクセルVBAで複数の図に名前をつけたい

    エクセルVBAで複数の図に名前をつけたい エクセルで見出しと合計2カ所などウィンドウ枠固定を複数つける ことはできないので、かわる方法として図のリンク貼り付けを利用 しようと思い下記を作りました。 Sub test()   Range("A100", "R100").Select   Selection.Copy   Range("A1").Select   ActiveSheet.Pictures.Paste link:=True   ActiveSheet.Pictures.ShapeRange.Name = "合計1"   Range("A200", "R200").Select   Selection.Copy   Range("A2").Select   ActiveSheet.Pictures.Paste link:=True   ActiveSheet.Pictures.ShapeRange.Name = "合計2" ・・・(1) End Sub 必要に応じて合計1または合計2を削除します Sub 図1削除() ActiveSheet.Shapes("合計1").Delete End Sub Sub 図2削除() ActiveSheet.Shapes("合計2").Delete End Sub (1)のところで 「このメンバにアクセスできるのは、単一の図形の場合だけです」エラーになります。 エラーがでないように図に名前をつける方法をおしえていただけないでしょうか。 何卒よろしくお願い致します

このQ&Aのポイント
  • EP-803Aを使用しており、無線LANで印刷する際にインク残量のインジケータが全てグレーになり、印刷できません。
  • コピーはできるため、10日前くらいには印刷できていたが、原因がわかりません。
  • EP-803Aの無線LAN印刷でインク残量のインジケータが全てグレーになり、印刷できない問題の解決方法を教えてください。
回答を見る

専門家に質問してみよう