• 締切済み

Excelマクロ 別シートへ連続コピペの方法

Excelマクロ初心者です。 現在以下のような作業をマクロを組もうとしています。 シート1のA3:A9の数値をコピー→シート1の右隣のシート(仮にシート2とします)のC3:C9へペースト→シート1へ戻りB3:B9の数値をコピー→隣の隣のシート(仮シート2の右隣のシート)のC3:C9へペースト というのをシート1のAA3:AA9まで繰り返したいです。 こういうマクロを組むのは可能なのでしょうか? もし組めるとしたらどのように組めばいいか教えて頂きたいです。 よろしくお願いします。

みんなの回答

回答No.5

'再挑戦!! Sub CopyCyclicPartialRange() Const xRange_Row = 3 Const xRange_Row2 = 9 Const xRange_Rows = xRange_Row2 - xRange_Row + 1 Const xColumn_From = 1 Const xColumn_To = 27 Const xBase = "C3" Const xSheet = "シート1" Dim jj As Long Dim kk As Long Dim mm As Long Dim nn As Long Application.ScreenUpdating = False For kk = 1 To ThisWorkbook.Sheets.Count If Worksheets(kk).Name = xSheet Then mm = kk Exit For End If Next kk If (mm <> kk) Then MsgBox ("""" & xSheet & """? ご指定のシートが見つかりませんでした、残念~ん!" & vbCrLf & "再度挑戦する場合は、「xSheet」に元ネタのシート名を設定してね!") GoTo Epilogue End If kk = ThisWorkbook.Sheets.Count - (mm + xColumn_To) If (kk < 0) Then MsgBox ("このミッションを成功させるためには、シートがあと" & -kk & "個必要のようです、残念~ん!" & vbCrLf & "再度挑戦する場合は、シートを追加してね!") GoTo Epilogue End If With Worksheets(xSheet) For kk = 1 To xColumn_To .Range(.Cells(xRange_Row, kk), .Cells(xRange_Row2, kk)).Copy Worksheets(mm + kk).Range(xBase).Resize(xRange_Rows, 1).PasteSpecial Paste:=xlValues Next kk End With Epilogue: Application.ScreenUpdating = True End Sub

ace7shunsuke
質問者

お礼

ありがとうございます。 非常に助かりました。 おかげで作業がガンガン進みます!

回答No.4

経験上、コピー&ペーストは時間がかかるので、 数値をコピーをデータの移動と考えてマクロを記述します。 Dim A,B,X,Y,AAA() X=27 'A列からAA列までの列数 Y=7 '3行から9行までの行数 ReDim AAA(X,Y) '移動対象データの取得 Sheets("シート1").Select For A=1 To X For B=3 To Y+2 AAA(X,Y)=Cells(A,B).Value Next B Next A '取得データの移動対象への書込 Sheets("シート2").Select For A=1 To X For B=3 To Y+2 Cells(A,B)=AAA(X,Y) Next B Next A

ace7shunsuke
質問者

お礼

非常にわかりやすいです。 ありがとうございます

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

こんばんは。 >コピー→シート1の右隣のシート(仮にシート2とします)のC3:C9へペースト いわずもがなですが元のシートのA3:AA9の内容は、生数字などですね。 数式とかで、「ただコピーしただけじゃ勝手に計算結果が変わっちゃいました」みたいなのじゃありませんね?ということです。 ご質問に書かれてることだけなら特に難しい事もなく、淡々とコピー貼り付けてくだけの単純なマクロで出来ます。 sub macro1()  dim o, i  o = activesheet.index  on error goto errhandle  for i = 1 to 27  worksheets(o).range("A3:A9").offset(0, i - 1).copy worksheets(o + i).range("C3")  next i  exit sub errhandle:  worksheets.add after:=worksheets(worksheets.count)  resume end sub

ace7shunsuke
質問者

お礼

すごく単純ですね! わからないことだらけなので、今後勉強して行こうと思います。 ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 Alt+F11キー → メニューの挿入 → 標準モジュールに↓のコードをコピー&ペーストして マクロを実行してみてください。 尚、Sheet数はsheet1を含めて全部で28Sheetあるという前提です。 Sub test1() 'この行から Dim k As Long, ws As Worksheet Set ws = Worksheets("Sheet1") '←「Sheet1」は実際のSheet名に! For k = 2 To Worksheets.Count Range(ws.Cells(3, k - 1), ws.Cells(9, k - 1)).Copy Destination:=Worksheets(k).Range("C3") Next k End Sub 'この行まで こんな感じではどうでしょうか? ※ Sheetを追加してコピー&ペーストする場合は当然コードも変わってきます。m(_ _)m

ace7shunsuke
質問者

お礼

短くシンプルでわかりやすいです。 ありがとうございます。 *の点は大丈夫です。

回答No.1

