• ベストアンサー

Excel VBA 複数のオブジェクトのコピーについて

皆様、こんにちは。 いつもお世話になっています。 ActiveSheetに、他のシートのRange("B4:AC58")をコピーしたいですが、 ActiveSheetのRange("B1")に入力された値に合わせて、Range("B4:AC58")がコピーされる回数を設定したいです。 例えば、Range("B1")に1が入力されていれば、Range("B4:AC58")を1回だけコピーする、2でしたら2回、etc. ループを作ればできそうですが、変数の設定がよくわからなくて困っています。 ループなしのものを一応、作りましたが、そこからはどうすればいいかを教えていただければ幸いです。 どうぞよろしくお願いいたします。 Dim i As Integer i = Worksheets("Sheet2").Range("B1").Value Dim MyForm As Variant Set MyForm = Worksheets("フォームtest").Range("B4:AC58") For ? Worksheets("Form").Activate MyForm.Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("B3") Next

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

for n = 1 to i   :   : ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("B" & 3 + ( n - 1 ) * 55 ) next n こういう事かな?

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

Destinationの問題でしょう。始めの質問だけだと、内容がはっきりしない。 補足で i = 1 の場合、Range("B3")へ、 i = 2 の場合、Range("B3")およびRange("B58") i = 3 の場合、Range("B3")、Range("B58")およびRange("B113") ・・・ なら、このルール性を式にして、指定したら仕舞いでしょう。プログラマーなら日常茶飯事で、それをまず考えるだけのこと。 3-58-113・・なら+55が推定される。それだけのこと。 iの回数の数字によって、行は 3+(i-1)*55

lyu05665
質問者

お礼

imogasi様、hige_082様、fujillin様、 反応が大変遅くなり申し訳ありません。 お蔭様で問題が解決できました。 本当にありがとうございました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

ループする回数がiに入っているのでしょうから For n = 1 To i  繰り返す処理 Next i みたいな感じでいけると思いますが、 >1回だけコピーする、2でしたら2回、~~ 同じものを同じところにコピーするわけではないでしょうから、コピーする内容、ペーストの位置が移動すると思います。 (まったく同じことを、何度繰り返しても結果は変わらないので) 具体的な変化が不明なので、「繰り返す処置」のところが書けませんが、回数に応じてそのあたりが変化するように(例えばnをインデックスにして書くとか)「繰り返す処置」の部分を書いてあげる必要があります。

lyu05665
質問者

補足

fujillin様、 返事をどうもありがとうございます。 おっしゃっているように、コピーするところは、コピーの回数によって変わります。 i = 1 の場合、Range("B3")へ、 i = 2 の場合、Range("B3")およびRange("B58") i = 3 の場合、Range("B3")、Range("B58")およびRange("B113") ・・・ のように、iは1つ増えれば、コピーの回数、そしてコピーするところを一つ増やしたいですが、やり方がわかりません。

