- ベストアンサー
EXCELで、30行ごとに、新しいシートに自動的に移動する方法
いつもお世話になっております。 表題のとおりですが、現在4500行くらいあるデータを、ただ単に30行ごとに、新しいシートに分割・移動させたいのですが、非常に手間で困っています。 もしなにか良い方法がありましたら、ご教示ください。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 以下のマクロは、終了するまで、画面が動きません。 標準モジュールに取り付けてください。 もし、「"初期設定:STARTの数が足りません。"」と出ましたら、シートの数を増やすか、START の数を、実際にあるシートの左から順番の数字を入れてください。 Worksheets("Sheet1") の" " の部分に実際のシート名を入れてください。しかし、そのシートを分割のコピー側の対象にはしないでください。例:× START:1 (NG) 標準モジュールへの取り付け方: Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、 Alt + Q で、画面を閉じます。 後は、Alt + F8 で、「DivideRows」を実行してみてください。 ---------------------------------------- Sub DivideRows() Const GYO As Integer = 30 '行の分割 Const START As Integer = 2 'どこからのシートが最初? Dim i As Long Dim cnt As Integer Dim j As Integer j = START If START >= Worksheets.Count Then MsgBox "初期設定:STARTの数が足りません。", 32: Exit Sub Application.ScreenUpdating = False With Worksheets("Sheet1") For i = 1 To .Range("A65536").End(xlUp).Row Step GYO cnt = Worksheets.Count If j > cnt Then Worksheets.Add After:=Worksheets(cnt) .Rows(i & ":" & i + GYO - 1).Copy Worksheets(j).Range("A1") j = j + 1 Next i End With Application.ScreenUpdating = True End Sub なお、おそらく150シートになりますが、シート名の問題もあるかと思います。もし、シート名を独自につける必要がある場合は、上記を実行しないで、補足かお礼にコメントを付け加えてください。作り直します。
その他の回答 (1)
- marbin
- ベストアンサー率27% (636/2290)
一般関数でいけるかもしれませんが、 VBAでループさせた方が早いかも。 For ~Next で Step 30 とする、ですかね。 シート追加もVBAで可能です。
お礼
marbin様、早速のご回答、誠にありがとうございます! 実は小生、VBAがまったく扱えないんです(泣)。 そこをなんとか、ご教示願います!
お礼
Wendy02様、本当にありがとうございます!! 手順に従って、やってみます。 シート名はなんでもいいので、このまま利用させていただきますね。 取り急ぎ、お礼の返事をさせていただきます。 助かりました!