Sub CopyCyclicPartRange() Const xRange_Row = 3 Const xRange_Row2 = 9 Const xRange_Rows = xRange_Row2 - xRange_Row + 1 Const xColumn_From = 1 Const xColumn_To = 27 Const xBase = "C3" Const xSheet = "シート1" Dim jj As Long Dim kk As Long Dim mm As Long Dim nn As Long Application.ScreenUpdating = False For kk = 1 To ThisWorkbook.Sheets.Count If Worksheets(kk).Name = xSheet Then mm = kk Exit For End If Next kk With Worksheets(xSheet) For kk = 1 To xColumn_To .Range(.Cells(3, kk), .Cells(9, kk)).Copy Worksheets(mm + kk).Range(xBase).Resize(xRange_Rows, 1).PasteSpecial Paste:=xlValues Next kk End With Epilogue: Application.ScreenUpdating = True End Sub

ace7shunsuke
質問者

お礼

ありがとうございます。 しかし「実行時エラー'9'、インデックスが有効範囲にありません」と出て来てしまいます。 どこがおかしいのでしょうか?

関連するQ&A

  • エクセルのブック間のコピペのマクロ構文を教えて下さい

    はじめまして。 マクロは初心者なので、ご教授いただけるとありがたいです。 エクセルのワークブック1のシート1をコピーして、ワークブックAのシートaにペーストをする構文をお願いします。 マクロの記録で作って実行してみましたが、コピーするファイルが開いているときはうまくいって、開いていないとないとうまくいきませんでした。 コピーするファイルが開いていない状態でもコピーできる方法はないのでしょうか… よろしくお願いいたします。

  • エクセルの別シートで検出したデータの隣の数値を読み込みたい

    初心者なため意図が上手く伝わらない文章で申し訳ございません。 エクセルでシート1に    A   B   C   1  銀行 100  振込み 2  本屋  50  振込み 3  図書館 100 自動 と入力したとします。 別シートにて 「銀行」と手入力したら、その右隣には「100」「振込み」と自動的に抽出して記入されるようにしたいのです。 「本屋」としたら、その隣には「50」 「振込み」となるように・・・。 (※セルは分かれている形です) データの数は2000個ほどあるので、検索してコピー&ペーストというのも非常に非効率かと思い相談させていただきました。 マクロなどは全くわからない人間ですので、数式などでわかるものがあれば幸いです。 どうかお知恵をお貸しください。 よろしくお願いいたします。 

  • エクセルのマクロについて質問です。

    エクセルのマクロについて質問です。 たとえば、 セルA1からAA1までのセルの中で、コピーとペーストを行います。(これは記録マクロで作ります) それと同じ作業を、3行下のA3からAA3の行でも行い、 また、3行下のA6からAA6の行で行う といった作業をマクロで作る方法を 教えていただきたいです。

  • エクセルマクロ 別シートへ行列を入れ替えてコピペ

    下記内容のエクセルのマクロをご教示いただきたいと存じます。 ①「data」シートのB2からデータが入力されている最終行までをコピー(20行目までデータが入力されていたとすると、B2~B20をコピー。最終行は不定) ②「result」シートのE列のデータが入力されている最終行の次行に①のデータを行列を入れ替えてペースト(E列のデータが19行目まで入力されていたとすると、「E20」セルに①のデータ<この場合だと、「data」シートのB2~B20のデータ>を行列を入れ替えてペースト。「result」シートのE列の最終行は不定)

  • Excelのマクロを連続で

     Excelのマクロを作ってあるワークシートがいくつかあります。それを、Aのワークシートを立ち上げてボタンを押してそのマクロを起動~終了。それが終わったら、Bのワークシートを立ち上げてボタンを押してそのマクロを起動~終了。それが終わったら、Cのワークシートを立ち上げてボタンを押してそのマクロを起動~終了。というように10回くらい作業しています。以前は、Aの次にCということもありましたが、今は、A~B~Cと決まった順序で起動しますので、これをマクロで自動化できないのでしょうか?ただし、現状のボタンでのそのワークシートのみの起動~終了も可能にしておきたいと思います。

  • 別シートにコピペするマクロの作り方?

    シートAのデータをコピーして、 そのデータを別シートに貼り付ける…というマクロを使っています。 貼り付ける先のシートには、どんどんデータがたまっていく倉庫のような役割です。 私がくんだマクロは、次のような手順で処理をします。 1.まず、そのシートのA1を選択し、 2.《CTRL+下》のようなコマンドで、「データが初めて空白になるセル」まで移動します。 3.そして、そこに「はりつけ」。 4.貼りつけが終わったら、もともといたシートに戻ってくる。 ・・・そういうマクロなのですが、あまりに洗練されていないというか、 ボタンをおすたびに、コンピューターの画面が切り替わって、 「ああ。頑張って作業をしてくれているな」 ということが、わかるマクロです。 ・・・ たしか、こうした一連の作業を、もっと高速処理できるマクロの組み方があったように思うのですが、どのようなプログラムをくんだらよいでしょうか?

  • Excelマクロ 統合セルの連続コピペ

    Excelマクロの初心者です 現在以下のことをマクロで行おうと思ってます。 ファイルAのシートAのC11に入ってる文章を同じファイル内にあるシート2のA46:F51の統合してあるセルにコピペします。 そして次にファイルAのシートD11に入ってる文章をシート3のA46:F51の統合してあるセルにコピペします。 このような作業をファイルAのAC11まで続けたいです。 どなたか教えて頂けないでしょうか? よろしくお願いします。

  • エクセル 別ファイルの情報を取り込むマクロ

    エクセル初心者です。上級者の方には簡単だと思うのですが 私にはどうやってもできないので教えて下さい。 Aというエクセルソフトがあります。これにデスクトップに一時保管したエクセルのファイルを開き(名前不特定)、シートの全体をコピーしたものをAのシート1に貼り付けをする方法はありますか? この後Aで貼り付けた情報を加工していくことになります。 今はいちいち手作業でコピー&ペーストしてますが 他の人も使うことになったので、マクロで処理できれば・・と思っています。よろしくお願い致します。

  • マクロで別シートに数値を移したいのですが・・・

    タイトルにありますとおり、マクロを駆使し、数値を別シートに移したいのですが なにぶんマクロに関してほとんど経験、知識はありません。 毎回手動でコピーを繰り返しているのですが、なんとかマクロで自動コピーできればありがたいです^^; 方法としては、フォームのボタンにマクロを埋め込むような形にしたいと思っております。 以下のようなシートがあったとします。 シート1 (抽出内容”平均”)    A   B   C   D   E   F   G 1  回数 25 2  2   3   4   6   3   2   9   3 1行目に、回数とあります。今回は25回目のデータとします。 2行目に、同一シートの別表から抽出された数値が並びます。 この数値は別表でオートフィルで抽出された数字ですので、毎回変更されるものとします。 今回は仮に”平均”という内容で抽出したデータだとします。 シート1 (抽出内容”合計”)    A   B   C   D   E   F   G 1  回数 25 2  10 10  20  11  15  16  8   3 同じく、25回目、抽出内容”合計”として、オートフィルで抽出した数値です。 シート2     A   B   C   D   E   F   G   H 100 回数 平均(1) 2  3  4  6  3  2  9  101 25  平均(2) 102     平均(3)  103     合計(1)10 10 20 11 15 16 8 104     合計(2) 105     合計(3) 106 107 108 回数 平均(1) 109 26  平均(2) シート2は、シート1で抽出された数値をコピーした表です。 A列は今回の回数、25となっております。この数値はこれより上に24回分の表があり、今回が25回目という意味です。 107行目以降も26、27、28と回数は続いていますが、現状では25が最新とし、108行以降は数値はなく、空白とします。 それぞれ平均、合計共に、シート1で3回抽出し、それぞれ別の数値が入るものとします。 これまでは、シート1で抽出後、手動でコピーし、シート2の該当セルに貼り付ける、という作業でした。 シート1  →   シート2  のコピーにマクロを使用したいのですが 回数が25の場合、シート2でA列を検索し、さらに抽出内容が”平均”1回目だった場合 平均(1)にコピーし、2回目だった場合平均(2)にコピーする、といった具合です。 イメージとしては、シート1に、(1)、(2)、(3) と、それぞれ入ったリストボックスなどがあり [平均][合計] のそれぞれボタンがあり、(1)を選び、平均を押すと100行目の平均(1)に入り 合計を押すと、103行目の合計(1)に数値が入る。と、いうような感じです。 この説明で私の意図するところが伝わるか不安ではありますが、このような場合に使えるマクロの式がございましたら ご教示いただけませんでしょうか^^; 実際の表とは若干ちがいますが、大まかなイメージとしては上に書いてある通りです。

  • エクセルのセルを参照して別シートに張り付ける

    こんにちは。 エクセルのsheet1とsheet2があり、sheet1のセルに入力されている文字や数値をsheet2にコピーしたいと思っています。ただし、コピー先のsheet2のセルの値は、sheet1を参照するだけでなく文字や数値として表示できないかと悩んでいます。 図で説明すると  (sheet1)                →           (sheet2)   A    B    C     D           A     B    C     D 1あああ  10  いいい  えおう        1いいい  えおう  10    あああ 2あああ  10  いいい  かけこ       2いいい  かけこ  10    あああ 3あああ  10  いいい  みまつ       3いいい  みまつ  10    あああ  4あああ  10  いいい  さぐも        4いいい   さぐも   10    あああ また、上記のようにsheet1とsheet2の列は同じ場所ではありません。 このような作業を1回で行うことはできるのでしょうか? よろしくお願いします。

専門家に質問してみよう