VBAを使用してExcel2010のシートを新たなBookにコピーする方法

このQ&Aのポイント
  • Excel2010を使用して、特定のシートを新たなBookにコピーする方法を教えてください。また、コピーしたシートの名前を「L5」セルにある文字列にする方法も教えてください。
  • VBA初心者ですが、Excel2010で特定のシートを新たなBookにコピーして、名前を付けて保存する方法を教えてください。
  • VBAを使用してExcel2010で特定のシートを新たなBookにコピーする方法について教えてください。また、コピーしたシートの名前を「L5」セルにある文字列にする方法も知りたいです。
回答を見る
  • ベストアンサー

アドバイスをお願いします(VBAで・・・)

Excel2010を使用。 現在".xlsm"ファイルに シートが複数あります。 この中の一つのシートだけを新たなBookにコピーして、 名前を付けて保存する際、Book名を、"L5"セルにある文字列に したいと思い、ググった結果、下記のコードにたどりつきました。 このコードだけだと"close"の時にダイアログがでてくるので、 これに ActiveWorkbook.SaveAs Filename:="フォルダ名" & Range("L5").Value & ".xlsx" をCloseの前に挿入してみたのですが、Range("L5").Value=Empty値となり エラーがでてしまいます。 VBA初心者であるため、改善策がわからず苦戦しております。 申し訳ありませんが、アドバイスいただけないでしょうか? Sub サンプル() Dim sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー Workbooks.Add 'ブック追加 Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け Sheets("Sheet1").Name = "コピー" Application.CutCopyMode = False Application.SheetsInNewWorkbook = sc ActiveWorkbook.Close ThisWorkbook.Activate End Sub 参考URL:http://okwave.jp/qa/q2167570.html ※コピーしたいのは、シートの中のデータ、書式だけなので マクロを必要としません。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>ひとつだけ、行の高さが16行目までは完璧なのですが、 >17行目以降が違う高さ(低く)なってしまいました。 手元にExcel2010が有りませんので症状は解りませんが http://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/excel2010%E3%81%A7%E8%A1%8C%E9%96%93%E3%81%8C/124269ca-455b-e011-8dfc-68b599b31bf5 【EXCEL2010で行間が勝手に広がる】 こんな事があるようですね

-antsu-
質問者

お礼

watabe007さん、度々の回答ありがとうございます。 教えていただいたサイトに記載がある内容を 試しましたが、修復できませんでした。 ただ、自分なりに考えた結果、 Sheets(1).Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け このあとに、行の高さを設定するコードを付け足したところ 改善することができました。 度重なる質問に応じていただき本当に感謝です。 ありがとうございました。

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

("L5").Value & ".xls" ↓ ("L5").Value & ".xlsx"

-antsu-
質問者

補足

watabe007さん、何度もすみません。 教わったコードで、無事にできたのですが、 ひとつだけ、行の高さが16行目までは完璧なのですが、 17行目以降が違う高さ(低く)なってしまいました。 度々で申し訳ないのですが、この改善策は ありますでしょうか?

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

Sub サンプル2()   Dim wb As Workbook   Dim myPath As String   Set wb = Workbooks.Add(xlWBATWorksheet)   With ThisWorkbook     myPath = .Path     .Sheets("オリジナル").Cells.Copy   End With   With wb     .Sheets(1).Range("A1").PasteSpecial Paste:=xlValues '値貼り付け     .Sheets(1).Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け     .SaveAs Filename:=myPath & "\" & .Sheets(1).Range("L5").Value & ".xls"     .Close   End With End Sub

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>この中の一つのシートだけを新たなBookにコピーして、 ThisWorkbook.Sheets("オリジナル") で宜しいですか? >名前を付けて保存する際、Book名を、"L5"セルにある文字列にしたいと思い ThisWorkbook.Sheets("オリジナル").Range("L5") で宜しいですか? ThisWorkbookと同じPathに保存しました。 Sub サンプル()   Dim myPath As String   With ThisWorkbook     myPath = .Path     .Sheets("オリジナル").Copy 'コピー   End With   With ActiveWorkbook     .SaveAs Filename:=myPath & "\" & Range("L5").Value & ".xlsx"     .Close   End With End Sub

