• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで、行のcopy,Paste)

VBAで行のcopy,Paste - 要約

このQ&Aのポイント
  • VBAを使用して行のコピーと貼り付けをする方法についての質問です。ヤリタイ事その1では、特定のシートに新しいシートを追加し、それぞれのセルの値をコピーして次のシートに貼り付けたいという要望があります。しかし、正常に動作しないため、助言を求めています。ヤリタイ事その2では、ヤリタイ事その1が完了したら、別のブックに新しいシートをコピーして貼り付けたいという要望があります。こちらも上手くいかないため、アドバイスをお願いしています。
  • VBAを使用して行のコピーと貼り付けをする方法についての質問です。ヤリタイ事その1では、特定のシートに新しいシートを追加し、それぞれのセルの値をコピーして次のシートに貼り付けたいという要望があります。しかし、正常に動作しないため、助言を求めています。ヤリタイ事その2では、ヤリタイ事その1が完了したら、別のブックに新しいシートをコピーして貼り付けたいという要望があります。こちらも上手くいかないため、アドバイスをお願いしています。
  • VBAを使用して行のコピーと貼り付けをする方法についての質問です。ヤリタイ事その1では、特定のシートに新しいシートを追加し、それぞれのセルの値をコピーして次のシートに貼り付けたいという要望があります。しかし、正常に動作しないため、助言を求めています。ヤリタイ事その2では、ヤリタイ事その1が完了したら、別のブックに新しいシートをコピーして貼り付けたいという要望があります。こちらも上手くいかないため、アドバイスをお願いしています。

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

  • ベストアンサー
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

なんだかイマイチわからないけど(・_・; その2は、ANo.1の指摘どおりですね。名前は不定なのでsheets(1)で。 その1は・・・ ◆ こういうことかな? '--> ループの3行を差し替え Worksheets(2).Rows(1).Copy Rows(1) 'タイトル行コピー For kk = 2 To sheetsuu - 3 Step 1  Worksheets(kk).AutoFilter.Range.Offset(1).Copy Range("A65536").End(xlUp).Offset(1) Next kk '<-- ※Rowsは行。わかりにくければコッチで↓ Worksheets(2).Range("A1:Z1").Copy Range("A1:Z1") ◆以下、説明 回答に頼ると、理解がおいつかず混乱しがち。 ちゃんと処理を理解してね!! ◇ コピー対象がおかしい? > For kk = 4 To sheetsuu - 1 Step 1 > Worksheets(kk - 3)... -3 してるので結局、sheets(1 to sheetsuu - 4)になってます。シートindexは左から1,2,3・・・。直前で左端(1)に追加しているので、コピー対象は 2 ~ sheetsuu-3 では? たぶんsheets(1)にはAutoFilterがないので、オブジェクトがない!ってエラーになるかと。 ◇ タイトル行をコピーする処理 が無いのは分かってる・・・?念のため説明  .AutoFilter:オートフィルターの  .Range  :セル範囲を  .Offset(1):下方に1ずらした範囲 をコピーしてます。 タイトル行を含まないようズラしているので、コレはOK。あとは、ループ前(か後)にタイトル行のみをコピーするだけ。 ◇ デバッグ コピーなんてセルを正しく指定するだけなので、セル選択でもすれば1発で確認できます。 for kk = 1 to sheets.count  sheets(kk).Select  sheets(kk).AutoFilter.Range.Select  Stop '一時停止(F5/F8で継続)  Selection.Offset(1).Select  Stop '一時停止(F5/F8で継続) next こういうの大事。1つずつ確認。理解も深まります。 また、ブレイクポイント、ステップ実行、ローカルウィンドウなど、便利なデバッグ機能も多いです。ぜひ使えるようになってください。

19560816
質問者

お礼

皆さんどうも有難う御座いました。問題の説明不足で、混乱を招いてしまったみたいですけど、皆さんのご回答を参考にさせて頂き無事解決しました。本当に有難う御座いました。これからも何卒宜しくお願い申し上げます。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

No1です No2様、フォローありがとうございます コピー&ペーストの方法で .Copy コピー先 という書き方があるんですね。お騒がせしてすいませんでした。

すると、全ての回答が全文表示されます。
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.3

>>ANo.2 補足。Worksheets(2)はSheet4じゃなくてSheetNだと思うけど。同じだよね・・

すると、全ての回答が全文表示されます。
回答No.1

不具合が発生する箇所 >For kk = 4 To sheetsuu - 1 Step 1 4から始まるのに、終わりが4未満になるケースが発生するのは不正 >Worksheets(kk - 3).AutoFilter.Range.Offset(1).Copy Range("A65536").End(xlUp).Offset(1) コピーしたあとの貼り付け(PasteSpecial等)が無い 質問者様のやりたい事と少しづれているかもしれませんが、作ってみました。 Sub SheetAdd() Dim sheetsuu As Integer 'sheetsuuはシートの数です。 Dim kk As Integer Dim m As Integer Dim strtNum As Integer 'シートN+1の貼りつけ開始行 Dim endNum As Integer 'シートN+1の貼りつけ終了行 'シート数を取得 sheetsuu = ActiveWorkbook.Worksheets.Count 'シート数が4以上ある事下記処理を行う 'シート数:(スキップ用のシート数+取得元Nシート数) If sheetsuu + 1 > 4 Then 'シート数Nの数分、値を取得 For kk = 4 To sheetsuu - 1 Step 1 ActiveWorkbook.Worksheets(kk).Activate MaxRow = ActiveWorkbook.Worksheets(kk).Cells(Rows.Count, 1).End(xlUp).Row '1行目の項目行以降に値が設定されているか判定 If MaxRow > 1 Then Worksheets(kk).Range("2:" & MaxRow).Copy '貼りつけ開始行・終了行を設定 strtNum = endNum + 1 endNum = endNum + MaxRow - 1 'シートN+1に値を設定 '1行目に値を設定する場合 If strtNum = 1 Then Worksheets(sheetsuu).Range("1:" & endNum).PasteSpecial '2行目以降に値を設定する場合 Else Worksheets(sheetsuu).Range(strtNum & ":" & endNum).PasteSpecial End If End If Next kk End If End Sub 補足: 本マクロは、シートN及びシートN+1がある場合に動きます。 理由は、毎回実行するとシートが増え続けてしまうからです。 最終のシート名が決まっていれば、if文を追加して、Addすれば問題ないかと思います。 >Worksheets(kk - 3).AutoFilter.Range.Offset(1).Copy Range("A65536").End(xlUp).Offset(1) エクセルで複数シートの同時コピーは可能ですか? そのあたりが、少しわからなかったので、1シートごとに値を貼りつける処理で作ってみました。 ヤリタイ事その2 >ThisWorkbook.Worksheets("Sheet &kk").Copy Before:=Worksheets("Sheet1") 変数は""で囲んではいけません。 シート名が、Sheet & kkとなります。 書くなら、("Sheet" & kk) Worksheetsの引数はSheet1より、1のほうがよいのでは? 場合によりけりですが、Sheet1が無い場合、エラーとなります。 もちろん、1番目にSheet2が来てる場合は別ですが・・・

19560816
質問者

お礼

ご回答頂けるとは、思いもしませんでした。本当に有難う御座います。明日ためして見ます。

すると、全ての回答が全文表示されます。

関連するQ&A