マクロで複数のファイルを開き、値のみをコピー&貼り付けしたい

このQ&Aのポイント
  • マクロを使用して、特定のファイル内のデータを別のファイルに値のみでコピー&貼り付けする方法について教えてください。
  • 特定のファイル(Workbooks(2))のデータをコピーし、別のファイル(Workbooks(3))に値のみで貼り付ける方法を教えてください。
  • CopyメソッドとPasteSpecialメソッドを使用して、マクロで値のみをコピー&貼り付けする方法を教えてください。
回答を見る
  • ベストアンサー

値のみ貼りつけたい。

値のみ貼りつけたい。 すみません。教えて頂いた内容でもう一つ追加で質問をさせてください。 マクロで別ファイルを二つ開いて、マクロファイルがWorkbooks(1)別ファイル二つがWorkbooks(2)、Workbooks(3)になります。Workbooks(2)のデーターをコピーしてWorkbooks(3)に値だけ貼りつけたいのですが、教えて頂けませんでしょうか。 Workbooks(2).Activate Sheets(1).Select Range("A1").Copy Workbooks(3).Activate Sheets(2).Select Range("B1:C1").Select ActiveSheet.Paste この部分を値のみ貼りつけたいのですが。 PasteSpecial xlPasteValuesをつけてもうまくいかないので、お願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>ブックを開く、(Workbooks.Open)の部分ではブックは、開くのですが、ここで言うと >Workbooks("MyBook1.xls").Worksheets("Sheet1").Range("B1:C1").Copyの部分で >エラーになってしまいます。 この場合、ブックは開いても、こうするとエラーが発生する場合は、シート名が違っています。 言い換えると、指定するものは、そのブックのそのシートというひとつかない、ほかに指定できないような方法を取るということが、間違いを起こさなくなるわけです。 Sheets(1) と、Worksheets(1) と、Worksheets("Sheet1") は、同じようにありながら、最後のWorksheets("Sheet1")は、より間違いが少ないわけです。 なお、「明示的」というのは、プログラミング用語特有の言葉で、英語で、explicit (形容詞)の訳語として当てられた言葉です。一般的な日本語では少しおかしな言葉ですが、あえて使っています。 武藤玄氏のExcel事典  ワークシートの参照をマスターしよう!

参考URL:
http://home.att.ne.jp/zeta/gen/excel/c04p55.htm
konekos
質問者

お礼

Wendy02様 有難うございます。返信が遅れましてすみません。いろいろ調べたり、試したりしてましたら時間が経ってしまいました。今回は、本当に勉強になりました。 また、Wendy02さんの言われたとうり一つ一つ確実にやっていくと無事、今回やりたかった事が出来ました。本当に感謝しております。 有難うございます。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

