• ベストアンサー

エクセルのマクロで変動する範囲にコピペ

いつもお世話になっております。 やりたいことは、 Sheet1において計算結果A1の値を変数nでとって、 (nが1以下になることはありません) A2のデータを W2からWnまで貼り付けたいのです。 そこで以下のマクロを書いてみました。 Range("A2").Select Selection.Copy Dim i As Integer Dim n As Integer n = Val(Worksheets("Sheet1").Range("A1").Value) For i = 2 To n Cells(i, 23).Select Next ActiveSheet.Paste しかし、これでは、(nが10とすると)  W10セルにしか貼り付けられません。 正しい記述方法をご教示ください。 よろしくお願いします。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>For i = 2 To n >Cells(i, 23).Select >Next >ActiveSheet.Paste 上記のFOR文の処理内容は、指定されたセルを選択(セレクト)するだけで、コピー処理はされていません。 「ActiveSheet.Paste」で貼付くのは、For文を抜けた後、最後に選択されているn行目のセルだけになります。 For~Next の間に、行いたい処理を記述して下さい。 For i = 2 To n Cells(i, 23).Paste Next

oresama
質問者

お礼

ありがとうございました。 Nextの位置が違っていたのですね。 無事解決できました。

その他の回答 (1)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

順番入れ替えるだけなら Sub マクロ名() Dim i As Integer Dim n As Integer n = Val(Worksheets("Sheet1").Range("A1").Value) For i = 2 To n Range("A2").Select Selection.Copy Cells(i, 23).Select ActiveSheet.Paste Next End Sub 簡略化すると Sub マクロ名() n = Val(Worksheets("Sheet1").Range("A1").Value) Range("W1", Range("W1").Offset(n, 0)) = Range("A2") End Sub

oresama
質問者

お礼

ありがとうございました。 無事解決できました。 簡略化したものもいいですね☆

