エクセルVBAのシート間セルコピー方法について

このQ&Aのポイント
  • エクセルVBAを使用してSheet1から他のシートへのセルコピーを行う際、現在は一般的な方法を使用していますが、他にもクリップボードのコピー&ペースト方式など別の方法が存在するか疑問に感じています。また、コピー先のシートでデータ編集も行っているため、処理が重く感じられることがあります。
  • 現在のコピー方法は、Rangeを指定してコピー元のセルを名前付き範囲に設定し、その範囲をコピーしてコピー先のシートに貼り付けています。この方法は一般的に広く使われており、8年間運用してきました。
  • 質問者はより効率的で良い方法を求めており、クリップボードのコピー&ペースト方式など別の方法があるのか知りたいと考えています。また、ウィルスバスターの推奨メモリ不足も処理の重さの原因かもしれないと述べています。
回答を見る
  • ベストアンサー

エクセルVBA シート間のセル・コピー

お世話になります。 ExellVBAを業務に使用しています。 動作環境は、自宅は256M、Exell2002+Sp3、職場は256M、Exell2003+Sp2。 両方共にウィルスバスターがインストールされています。 次に方法で、Sheet1から、Sheet2、3,4,5・・・へ、セルを連続コピーしていますが、同時にコピー先のSheetではデータ編集も行なっているので、とても重たく感じられます。 ウィルスバスターの推奨メモリは512Mで、足りない環境で動かしているので、この所為かとは思っていますが、取り外して試してはいません。 現在のコピー方法は次の通りです。これで、8年運営しています。 (例) Sheet1において、 Range("A003:A024").Name = "namA_Room" Application.Goto Reference:="namA_Room" Selection.Copy Destination:=Worksheets("Sheet2").Range("E03") 質問です。 コピーには色々方法があろうかと思いますが、 ↑の(例)の方法は、現在、一般的に多く使われている方法でしょうか? それとも、例えば、クリップボードのコピー&ペーストみたいな記述方式の方がいいのでしょうか? 他にも、もっと良い方法がありますか? 一部作り直すつもりです。どうせなら、ベターな方法を取り入れたいと思っています。 御教示よろしくお願いします。

  • tt246
  • お礼率91% (116/127)

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>コピーには色々方法があろうかと思いますが、 理屈はよくわかりませんが コピー&ペーストだとメモリーの使用量に影響が必ずあるはずです。 お仕事のようですが コピーするのは 書式やフォントなどの一緒にコピーしなければならない作業なのでしょうか 私は、値を入れたいだけであれば Worksheets("Sheet2").Range("E03:E24").Value = Range("A3:A24").Value の1行で済ましてしまいます。 名前をつけたり、コピーしたりする必要もありません。 ちなみに Range("C2").Value = Now For i = 1 To 1000 Range("A003:A024").Name = "namA_Room" Application.Goto Reference:="namA_Room" Selection.Copy Destination:=Worksheets("Sheet2").Range("E03") Next Range("C3").Value = Now End Sub と Range("B2").Value = Now For i = 1 To 1000 Worksheets("Sheet2").Range("E3:E24").Value = Range("A3:A24").Value Next Range("B3").Value = Now End Sub 同じ作業を1000回繰り返してみたら 5秒と1秒という結果でしたので 5倍ほど違いました。 メモリーが少ない場合はさらに違いが出てもおかしくないと思うのですが。

tt246
質問者

お礼

ご丁寧に、比較のの実行結果まで行なって頂き、ありがとうございます。 8年前はVB使い初めで、例題を見ながら作っていました。 最近、これが重たく感じられ、いつか作り直しをと思ってましたが そのままにしていました。 これを機会に、ご提案の内容を取り込み、作り直ししてみます。 ありがとうございました。 補足ですが、 私、クラスモジュールが、なかなか理解が出来なくて、最近なんとなく判ってきて 標準モジュールをクラスモジュールに置き換えながら進めていく予定です。