どうやら、私の書いてきたことは、ほとんど理解されていないようですね。 VBAには、VBAの約束事があります。最初は出来さえすればそれで良い、ということから、なるべくエラーを起こさないコードと進化していくことで上達していくわけです。 例えば、InputBox 関数と、InputBox メソッドをどちらを使うとかは、こういうことは、ある程度、VBAを知っている人なら、どちらかは分かるものです。また、Sheets とWorksheets の違い、Windows とWorkbooks の違いも、自ずと、どちらを使うべきか、だんだんに見えてきます。 まず、ちゃんとしたVBAの教本を手に入れて、それで勉強してください。基本が大事です。掲示板では、玉石混交ですから、どれが正しいか分からない、こんな人の言っていることが信用できない、というなら、大手の出版の有名や著者の書籍でしか吸収できません。Webサイトを紹介している人もいますが、私のみた限りでは、もともと、人に教えるつもりなどないもの、凝ったテクニックや、初歩的な間違いをしているもの、もともと、Microsoft の基本的なVBAの仕様書(プログラマーズガイド)を一度も読んだこともない人のサイトなど、期待はずれのものが多いです。 VBAでは、入門編から、初級編(VBAは、初級編でほとんどお終いです)と段階的にコードは違います。しかし、理解しやすいことが、必ずしも、正しいものとは限りません。私は、初心者に合わせてコードを手抜きするようなことはしたくありません。 さて、前回の続きですが、Workbooks(1),Workbooks(2) ...というのは、特定のブックを指すわけではないし、開いた順番でしかありませんから、必ず、最初に、どのブックを開くという決まりがなければならないし、最初に開けたブックのIndex が、Workbooks(1)と1となるとは限らないのです。そんな初級マクロが実務上は使えないのです。実験的なものでしか成功しません。 とはいっても、多くの人は、失敗を経験しなければ覚えないと思いますが……。 そのためには、多くのコード(Sub ~ End Sub, Function ~ End Functionとして実行する)を書かなければなりません。 Excelのアプリケーションを起動して、最初に、マニュアルで開いたファイルがWorkbooks(1)という考えを持っているとしたら、それ自体を改めなくてはなりません。 VBAで大事なことは、「明示的」ということです。明示的というのは、はっきりと、どれがどれかと決めておくことです。 Sub TestMacro2()  Dim wb1 As Workbook  Dim wb2 As Workbook  '設定(このように明示的に決めるというのが基本です)  Set wb1 = Workbooks.Open("MyBook1.xls") 'ひとつのブック  Set wb2 = Workbooks.Open("MyBook2.xls") '別のブック  'ブック1からブック2のB1;C1の値だけを値コピーする*   wb2.Worksheets("Sheet1").Range("B1:C1").Value = _  wb1.Worksheets("Sheet1").Range("B1:B1").Value Set wb1 = Nothing Set wb2 = Nothing End Sub '//**  Workbooks("MyBook1.xls").Worksheets("Sheet1").Range("B1:C1").Copy  Workbooks("MyBook2.xls").ActiveSheet.Range("B1").PasteSpecial xlPasteValues  Application.CutCopyMode = False このような方法もあります。 VBAでは、Select やActivate 自体を、必要な場面というのはそれほど多くはありません。

konekos
質問者

お礼

Wendy02様 有難うございます。一応、「出来る大事典」という本で、セルの操作の項目までは、ほぼ本のコード丸写しで勉強してきましたが、自分で何かしようとしたときに何もできません。なので、自分のやりたい事を前提に勉強していこうとして試行錯誤しております。 >VBAで大事なことは、「明示的」ということです。明示的というのは、はっきりと、どれがどれかと決めておくことです。 有難うございます。言われる事がとても、理解できました。 ただ、私も本を見ながら明示的にやってみたのですがうまくいかないのでとても悩んでいます。 ブックを開く、(Workbooks.Open)の部分ではブックは、開くのですが、ここで言うと Workbooks("MyBook1.xls").Worksheets("Sheet1").Range("B1:C1").Copyの部分で エラーになってしまいます。 しかし、以前教えて頂いたWorkbooks(1),Workbooks(2)の方法で記述を変えると動作しました。 明示のしかたの何がいけないのか?今も、試行錯誤しております。 必ず明示して実行できるように頑張ってみます。 また、お世話になると思いますがこれからもどうか宜しくお願いします。

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

あまりコピーにこだわらなければ7命令が、以下の1命令で値コピーは完了します。     Workbooks(3).Sheets(2).Range("B1:C1").Value = Workbooks(2).Sheets(1).Range("A1").Value

konekos
質問者

お礼

jcctaira様 有難うございます。参考になりました。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

Selection.PasteSpecial Paste:=xlPasteValues で出来ると思います。

konekos
質問者

お礼

mar00様 有難うございます。できました。