関連するQ&A

  • マクロについて教えてください。

    最近、勉強し始めました。 名簿を作成しています。Sheet1のデータを2種類に分けてSheet2(県外)、Sheet3(県内)のあらかじめ作成している表に振り分けたいのです。 しかしながら、1名分のデータをコピーして張り付けることはしたのマクロで出来たのですが、2名分もこのようにするとなると手入力したほうが速いような気がしています。 なにかいい方法がありましたら教えてください。 Sub コピーして別のシートに貼り付ける1() Worksheets("Sheet1").Activate Range("B11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("B10:E17") Range("C11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("A18:E19") Range("D11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("F10:K17") Range("E11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("F18:K19") Range("F11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M10:S10") Range("G11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M11:S11") Range("H11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M12:S12") Range("I11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M13:S13") Range("J11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M14:S14") Range("K11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M15:S15") Range("L11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M16:S16") Range("M11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M17:S17") Range("N11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M18:S18") Range("O11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M19:S19") Range("P11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("T10:T19") Range("Q11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("U10:U19") Range("R11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("V10:V19") Range("S11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("W10:W19") Range("T11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("X10:X19") Range("U11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("Y10:Y19") Range("V11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("Z10:Z19") Range("W11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("AA10:AA19") Range("X11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("AB10:AB19") Range("Y11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("AC10:AG19") End Sub

  • VBAのコピー

    VBAのコピー Dim xls As New Excel.Application Dim wbk As New Excel.Workbook Dim sh3 As Worksheet Set sh3 = Worksheets("全") sh3.Activate sh3.Range("A1:Z65536").Select Selection.Clear Set wbk = xls.Workbooks.Open("\\***.***.*.***\管理\全データ抽出.xls") wbk.Worksheets("全").Activate 'ワークシートをアクティブにする wbk.Worksheets("全").Range("A1:Z65536").Copy 'コピーする 'ActiveSheet.Paste Destination:=Worksheets("全").Range("A1") '貼り付ける Worksheets("全").Range("A1").PasteSpecial Paste:=xlPasteValues wbk.Close SaveChanges:=False 'Worksheets("メイン").Cells(1, 1).Select を実行すると 『wbk.Close SaveChanges:=False』のところで クリップボードに大きな情報があります。・・・・ と言うメッセージがでて必ずとまってしまうのですが メッセージをでないようにしたいのですが 教えてください。お願いします。

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

    困ってしまったので質問させてください 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の記述について

    マクロ初心者です。 エクセルで選択範囲を指定後コピーし、 自動的に別のシートの末尾に貼り付けられるようにしたのですが、 この内容のまま「貼り付け」を「値のみ貼り付け」に訂正する場合 どのように変更すればいいのか、教えてくださると嬉しいです。 宜しくお願いいたします。 Sub 選択範囲をコピー後、指定シートの末尾に貼り付け Worksheets("sheet1").Activate Range("b11:I17").Copy Workbooks("book2.xls").Worksheets("Sheet1").Activate 行 = Range("B1").CurrentRegion.Rows.Count + 1 ActiveSheet.Paste _ Destination:=Workbooks("book2.xls").Worksheets("Sheet1").Range("B" & 行) End Sub

  • ExcelのVBAについての質問です。

    ExcelのVBAについての質問です。 計測機器をつないでsheet1に数値が書き込まれていってる状況です。下記のプログラムを特定の時間内に複数回ループされるように設定したいのですが、そのようなプログラムを加えればいいのでしょうか? Sub Macro1() ' ' Macro1 Macro ' ' Dim iRows As Integer Dim sRows As String ' 最終行の調査: iRows = Worksheets("Sheet1").UsedRange.Rows.Count ' 最終行をシート3にコピー Worksheets("Sheet1").Rows(iRows).Copy Destination:=Worksheets("Sheet3").Range("1:1") ' CH1 の最新データをシート3にコピー Worksheets("Sheet3").Range("B4").Value = Worksheets("Sheet1").Cells(iRows, 3).Value ' CH2 の最新データをシート3にコピー Worksheets("Sheet3").Range("B5").Value = Worksheets("Sheet1").Cells(iRows, 4).Value End Sub

  • ExcelのVBAについて質問です。Excelは2003です。

    ExcelのVBAについて質問です。Excelは2003です。 コマンドボタン1で下記のプログラムを実行するようにしています。 Sub Macro1() ' ' Macro1 Macro ' ' Dim iRows As Integer Dim sRows As String Dim i As Integer For i = 1 To 100 Application.Wait Now + TimeValue("00:00:05") ' 最終行の調査: iRows = Worksheets("Sheet1").UsedRange.Rows.Count ' 最終行をシート3にコピー Worksheets("Sheet1").Rows(iRows).Copy Destination:=Worksheets("Sheet4").Range("1:1") ' CH1 の最新データをシート3にコピー Worksheets("Sheet3").Range("B9").Value = Worksheets("Sheet1").Cells(iRows, 3).Value ' CH2 の最新データをシート3にコピー Worksheets("Sheet3").Range("C9").Value = Worksheets("Sheet1").Cells(iRows, 4).Value Next i End Sub これをコマンドボタン2で途中でも強制的に終了するようにしたいのですがコマンドボタン2にはどのようなプログラムを入れればいいでしょうか?

  • マクロでコピー貼り付けやってみたいのですが。

    マクロの初心者です。Dim で宣言してやりたいと思っています。 既存のExcelの機能で出来ないことはないと思いますが、敢えて、マクロででないか。 やってみたいと思っています。 やりたいこと等について 1 sheet1のE2:J1109の範囲のデータをコピーしての別sheet2のE3:J1110の範囲に貼り付けたい。 2 その時に最終行を取得してコピーをするとしたら、どんなコードが必要なのか 3 最終行の取得のコードの書き方が分からない 4 ネットで下記のような(一部変更)に作ってみたが、これで良いのでしょうか、わからない。 以上のことを答えて頂けませんか。よろしくお願いします。 Sub テスト() Dim range1 As Range Set range1 = Range("E2:J1109") range1.Copy ActiveSheet.Paste Destination:=("sheet1").Range("E2:J1109") ActiveSheet.Paste Destination:=("sheet2").Range("E3:J1110") Application.CutCopyMode = False End Sub

  • 【VBA】コピー&複数個所のペースト繰り返し

    下記のように、1つの値をコピーし、別シートの複数個所(同じ列の違う行)へ順次ペーストしたいのですが、貼付けデータやペースト箇所が増えた場合でも対応できるようなVBAを教えてください。 よろしくおねがいいたします。 ========================================================= Sub コピペ() '←1人目をコピー Worksheets("“コピー元シート”").Range("B7").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B9", "B37", "B65", "B93", "B121", "B149", "B177").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←2人目をコピー Worksheets("“コピー元シート”").Range("B8").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B11", "B39", "B67", "B95", "B123", "B151", "B179").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←3個の値をコピー Worksheets("“コピー元シート”").Range("B9").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B13", "B41", "B69", "B97", "B125", "B153", "B181").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←4個の値をコピー Worksheets("“コピー元シート”").Range("B10").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B15", "B43", "B71", "B99", "B127", "B155", "B183").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←5個の値をコピー Worksheets("“コピー元シート”").Range("B11").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B17", "B45", "B73", "B101", "B129", "B157", "B185").Select Selection.PasteSpecial Paste:=xlPasteFormulas End Sub

  • Excel VBAで異なるファイル間のコピー

    異なるファイル間で値のみをコピーしたいです。下記の様な感じです。 hoge1.xlsのA1からA10のセルの値のみをhoge2.xlsのB1からB10へコピーする。 以下の様に書いてみたのですが、数式がコピーされてしまいます。 VBAをやったことがなく、今ネットで30分ほど見て書いてみたので 根本的に理解していません。簡単な書き方を教えていただきたいです。 Sub test() Dim Fname As String Fname = "hoge1.xls" Workbooks.Open Filename:=Fname, ReadOnly:=True Dim range1 As Range Set range1 = Worksheets("Sheet1").Range("A1:A10") range1.Copy Destination:=Workbooks("hoge2.xls").Worksheets("Sheet1").Range("B1:B10") End Sub また、ファイルを開いたり閉じたりは必要なのでしょうか? Workbooks.Open Filename:=Fname, ReadOnly:=True を書かずに、いきなり Set range1 = Workbooks("hoge1.xls").Worksheets("Sheet1").Range("A1:A10") はダメなのでしょうか?? よろしくお願いします。

  • Excel vba selectが効かない

    2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

専門家に質問してみよう