関連するQ&A

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

    データをまとめるためのシートを追加し、 一つのブックにある全てのシートのBX6~CG15の範囲をA1を起点に下方向にコピー、 同様に同じブックにある全てのシートのC59~M68の範囲をK1を起点に下方向にコピーするというものを組んでみたのですが、C59~M68の範囲をまとめたものには範囲内の空白のセルも入っていますが、BX6~CG15の範囲をまとめたものは空白のセルが消えてしまいます。 この処理のあとに、A列が空白の行を削除するというものを入れたいので、できればどちらの範囲とも空白を入れたまままとめたいのです。 この空白のセルを消さずにまとめる方法がわかりません。 色々と調べて試していますがうまくいきません。 どこを修整するといいのでしょうか? 超初心者でコードの内容がまだまだわかっていません。 簡単な質問かもしれませんがご教示お願いします。 Sub Macro1() Dim sno As Integer Dim I As Integer sno = Worksheets().Count Sheets(1).Select Sheets.Add For I = 2 To sno + 1 Sheets(I).Range("BX6:CG15").Copy Sheets(1).Range("A65535").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste Next For I = 2 To sno + 1 Sheets(I).Range("C59:M68").Copy Sheets(1).Range("L65535").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste Next End Sub

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのにMacro1の方が実行しません。お教え願えませんでしょうか。 (尚、図形を枠線上にコピペしています。) Sub Macro1()実行しません。 Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 10 To 103 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste End Select Next Next End Sub Sub Macro2()実行します。 ActiveSheet.Shapes.Range(Array("四角形1")).Select Selection.Copy Range("J11:K11").Select ActiveSheet.Paste End Sub

  • やはり図形のクリアで実行時エラー1004

     図形を二行三列で一枡とし図形を貼り付けていますが、どうしても実行時エラー 「1004」が出て図形のクリアができません。(尚、四角形は枠線上にあります。) 対処法がありましたらお願いします。 Windows7・SP1 Office2010 Sub 図形の貼付け() Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 9 To 99 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste Case 2: ActiveSheet.Shapes("四角形2").Select Selection.Copy Cells(i + 1, j).Select ActiveSheet.Paste Case 4: ActiveSheet.Shapes("四角形3").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste Case 5: ActiveSheet.Shapes("四角形3").Select Selection.Copy Cells(i + 1, j + 2).Select ActiveSheet.Paste Case 6: ActiveSheet.Shapes("円1").Select Selection.Copy Cells(i, j).Select ActiveSheet.Paste End Select Next Next End Select End Sub Sub 図形のクリア() Dim myRng As Range Set myRng = Range("I10:CW43") Dim n As Integer, sp As Variant For n = ActiveSheet.Shapes.Count To 1 Step -1 Set sp = ActiveSheet.Shapes(n) If Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell), myRng) Is Nothing  (ここで実行時エラー1004になります。) Then sp.Delete End If Next Set myRng = Nothing End Sub

  • マクロでのActiveSheet.Pasteでのデバック

    関数の入ったセルを切取りで貼付けたいのですが、ActiveSheet.Pasteのところで"WorksheetクラスのPasteメソッドが失敗しました.”のデバッグになってしまいます。対応を教えていただけないでしょうかお願い致します。 Sub susiki() Columns("A:J").Select Selection.AutoFilter Selection.AutoFilter Field:=6, Criteria1:="AG" Dim kirix As Integer, kiriy As Integer Dim kiriz As Long kiriy = Range("A:A").Column kiriz = Range("F1").End(xlDown).Row For kirix = 1 To kiriy Range(Cells(kiriz, kirix), Cells(kiriz, kirix)).Select Selection.CurrentRegion.Select Selection.Cut Next kirix Selection.AutoFilter Field:=6, Criteria1:="DB" Dim harix As Integer, hariy As Integer Dim hariz As Long hariy = Range("A:A").Column hariz = Range("F1").End(xlDown).Row For harix = 1 To kiriy Range(Cells(hariz, harix), Cells(hariz, harix)).Select ActiveSheet.Paste Next harix Selection.AutoFilter End Sub

  • エクセルの範囲のコピー

    はじめて質問させていただきます。 エクセルにおいてシートの範囲をコピーし、他のブックのシートにコピーする下記のVBAがうまくいきません。 「ActivateSheet.Paste」において「実行時エラー424;オブジェクトが必要です」とのエラーメッセージがでます。申し訳ございませんが、ご教示お願いいたします。 -------------------------------------------------- Dim SourceFile, TourceFile, SourceSheet, TargetSheet As String Dim i As Integer, k As Integer SourceFile = "Book1" TargetFile = "Book2" SourceSheet = "Sheet1" TargetSheet = "Sheet1" Workbooks(SourceFile).Sheets(SourceSheet).Activate Columns("A:F").Select Application.CutCopyMode = False Selection.Copy Workbooks(TargetFile).Sheets(TargetSheet).Activate ActiveSheet.Cells(1, 1).Select ActivateSheet.Paste Workbooks(SourceFile).Sheets(SourceSheet).Activate

  • エクセルマクロの分割方法について

    Sub リスト登録() ' ' Macro3 Macro ' マクロ記録日 : 2008/6/2 ' ActiveSheet.Unprotect Password:="1234" If Range("G33").Value > 5 Then Sheets("リスト").Select ActiveSheet.Shapes("AutoShape 44").Select Selection.Copy Sheets("シート").Select Range("A15").Select ActiveSheet.Paste End If Dim Btn As Integer Dim strMsg As String strMsg = "リストに登録しますか?" Btn = MsgBox(strMsg, vbYesNo + vbQuestion, "MsgBox") If Btn = vbNo Then Dim YU As Shape For Each YU In ActiveSheet.Shapes If YU.Type = msoAutoShape Then YU.Delete End If Next If Btn = vbYes Then End If ActiveSheet.Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True Range("C11").Select End End If Dim newRange1 As Range, newRange2 As Range, newRange3 As Range Select Case Sheets("").Range("B3").Value Case 1 Set newRange1 = Sheets("リスト").Range("I6") Set newRange2 = Sheets("リスト").Range("AH6") Set newRange3 = Sheets("リスト").Range("AI6") 中略 Case 1000 Set newRange1 = Sheets("リスト").Range("I1005") Set newRange2 = Sheets("リスト").Range("AH1005") Set newRange3 = Sheets("リスト").Range("AI1005") ActiveWorkbook.Save Case Else End Select Application.ScreenUpdating = False Sheets("シート").Range("G8,G10,G12:G23,G25:G29,G31:G32").Copy newRange1.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True newRange1.UnMerge Sheets("シート").Range("D34").Copy newRange2.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Sheets("シート").Range("I29").Copy newRange3.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Sheets("シート").Select Range("C11").Select Range("D34,G8:G32,I29").Select Selection.ClearContents Range("C11").Select Dim SP As Shape For Each SP In ActiveSheet.Shapes If SP.Type = msoAutoShape Then SP.Delete Range("D34:K34").Select Application.CutCopyMode = False Selection.Merge Range("B3").Select End If Next ActiveSheet.Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub 上記のマクロを作成しましたが、64Kを超えてしまう為、分割したいのですが、どのように分割すればよいのか方法がわかりません、どなたかお分かりの方がいらっしゃいましたら宜しくお願いします。 マクロシート1~2~3といったつなぎの構文がわかりません宜しくお願い致します。

  • エクセルマクロ

    お世話になります。 下記の記述でどこがおかしいのでしょうか 上手く印刷できません。 Sub Macro13() ' ' 'Dim i As Long For i = 1 To 4 Range("Ai:Ei").Select Selection.Copy Sheets("カード").Select Range("G1:K1").Select Selection.Paste Range("A1:F21").Select Application.CutCopyMode = False ActiveSheet.PageSetup.PrintArea = "$A$1:$F$21" ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Next i End Sub

  • EXCELのVBAについて

    マクロのボタンで内容を削除する様に設定した所、 Dim re As Integer Sheets("投入シート").Select re = MsgBox("入力データをクリアします。" & vbCrLf & vbCrLf & "よろしいですか?", vbOKCancel, "クリア確認") If re <> vbCancel Then Sheets("投入シート").Select ActiveSheet.Unprotect Range("a1:c30").Select Selection.Copy Application.CutCopyMode = False Selection.Copy Sheets("work").Select Range("A1").Select ActiveSheet.Paste Sheets("投入シート").Select ActiveSheet.Unprotect Range("c4:c30").Select Selection.ClearContents Range("f31").Select Selection.Copy Range("c9").Select ActiveSheet.Paste Range("f33").Select Selection.Copy Range("c11").Select ActiveSheet.Paste Range("f32").Select Application.CutCopyMode = False Selection.Copy Range("c14").Select ActiveSheet.Paste Range("c4").Select Application.CutCopyMode = False 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End If Sheets("投入シート").Select Range("c4").Select End Sub この様に入力したのですがセルのC11の計算式だけセル番号が消えてしまいます。 どうしてでしょうか?ご指導をお願いします。

  • Excel VBA if文 マクロ強制終了するには?

    現在 2つのbookがあります。 ・データ data.xls ・集計 total.xls ★条件は以下 ・この2つのbookには同じ名前の 『sheet名・数』が情報保持しています。 ・sheet名は不特定の名前が付けられています。 ★処理したいマクロ内容 ・data.xls …の各sheet と total.xls 各sheet参照させて マッチしたら処理。 マッチしなかったらマクロ強制終了。 Sub match() Dim i As Integer For i = 1 To Worksheets.Count '任意のbookを指定します Windows("data.xls").Activate sheet_copy = ActiveSheet.Name Sheets(sheet_copy).Select '範囲を選択 コピーします Range("C2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy On Error Resume Next '---前後にシートが無い場合のエラーを無視 ActiveSheet.Next.Select '任意のbook と sheet を指定します Windows("total.xls").Activate sheet_paste = ActiveSheet.Name Sheets(sheet_paste).Select Range("D2").Select If sheet_copy = sheet_paste Then ActiveSheet.Paste ActiveSheet.Next.Select Else MsgBox "sheet miss match error!" '★マクロ強制終了 End If Next i End Sub ★部分に何と記述すればよろしいでしょうか? アドバイスお願い致します。

  • excel マクロ Selection.Formula

    VBA初心者です。 excelの表に文字を記入して、それをカード化したいと思ってます。 テキストボックスをN回コピーして、それぞれに名前をつけて、またそれぞれにテキストが入力されたセルへ参照先を指定したいのですが、上手くいきません。 Dim n As Integer 'カードのコピー回数はD4のセルを参照 n = Range("input!D4").Value If n >= 1 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card1" Selection.Formula = "=formula!B6" End If If n >= 2 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card2" Selection.Formula = "=formula!B7" End If If n >= 3 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card3" Selection.Formula = "=formula!B8" End If If n >= 4 Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card4" Selection.Formula = "=formula!B9" と延々と50回繰り返してます。 希望は150~200回繰り返したいのですが、 マクロ記録などや他の回答などを参考にしながら、 初心者なりに考えて、 Sub cardproductionA4() 'カードのコピー回数を指定 N=総回数 P=1~N回 Dim N As Integer, P As Integer N = Range("input!D4").Value 'カードのコピー For P = 1 To N If N >= P Then ActiveSheet.Shapes("card0").Select Selection.Copy ActiveSheet.Paste Selection.Name = "card" & CStr(P) Selection.Formula = "=formula!B(P+5)" End If Next P End Sub としました。 でも、参照先が漸次変わっていって欲しいのですが、 Selection.Formula の先がエラーで出来ません。 どのように記述すれば宜しいのでしょうか? あるいは、そもそもVBAを理解していないので、間違っているのかもしれませんが、 御教授お願い致します。

専門家に質問してみよう