関連するQ&A

  • VBAの全シートコピー

    VBAの全シートコピー シート1~4まであるとします プログラムで全シートを順番に読んでいきます。 シート1で範囲を決めてコピーします。コピーはRange(Cells(2, 1), Cells(??, 10)).Copy を使いたいです。違う方法があるなら。 そしてシート4に貼り付けます。 そして次にシート2を読む・・・同じ そしてシート3を読む・・・同じ そんなプログラムがほしいです。 分かるかた知恵を貸してください。 お願いします。

  • エクセルVBAのコピー方法について。

    セル結合された表を別シートコピーする方法を教えてください。 以下のように記述しましが、実行時エラーとなり 「結合されたセルの一部を変更することはできません。」となります。 Range("A1").CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") よろしくお願いします。

  • Excelマクロについて(セルのコピー)

    今、マクロで自動的にセルのデータを別シートに貼り付けるというものを作っています。 Private Sub コピー定義() Worksheets("sheet1").Activate 'sheet1をアクティブにする コピー元行 = 2 コピー先行 = 1 コピー元セル = "A" & コピー元行 コピー先セル = "A" & コピー先行 Worksheets("sheet1").Range(コピー元セル).Copy _ Destination:=Worksheets("sheet2").Range(コピー先セル) End Sub これで、sheet1のA2からsheet2のA1にコピーできるのですが、 Private Sub コピー定義() Worksheets("sheet1").Activate 'sheet1をアクティブにする コピー元行 = 2 コピー先行 = 1 コピー元行 = 2 コピー先行 = 1 コピー元セル = "A" & コピー元行 コピー先セル = "A" & コピー先行 コピー元セル = "B" & コピー元行 コピー先セル = "B" & コピー先行 Worksheets("sheet1").Range(コピー元セル).Copy _ Destination:=Worksheets("sheet2").Range(コピー先セル) End Sub とすると、B2の項目しかコピーされません。複数のセルを一度にコピーするマクロの作り方をご存じの方、ご伝授下さい。

  • エクセル VBA シートのコピーが上手く出来ない

    原因が分かりません。宜しくお願いします。 エクセルVBAで、フィルターを掛けたシートを別シートへコピーしています。 問題なく出来ていたルーチンでしたが、他の作業の影響か、 気がついたらコピー出来なくなっていました。 他のシートでも同じ方法でコピーを行っていますが、問題ありません。 問題のコーディングは以下のとおりです。 Worksheets("work2").Unprotect Worksheets("work2").Range("A:Z").ClearContents Worksheets("コピー元").Range("A5").AutoFilter Field:=6, Criteria1:=フィルタ請求年1, Operator:=xlOr, Criteria2:=フィルタ請求年2, VISIBLEDROPDOWN:=True Worksheets("コピー元").Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("work2").Range("A1") Worksheets("work2").Protect Worksheets("コピー元").Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("work2").Range("A1") の箇所では、エラーメッセージもでませんが、コピーもされていないことを確認しています。 どのような原因が考えられるでしょうか? または、どのような方法で原因追求が出来るでしょうか? ご回答お待ちしています。

  • VBAの複数のセルのコピー法がわかりません。

    VBAの複数のセルを選択、コピーしようとしているのですができません。 エクセルで複数の選択&コピーができないので、普通のやり方ではできないとわかっています。でも、やりたいんです。どなたか、その方法に知恵を貸していただける方はいませんか? 現在、ダイアログボックスにて複数のセルを入力した情報について、それを他のシートにコピーしようとしています。 (なぜ、いちいちダイアログで入力しているのかというと、その入力情報を元に、オフセットで過ぎのセルの情報に移動しそれも個コピー&ペーストしようとしているのです。) Set IntTest = Application.InputBox(Prompt:=StrMsgTest, Type:=8) で、複数のセルを選んでもらった情報を他のシートにコピーしようとしています。 複数のセルのコピーができないので、今はUnionを使ってどうにかならないか試していますが、これまた全然わかりません。 Union(Range("g1:k8"), Range("h9:h19"), Range("g20:k30")).Select Selection.Copy Destination:=Worksheets("Sheet2").Range("A1") どなたか、「コピー&ペースト」について、またそれとともに「ダイアログ入力からのそのコピー&ペーストの方法」について知恵を貸していただけませんか?

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

    困ってしまったので質問させてください Sub 一定秒おきに実行() Dim i As Integer  For i = 1 To 10   Application.Wait Now() + TimeValue("00:00:10")  コピーして別のシートに貼り付ける Next End Sub ---------------------------------- Sub コピーして別のシートに貼り付ける() Worksheets("sheet1").Activate Range("A1:G1").Copy ActiveSheet.Paste Destination:=Worksheets("sheet").Range("??") End Sub ----------------------------------- 以上のようなコードがありますが Sheet1のA1:G1を10秒おきにSheet2の1行、2行、3行 と順番にコピーする Sub コピーして別のシートに貼り付ける() のコードを教えてください よろしくお願いいたします

  • エクセルのVBAで、異なるブック間でのコピー&ペースト

    こんばんは。 エクセルのVBAで、異なるブック間でのコピー&ペーストに関しての質問です。 現在アクティブになっているシートのB4セルをコピーして、 現在開いているシートのブックとは異なる特定の ブック(”Book1")の特定のシート(”Sheet1”)のC5セルに貼り付けたい場合、 ●●●の部分に何と表現すればよいか教えてください。 Range("B4").Copy Destination:=●●● よろしくお願いいたします。

  • エクセルVBAで、シートをコピーした際、コピーされた新しいシートのほう

    エクセルVBAで、シートをコピーした際、コピーされた新しいシートのほうを指定する言葉を知りたい。 コマンドボタンにて、(1)内訳用シートをコピーで増やす。(2)新しいシートの番号を連番になるよう1増やす。(3)新しいシートのほうは入力しやすいよう、入力欄を消去する。シート名も1.2.3...とふえていくようにしたい。 新しくコピーされたほうのシートを指定したい場合はどのようなVBA用語になりますか? いまは、元のシート指定方法しかわからないため、元シートの前にコピー作成し、元シートのNoを1増やし、データ消去で対応していますが、これだと、シート名に表示される内訳(1)(2)・・という番号になるので、できれば、コピーしたほうのシートを指定して、Noを1増やし、データ消去できれば解決するとおもうので。。いま、使ってるVBAはこんな式です。 ちなみにK6はシートNo、("B10:H30")("J10:K30")は入力欄です。 Private Sub CommandButton1_Click() ActiveSheet.Copy Before:=ActiveSheet Range("K6").Value = Range("K6").Value + 1 Range("B10:H30").ClearContents Range("J10:K30").ClearContents ActiveSheet.Select ActiveSheet.Name = Range("K6").Value 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 別シート間の列のコピー&ペースト

    列のコピー&ペーストができません。 i, j は変数で、Integerで定義しており、省略はしていますが、期待通りの値がi, j には代入されています。 Sheet1のi列からj列をコピーし、Sheet2のC列(これは固定)に貼り付けたいのですが、うまくいきません。 私の書いたコードは下記の通り。 下記は改行されていますが、実際のVBAでは1行で書かれています。 Worksheets("Sheet1").Range(Columns(i), Columns(j)).Copy Worksheets("Sheet2").Range(Columns("C")) 貼り付け先(Destination)の記述がいけないのでしょうか? 行き詰っておりますので、どなたかお助けください!