• ベストアンサー
  • 困ってます

エクセルのシートのコピーについて

シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数371
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.1
  • FEX2053
  • ベストアンサー率37% (7933/21169)

こういうコードをあたしゃあまり書かないので。 コードは短きゃいいってもんじゃないと思ってるから・・・。 ということで、多分 Workbooks("データ.xls").Activate Sheet(コピー元).Activate Cells.Copy Workbooks("貼り付け.xls").Activate Sheets.Add After:=Sheets(Sheets.Count) Cells.Select ActiveSheet.Paste と、素直に分解すれば動くんじゃないかしら。 多分Copyコマンドでそのままブックを渡った処理が 出来ないんじゃないかと思うので。逆にこれで動かな けりゃ、ステップ実行すればどこで止まったかわかるし。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 短ければいいというものではないのですね。 今度からは気をつけます。 コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) この部分で実行エラーになってしまうのですが、間違った書き方してますでしょうか? よろしくお願いします。

その他の回答 (2)

  • 回答No.3
  • FEX2053
  • ベストアンサー率37% (7933/21169)

「実行エラー438」で検索すればこんなのが出て来ます。 http://officetanaka.net/excel/vba/error/execution_error/error_438.htm 要は、そんなコードは無いって話で、書いてあるコードの どれかが「実際には無い」ものだった・・・って話です。 私の書いたコードで、同じエラーが出れば「Do Until」が 直接原因ですが、多分原因はそっちじゃないでしょう。 もっとも「Do Until」にも問題があるのは自明ですが、 それではこのエラーは出ないと思いますので。 エラーするなら、コードは分解して、1ステップずつチェック。 これ、コーディングの原則ですよ。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

返事が遅くなってしまってすみません。 >エラーするなら、コードは分解して、1ステップずつチェック。 これ、コーディングの原則ですよ。 おっしゃる通りです。 問題の箇所を見直したところ、動いてくれました。 ありがとうございました。

  • 回答No.2
  • x-1919
  • ベストアンサー率52% (91/173)

コードがものすごくわかりづらいけれど、 > Do Until IsEmpty(Cells(行数, 3).Value) たぶんこれが原因だと思う。 ここで言っている "Cells" がどのブックのどのシートの "Cells" として処理されるかご存知か? おそらくあなたがイメージしているブック & シートとは違うところにあるセルを読み込もうとしているのだと思う。 その結果、コピー対象となるシート名じゃない値が変数 "コピー元" に入ってしまい、存在しない名前のシートをコピーしようとしてエラーになる、と。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 分からないことが多々あるので、もう一度基礎から勉強しないといけないと改めて思いました。 Do Until IsEmpty(Cells(行数, 3).Value) 指摘をうけたこの部分ですが、一度消して繰り返しなしで、cells(2,3)のシート名がコピー出来るかテストしたところ、別の箇所でとまりました。 コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) ここで実行エラー438と出ました。 変数に出来ないのでしょうか?ちなみにエクセル2000です。 よろしくお願いします。