関連するQ&A

  • マクロでコピー&ペースト処理が遅いような気がします。単純化したいです。

    Sub ***出力(file, num) Workbooks.Open (file) Cells.Clear Windows("xxx.xls").Activate Sheets("***").Select Range(num & "2:" & num & "2000").Select Selection.Copy Windows(file).Activate Range("A1").PasteSpecial Paste:=xlPasteValues End Sub 2行目から2000行目の中には計算値が入っています(結構ながい)。 その値を"file"に値のみペーストします。 しかし、処理が遅いので早くしたいです。 単純化できないでしょうか?

  • 複数シートをループさせてマクロを簡素化したい

    win7 Excel2007 でマクロ作成中の初心者です。 シート数の変動する複数シートの特定範囲を一枚のシートに右列方向に、値を貼り付けたいです。 自動記録でコード作成しましたが、もっと簡素化して軽くしたいです。 シートに対するループ等の作成ができません。どうかご指導お願いします。 Sub 勤怠最終データ作成() Worksheets(1).Select '1番左のシートを選択 ActiveSheet.Unprotect Range("B29:BM60").Select '複写範囲はすべて同じ Selection.Copy Sheets("総括").Select '値の貼り付けシートはすべて同じ Range("A2").Select '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(2).Select '2枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(3).Select '3枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(4).Select '4枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues 以下省略 End Sub

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • マクロを使ったコピペがうまく動作しない。

    あるデータを転記用のブック(月毎にシートが分かれています。シートの内容は同一)に貼り付ける処理を行うため、下記のようなマクロを組んだのですが、何故か貼りつきません。処理終了時には、転記元ブック(シート)で最終処理の範囲(5番目のB287)を選択しています。一体何がいけないのでしょうか? データはA1からPまでで毎月可変しています。 また、転記用ブックが12枚あるため、月を指定してから貼り付けたいのですが、どのようにすればよいでしょうか?(下記は直接シ-トを指定しました) Sub test() Dim 最終行 As Integer '-------------------------------------------- 開始 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("1").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B1").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 1 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("2").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B83").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 2 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("3").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B157").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 3 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("4").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B227").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 4 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("5").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B287").PasteSpecial Paste:=xlPasteValues --------------------------------------------- 5 End Sub 

  • Select Case の使い方について

    エクセルのバージョンは2003です。 Worksheets("様式2")のセルをコピーしてWorkbooks("件数.xls").Worksheets("件数")のセルに数値のみを張り付ける作業を Select Caseを使って組んでいるのですが数が多くて打ち切れません。 WS2からコピーするセルは変わらずWB1へ貼り付けする場所は列がずれて行きます。 myNoは1~30までで、1の場合はC列に数値を貼り付けし、2の場合はD列に数値を貼り付けし、3の場合はE列に数値を貼り付けし・・・ といった具合に列をずらして貼り付けを行いたいのです。 よろしくお願いします。 Dim myNo As Integer Set WS2 = Worksheets("様式2") Set WB1 = Workbooks("件数.xls").Worksheets("件数") myNo = Workbooks("件数.xls").Worksheets("一覧").Range("V7").Value Select Case myNo Case Is = 1 'Worksheets("様式2")からWorkbooks("件数.xls").Worksheets("件数")へ数値のみコピー WS2.Range("T7").Copy WB1.Range("C4").PasteSpecial Paste:=xlPasteValues WS2.Range("T8").Copy WB1.Range("C7").PasteSpecial Paste:=xlPasteValues WS2.Range("T10").Copy WB1.Range("C13").PasteSpecial Paste:=xlPasteValues WS2.Range("T11").Copy WB1.Range("C16").PasteSpecial Paste:=xlPasteValues WS2.Range("T13").Copy WB1.Range("C22").PasteSpecial Paste:=xlPasteValues WS2.Range("T14").Copy WB1.Range("C25").PasteSpecial Paste:=xlPasteValues WS2.Range("T16").Copy WB1.Range("C31").PasteSpecial Paste:=xlPasteValues WS2.Range("T17").Copy WB1.Range("C34").PasteSpecial Paste:=xlPasteValues WS2.Range("T18").Copy WB1.Range("C37").PasteSpecial Paste:=xlPasteValues WS2.Range("T69").Copy WB1.Range("C5").PasteSpecial Paste:=xlPasteValues WS2.Range("T70").Copy WB1.Range("C8").PasteSpecial Paste:=xlPasteValues WS2.Range("T72").Copy WB1.Range("C14").PasteSpecial Paste:=xlPasteValues WS2.Range("T73").Copy WB1.Range("C17").PasteSpecial Paste:=xlPasteValues WS2.Range("T75").Copy WB1.Range("C23").PasteSpecial Paste:=xlPasteValues WS2.Range("T76").Copy WB1.Range("C26").PasteSpecial Paste:=xlPasteValues WS2.Range("T78").Copy WB1.Range("C32").PasteSpecial Paste:=xlPasteValues WS2.Range("T79").Copy WB1.Range("C35").PasteSpecial Paste:=xlPasteValues WS2.Range("T80").Copy WB1.Range("C38").PasteSpecial Paste:=xlPasteValues

  • Excel2003 Range("XXX").Copyについて

    下記のようにコピペをしたいのですが ActiveSheet.Paste Sheets("sheets1").Range("V3").Copy Worksheets("sheets2").Activate Sheets("sheets2").Range "A1").Select 上の方法だと良く行くのですが下記だとSheets("sheets1").Cells(9,16).Copyエラーになってしまします。どうしてもCells(9,16) を使いたいのですが方法を教えてください。 ActiveSheet.Paste Sheets("sheets1").cells(9,16).Copy Worksheets("sheets2").Activate Sheets("sheets2").Range "A1").Select よろしくお願いします。

  • VBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

    マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。 マクロの内容は、任意の範囲をコピー、新規book追加し、 新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。 いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。 下記にマクロ内容全部記載します。 よろしくお願いします。 ********************************************************* ********************************************************* Sub 日報別ファイルに保存したい1() Worksheets("日報").Range("A3:AF36").Copy With Workbooks.Add Cells.Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Cells.Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("A1").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ApplicationDisplayAlerts = True '同名FILEが存在する場合' ActiveWorkbook.SaveAs Filename:= _ "c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _ , FileFormat:=xlNormal .Close file End With End Sub

  • エクセルVBAで値だけをコピーペーストする方法

    下記のマクロは、エクセルのシート「精算」のb12~bz342の範囲からからシート「集計表」のアクティブセルを始点に、空白行を除いたデーターを貼り付けます。 しかし計算式と書式を抜いた値だけを貼り付けたいので、 ActiveSheet.Pasteを ActiveSheetSpecial Paste:=xlPasteValues に書き換えたらエラーになってしまいました。 どなたか詳しい方ご教授下さい。 よろしくお願いします。 Sub 精算項目コピー() Dim 最終列 As Integer Sheets("精算").Activate 最終列 = Range("b342").End(xlUp).Row Range("b12:bz" & 最終列).Select Selection.Copy Sheets("集計表").Select ActiveSheet.Paste  ←この部分を書き換えたらエラー End Sub

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

  • VBAでの値のコピーのエラーについて

    お世話になっております。 現在、マクロを作成し、実行すると毎回ある部分で エラーが生じ、にっちもさっちも行かない状態です。以下の内容を記述してあります。 ********************************************** Sheets("C").Select Cells.Select Selection.Copy Sheets("A").Select Cells.Select Selection.PasteSpecial Paste:=xlPasteValues 対象列 = InputBox("対象列を入力") Sheets("A").Select If 対象列 = "L" Then Range("L12:L243").Select Selection.Copy Sheets("B").Select ActiveSheet.Unprotect Password:="1111"   ↓この部分が毎回エラーをおこしています Range("L12").PasteSpecial Paste:=xlPasteValues   ↑この部分が毎回エラーを起こしています ActiveSheet.Protect Password:="1111"   Application.DisplayAlerts = False Worksheets("A").Delete *********************************************** 実施したい事は、”A”とあるシートより、シート”B”に値を貼り付けるというものですが、常に貼り付けの部分でエラーが生じております。エラーが生じた際に、表示されるエクセルのヘルプには、以下のような事がかかれているのですが、シートBには値が入力されていないことが原因なのでしょうか? *****以下エクセルのエラーメッセージ************************ 実行時エラー”1004” RangeクラスのPastespecialメソッドが失敗しました************************ *****以下エクセルのヘルプ内容************************ 適用された状況ではメソッドを使用できません。特に、Range オブジェクトの一部のメソッドでは、対象となる範囲にデータが入力されている必要があります。範囲にデータが入力されていない場合は、メソッドの実行に失敗します。 お忙しい所申し訳ありませんが、宜しくお願いいたします。

専門家に質問してみよう