-antsu-
質問者

補足

watabe007さん、ありがとうございます。 >ThisWorkbook.Sheets("オリジナル") で宜しいですか? 実際のシート名は違いますが、変更するので大丈夫?です。 >ThisWorkbook.Sheets("オリジナル").Range("L5") で宜しいですか? >ThisWorkbookと同じPathに保存しました。 With ActiveWorkbook     .SaveAs Filename:=myPath & "\" & Range("L5").Value & ".xlsx" ここのことだと思うのですが、 Sheets(オリジナル)があるBookと同じフォルダの中に・・・ ということでしょうか? あと、教えていただいたコードを試してみましたが、 コピー元のシートにマクロがあるので、 「次の機能はマクロなしのブックに保存できません」とでます。 これが出ないように、シート内のデータと書式だけを コピーしたいのですが・・・ 質問内容が不十分で申し訳ありません。 やりたい事を整理すると".xlsm"ファイルにある複数シートのうち 特定の一つのシートだけを新しいBookにコピーしたい。 この時、マクロは不要でデータと書式をコピーして、 名前を付けて保存。Book名をコピーしたBookの"L5"の 文字列をBook名にして保存したい。 再度お教えいただけないでしょうか? よろしくお願いいたします。

関連するQ&A

  • プログラムの手直しを手伝って頂けないでしょうか?

    した記載のサンプルプログラムの手直しを手伝って頂けないでしょうか? どうしても以下の問題が克服できずに困っています。 宜しくお願い致します。 ※コピー元を非表示にしてVBAでコピーすると、設定していた印刷範囲がリセットされるのを回避したい。 ※コピーしたワークシートを最後(右側)に置きたい。 ※コピーしたワークシート名を日付(201408XX)としたい。  同日にワークシートをもう一枚コペーした場合は(201408XX_(1))とかにしてエラー回避をしたい。 Sub サンプル() ' Dim sc As Integer ' sc = Application.SheetsInNewWorkbook ' Application.SheetsInNewWorkbook = 1 ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー With Worksheets.Add 'シート追加 .Range("A1").PasteSpecial Paste:=xlValues '値貼り付け .Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け .Name = "コピー" End With Application.CutCopyMode = False ' Application.SheetsInNewWorkbook = sc ' ActiveWorkbook.Close ' ThisWorkbook.Activate End Sub

  • ワークシートをコピーしたい

    下記載のサンプルマクロは「ワークシートをコピーして、追加したワークブックにコピペする」マクロなんですが、これを「ワークシートをコピーして、追加したワークシートにコピペする」にできないでしょうか? 出来るのであれば、値と書式の他に関数もそのまま貼り付けたいので御教授お願いします。 ただマクロは削除してマクロ抜きのコピペが理想です。 宜しくお願い致します。 Sub サンプル() Dim sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー Workbooks.Add 'ブック追加 Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け Sheets("Sheet1").Name = "コピー" Application.CutCopyMode = False Application.SheetsInNewWorkbook = sc ActiveWorkbook.Close ThisWorkbook.Activate End Sub

  • エクセルVBAで作成した別ブックにVBAを記述したい

    VBAで別ファイルの作成は下記で出来ているのですが、出来上がったファイルにVBAを記述する方法がわかりません。 具体的には一番下のSub TEST()を新しいブックの標準モジュールに記述したいのと、sheet1に Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "ChangeTEST" End Sub を入れたいです。 また Private Sub Workbook_Open() MsgBox "OpenTEST" End Sub も入れたいのです。 どうぞご教示ください。 Sub 複製() Dim wb As Workbook, sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set wb = Workbooks.Add Application.SheetsInNewWorkbook = sc wb.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Cells.Copy wb.Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False ActiveSheet.Buttons.Add(123, 195, 68.25, 15).Select Selection.OnAction = "TEST" Selection.Characters.Text = "TEST" ActiveWorkbook.Close ThisWorkbook.Activate Sheets("Sheet1").Select End Sub Sub TEST() MsgBox "TEST!!" End Sub よろしくお願いします。

  • エクセルVBAで書式と値の貼付けにつて

    エクセル2007VBAで新規ファイルを作る場合のコピー、貼り付けで質問しましたが 式も全て貼り付けになるとUSBメモリーで持ち出した場合、エラーとなります。 それで値と書式のみ貼り付けする様下記の様に書き直しましたが、.PasteSpecialでメソッドまたはデータメンバーが見つかりませんとなります。 ぐぐっててヘルプを見ますが解決出来ません。どなたがご教授お願いします。 元の式 Sub DGCopy() Workbooks.Add With ThisWorkbook .Sheets(5).Cells.Copy Sheets(1).Cells Sheets(1).Select Sheets("Sheet1").Name = "電気代" .Sheets(6).Cells.Copy Sheets(2).Cells Sheets(2).Select Sheets("Sheet2").Name = "ガス代" F = Application.GetSaveAsFilename(FileFilter:="Excelブック (*.xls),*.xls)") If F = "False" Then Exit Sub ' ダイアログでCancelをクリックした場合 ActiveWorkbook.SaveAs Filename:=CStr(F) End With End Sub 書き直した式 Sub DGCopy() Workbooks.Add With ThisWorkbook Sheets(5).Select Cells.Selection.Copy Sheets(1).Selection .PasteSpecial Paste:=xlPasteFormats ←エラー部分 .PasteSpecial Paste:=xlPasteValues Sheets("sheets1").Name = "電気代" Sheets(6).Select Cells.Selection.Copy Sheets(2).Selection .PasteSpecial Paste:=xlPasteFormats .PasteSpecial Paste:=xlPasteValues Sheets("sheets2").Name = "ガス代" F = Application.GetSaveAsFilename(FileFilter:="Excelブック (*.xls),*.xls)") If F = "False" Then Exit Sub ActiveWorkbook.SaveAs Filename:=CStr(F) End With End Sub

  • VBA空白を除いてコピーが出来ません。ご指導お願いします。

    値のコピー&ペースト(空白を除いてコピー)したいと思っております。 シート1 の A35、D35、I35 をコピー。 シート2 の A2 に貼り付け。 これは、大丈夫です。 シート1 の M2 : O23 をコピー。 シート2 の E2 に貼り付け。 今回の場合ですと、M2 : O13 までに値が入ってます。 ですので、M14 : O23 までが、空白になって記入となってしまいます。 *毎回、値が入る量が違います。 一回のコピーですと、これでもいいのですが、 値を変更して、コピーを続けてしますので、M14 : O23 までが、空白になってM24からのコピーになってしまいます。 空白を除いて、貼り付けしたいのですが、 どうすればいいのかわかりません。 お分かりになる方、ご指導よろしくお願いします。 VBAは以下になっております。 Sub Macro1() ' Application.ScreenUpdating = False Sheets("Sheet1").Range("A35,D35,I35").Copy If Sheets("Sheet2").Range("A2").Value = "" Then Sheets("Sheet2").Range("A2").PasteSpecial Paste:=xlPasteValues Else Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues End If Sheets("Sheet1").Range("M2:O23").Copy If Sheets("Sheet2").Range("E2").Value = "" Then Sheets("Sheet2").Range("E2").PasteSpecial Paste:=xlPasteValues Else Sheets("Sheet2").Range("E" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues End If Application.CutCopyMode = False Application.ScreenUpdating = True End Sub よろしくお願いします。

  • 値のコピー

    Book1.csvの(A1:M17)と(A27:Q43)の値だけをBook2.xlsのsheet1とsheet2にコピーさせたいのですが Book2.xlsに(A27:Q43)の値だけしかコピー出来ないのですがどこが間違っているのでしょうか? CSVの場合、形式が異なる為出来ないのでしょうか? ご教授よろしくお願いいたします。 Sub test() Sheets("sheet1").Select Range("A1:M17").Copy Sheets("sheet1").Select Range("A27:Q43").Copy Workbooks.Open(Filename:="C:\sample\Book2.xls").RunAutoMacros Which:=xlAutoOpen Sheets("sheet1").Range("A1:M17").PasteSpecial Paste:=xlValues Sheets("sheet2").Range("A1:Q19").PasteSpecial Paste:=xlValues Application.CutCopyMode = False Application.DisplayAlerts = False ActiveWorkbook.Save ActiveWorkbook.Close End Sub

  • エクセルVBAですが教えてください。オートシェイプがコピーされません。

    またまたお世話になります。「入力」シートから「コピー先」シート にコピーして貼付したいのですが、コードで記述してうまくいき ません。すごく簡単なことかと思いますが、まったく解決できず にいます。何か足りないのでしょうか?よろしくご指導ください。 Sheets("入力").Select Range("A1:V20").Copy Sheets("コピー先").Range("A22").PasteSpecial Paste:=xlAll Application.CutCopyMode = False

  • マクロ アドバイスお願いいたします。

    Sub a() Sheets("あ").Select Range("C25").copy Sheets("い").Select Range("E27").PasteSpecial Sheets("あ").Select Range("D25").copy Sheets("い").Select Range("F27").PasteSpecial Sheets("あ").Select Range("E25").copy Sheets("い").Select Range("G27").PasteSpecial ・・・(1) Sheets("あ").Select Range("C26").copy Sheets("い").Select Range("E29").PasteSpecial Sheets("あ").Select Range("D26").copy Sheets("い").Select Range("F29").PasteSpecial Sheets("あ").Select Range("E26").copy Sheets("い").Select Range("G29").PasteSpecial ・・・・(2) End Sub コピーの貼り付け元と貼り付け先のセルが異なるため、セル一つずつ コピー、貼り付けををしなければなりません。 以上のように、シート"あ" と "い" を行ったりきたりになって しまい、(5)まで続きます。(1)のなかで既に10回くらい行きき しなければなりません。 ★何か動作を単純化することはできますでしょうか。 ★またもし動作自体単純化できなくても、書き方を簡略することはできますでしょうか。(長すぎて格好悪く感じます。) 全く初心者なのでアドバイスをお願いいたします。 (エクセル2003、OSはXPです。)

  • Excel2000/VBA:値と書式のみ貼り付けたい。

    Excel2000のVBAで値と書式のみ貼り付けたいのですが、可能でしょうか。2Excel2003なら Range("A1:Y100").PasteSpecial Paste:=xlPasteValuesAndNumberFormats でうまくいくのですが、Excel2000だとエラーがでます。「Range クラスの PasteSpecial メソッドは、失敗しました」とでます。これが、Paste:=xlPasteValues ならちゃんと貼り付けできますのでコピー範囲がセレクトされていない原因のエラーではないようです。

  • エクセルVBAでもっと早く転記

    エクセル2000です。 以下は、列をコピーし行にペーストする作業を含むVBAですが、もっとスマートに早く転記する方法がありましたらご教示ください。 お願いします。 Sub TEST() With Application .ScreenUpdating = False .Calculation = xlCalculationManual Sheets("データ").Range("B8:DH8").ClearContents With Sheets("入力") .Range("G8:G68").Copy Sheets("データ").Range("C8:BK8").PasteSpecial Paste:=xlValues, Transpose:=True .Range("G14:G15").Copy Sheets("データ").Range("BM8:BN8").PasteSpecial Paste:=xlValues, Transpose:=True Sheets("データ").Range("BQ8") = .Range("G21") Sheets("データ").Range("BR8") = .Range("G23") .Range("G25:G29").Copy Sheets("データ").Range("BS8:BW8").PasteSpecial Paste:=xlValues, Transpose:=True .Range("G32:G68").Copy Sheets("データ").Range("BX8:DH8").PasteSpecial Paste:=xlValues, Transpose:=True End With Application.CutCopyMode = False .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub

専門家に質問してみよう