関連するQ&A

  • EXCEL 別シートのコピー(3)

    こんにちは。 こちらで以前こちらで質問をさせていただき、EXCELの別ブックのシートからコピーをしています。 元のブックのコピーを作り、そこに入力してもらい、元のブックにコピーをしています。(同じフォルダに入れて) Private Sub CommandButton1_Click() Dim myBook As Workbook Set myBook = Workbooks.Open(ThisWorkbook.Path & "\コピー元ブック.xls")  with workbooks("コピー元ブック.xls").worksheets("シート名").usedrange workbooks("貼り付け先ブック.xls").worksheets("シート名").range(.address).value = .value end with end sub ここでブックがない場合、そのブックを飛ばしてあるブックだけコピーしたい場合は、どうしたらいいでしょうか。いろいろやってみましたが、コピーできませんでした。 教えてください。

  • ブックの保護(シート構成) でシートのコピー

    エクセルで外部データを参照させるために, 別のブックを開きシートをコピーし元のブックに貼り付け別のブックは閉じるというマクロを作成しました。 Workbooks.Open Filename:=a Sheets("データ").Select Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー") Workbooks(a).Close SaveChanges:=False a(変数)というファイルを開く シートのデータを選択 データをコピーし ファイル.xls のメニューシートの後に貼り付け a(変数)のエクセルファイルを保存せずに閉じる 動作としては正常に動きました。 しかし、この ファイル.xls には ID とパスワードで管理しています。 その管理したシートがあるんですが、それを表示させないために シートを非表示→ブックの保護→シート構成 を行いました。 マクロを動かすと、シート構成をしているので Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー")  が動かないことに気が付きました。 何かいい方法があればご教授お願いします。

  • 「 このコード 」 のチェック を お願い致します。

    下記コードは何とか動作しますが、チェックお願い致します。 1、 MsgBox "「 空白シート 」 は ありません。"    の    追加編集が、よくわかりません。 2、 1以外に、おかしな箇所をご教示お願い致します。 --------------------------- '「 ブック1 」 に空白シートがあったら、そこへ貼り付ける Sub 空白シートへコピー() Dim ws As Worksheet For Each ws In Workbooks("ブック1.xls").Sheets If IsEmpty(ws.UsedRange) = True Then Workbooks("ブック2.xls").Activate Cells.Select Selection.Copy Workbooks("ブック1.xls").Activate ws.Select Range("A1").Select ActiveSheet.Paste Else MsgBox "「 空白シート 」 は ありません。" End If Next End Sub

  • シートを別のブックに複数自動コピー

    初質問です。よろしくお願いします。 マクロを使って、あるブックのシート(20から50枚程度)を、別の貼り付け先のブックに自動的にコピーしようとすると、10回をすぎたあたり(必ずしも一定せず)で 「実行時エラー'1004': WorksheetクラスのCopyメソッドが失敗しました。」 というエラーと共にマクロが止まり、デバッグしようとすると 「ActiveSheet.Copy After:=Workbooks("貼り付け先ブック.xls").Sheets("○○シート")」 のところで止まっています。 マクロの記述内容は以下の通りです。 Sheets("貼り付け元シート").Activate ActiveSheet.Copy After:=Workbooks("貼り付け先ブック.xls").Sheets("○○シート") Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Range("A1").Select Windows("貼り付け元ブック.xls").Activate ・・・以下貼り付け元シートを変えつつ複数回繰り返し これができる様になれば非常にラクになるので、ぜひご教授願います。

  • 2つのブックに各々複数のシートがあります。これをユーザーフォームのリストで選択したシート間のコピーをしたい

    ------------------------------------------------------------ Private Sub UserForm_Initialize() Dim lstFsheet As Worksheet 'コピー元シート名格納リスト Dim lstTsheet As Worksheet 'コピー先シート名格納リスト Dim txtFline As Integer 'コピー元行数格納項目 Dim txtTline As Integer 'コピー先行数格納項目 'コピー元シート名リスト 設定 frmCopyNaka.lstFsheet.AddItem "販売台帳11月" frmCopyNaka.lstFsheet.AddItem "販売台帳12月" 'コピー先シート名リスト 設定 frmCopyNaka.lstTsheet.AddItem "2009.11.9" frmCopyNaka.lstTsheet.AddItem "2009.11.13" frmCopyNaka.lstTsheet.AddItem "2009.12.3" End Sub ---------------------------------------------------------- Private Sub cmdCopy_Click() Dim Fsheet As Worksheet Dim Tsheet As Worksheet ' Set Fsheet = Workbooks("販売台帳.xls").Worksheet(lstFsheet) Set Tsheet = Workbooks("申込書.xls").Worksheet(lstTsheet) Tsheet.Cells(txtTline, 2) = Fsheet.Cells(txtFline, 3) ------------------------------------------------------------ という感じでうまくいくと思ったのですが、 Set Fsheet = Workbooks("販売台帳.xls").Worksheet(lstFsheet) の[worksheet(lstFsheet)]で[型が一致しない]のエラーになります。 シート名を変数として扱う事は出来ないのでしょうか? 基礎の勉強が不足しているのに、見よう見まねでやっているから こんな事になるんでしょうね… わかりやすい説明をお願いします。

  • エクセルのマクロでシートのコピー

    いつもお世話になっております。 エクセル2000で次のことをマクロで行いたいのです。 いくつかWorkbookが開いている状態で、シートのコピーを行うのですが、シート名やブック名はその都度違います。 具体的には、Workbook"A" に "a"、"b"、"c" の3つのシート、Workbook"B" に "f"、"g"、"h"の3つのシートがあり、 Workbook"A" の Sheet("a") を Workbook"B" の Sheet("h") の前にコピーしたいのです。 Sheets(1).Copy before:=Workbooks("B.xls").Sheets(3) ところがWorkbookの名前がその都度変わるので困っています。 ブック間の移動は ActiveWindow.ActivateNext などで行っていますがシートのコピーがどうしても分からないので お願いします。  

  • エクセル ブック間コピー マクロ

    ブックA(ブック名は固定)のシートA(シート名は毎回違います)を ブックB(ブック名は固定)の一番左へコピーしたいのですがうまくいきません。 動作 :シートAでマクロを実行しブックBへシートのコピー(挿入)します。 まず第一段階のブックAのシートAをブックBへのコピーがうまくいきません。 シートAが固定シート名ならコードは Sheets("A").Select Sheets("A").Copy Before:=Workbooks("B.xls").Sheets(1) ですが・・・・ Sheets("A").SelectをWith ActiveSheet.Selectにすれば良いのですか? 申し訳ないのですが、後教授お願いします。

  • エクセル 特定のシートを異なるブックの指定したシートにコピーするマクロ

    エクセルの"貼り付け先.xls"の(シート名="集計")を開いている状態で、 別の異なるブックの"貼り付け元.xls"の(シート名="sheet1")の内容を全部コピーして "貼り付け先.xls"の(シート名="集計元データ")へ貼り付けるマクロは どのようになりますでしょうか? いろいろ調べて下記のように書きましたが、 インデックスが有効範囲にありませんというメッセージが出て、 デバッグを確認すると Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_の部分が黄色く表示されてきます。 (1) "貼り付け先.xls"と"貼り付け元.xls"は同じパソコンのマイドキュメントに保存されています。 (2)"貼り付け元.xls"の"Sheet1"はセルA1から入力されていて、 内容は毎日変わります。 (3)Range("A1")や("A1:IV65536")のセル番地をいろいろ変えたりしても同じでした。 Sub クリップボードを経由せずにコピー貼り付けする_異なるブック() Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ.xls").Range ("A1:IV65536") End Sub

  • Excelマクロ(VBA)のブックとシートのコピーについて

    初めまして、宜しければVBAのブックやシートのコピー(操作)についてご教授お願いいたします。 Windows XP x64 OFFICE2003 を使用しております。 D:\Book1.elxのsheet1のシートをD:\test\Book2.elxのsheet1のシートに コピーする方法が恥ずかしながら理解できておりません。 以下が行いたい事です。 Sub ボタン1_Click() 'text1ブックを開く 'Workbooks.Open "D:\micro\test1.xls" 'ブック間のシートをコピー Workbooks("test2.xls").Worksheets("シート2").Copy _ After:=Workbooks("test1.xls").Worksheets("Sheet2") End Sub VBのファイル操作とは違い、どのように行えば良いのか検索しても同じような部分サンプルのようなものしか無く、理解できておりません。 参考でも結構ですのでご教授いただけませんでしょうか? よろしくお願いいたします。

  • Excel 2007 マクロ 別ブックのシートをコピーする方法

    Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub