[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行を指定して自動分割』(みさ)
エクセル(EXCEL)VBAの質問です。数千行にわたって入力されているデータがありますが、これをこちらが指定した行づつに分割して、別々の新規SHEETへコピーしていきたいのですが、これを実現するVBAを教えていただけ ないでしょうか?
行の指定は、決まっています。 20行 100行 150行 200行 250行 300行 といった感じです。
毎回、シートのコピーを不必要な行を削除していますが、大変時間と労力がかかります。 ご教示いただけたら幸いです。
< 使用 Excel:Excel2016、使用 OS:Windows8 >
> 行の指定は、決まっています。
と言っても、数千行との整合性はどうなっていますか? 合計がピッタリ合うとも思えないのですが。
新規に作ったシートの名前はどうするんですか?
(半平太) 2020/05/22(金) 15:49
>数千行にわたって入力されているデータがありますが
シート名をSheets("Sheet1") としています。
Sub Test() Dim i As Long, s As Long Dim sh As Worksheet, LastRow As Long
With Sheets("Sheet1") LastRow = .Cells(Rows.Count, "A").End(xlUp).Row LastRow = Application.Ceiling(LastRow, 50) For i = 19 To LastRow If i = 20 Then With Worksheets .Add(after:=.Item(.Count)).Name = "1-20" End With .Range(.Cells(1, 1), .Cells(i, "A")).Copy Range("A1") s = i + 1 ElseIf i Mod 50 = 0 Then With Worksheets .Add(after:=.Item(.Count)).Name = s & "-" & i End With .Range(.Cells(s, "A"), .Cells(i, "A")).Copy Range("A1") s = i + 1 End If Next .Activate End With End Sub
(ピンク) 2020/05/22(金) 16:08
↑最後、端数が残るので修正しました。
(ピンク) 2020/05/22(金) 16:19
回答ありがとうございました。 もう1点追加で質問させてください。
行数ですが、失礼いたしました、質問用にサンプルデータとしてしまいましたが、 行数、1行目から50行を、シート1 行数、51行目から120行目を、シート2 行数、121行目〜230行目までを、シート3
にしたい場合、どのようにコードを書き換えますか? よろしくお願いいたします。
(みさ) 2020/05/22(金) 18:54
>行数、1行目から50行を、シート1 >行数、51行目から120行目を、シート2 >行数、121行目〜230行目までを、シート3 >にしたい場合、どのようにコードを書き換えますか
Sub Test() Dim i As Long
With Sheets("Sheet1") i = i + 1 With Worksheets .Add(after:=.Item(.Count)).Name = "シート" & i End With .Range("A1:A50").Copy Range("A1")
i = i + 1 With Worksheets .Add(after:=.Item(.Count)).Name = "シート" & i End With .Range("A51:A120").Copy Range("A1")
i = i + 1 With Worksheets .Add(after:=.Item(.Count)).Name = "シート" & i End With .Range("A121:A230").Copy Range("A1") End With End Sub
(ピンク) 2020/05/22(金) 19:34
Sub Test2() Dim i As Long, j As Long, s As Long
With Sheets("Sheet1") s = 1 For i = 1 To 3 j = Choose(i, 50, 120, 230) With Worksheets .Add(after:=.Item(.Count)).Name = "シート" & i End With .Range(.Cells(s, "A"), .Cells(j, "A")).Copy Range("A1") s = j + 1 Next End With End Sub
(ピンク) 2020/05/22(金) 20:00
ピンクさんありがとうございました。 誠に申し訳ありませんが、コピーをする際、列の幅、行の幅、印刷レイアウト等、 元シートと同じようにコピーするにはどうしたらいいですか?
何度もご質問し申し訳ありあせん。 (みさ) 2020/05/22(金) 21:04
>印刷レイアウト等、元シートと同じようにコピーするにはどうしたらいいですか?
元の状態が此方からは見えない
わかる範囲で
Sub Test3() Dim i As Long, j As Long, s As Long
With Sheets("Sheet1") s = 1 For i = 1 To 3 j = Choose(i, 50, 120, 230) With Worksheets .Add(after:=.Item(.Count)).Name = "シート" & i End With .Range(.Cells(s, "A"), .Cells(j, "A")).Copy Range("A1") Columns(1).ColumnWidth = .Columns(1).ColumnWidth Range("A1").Resize(j + 1 - s).RowHeight = .Cells(s, "A").RowHeight ActiveSheet.PageSetup.PrintArea = Range("A1").Resize(j + 1 - s).Address s = j + 1 Next .Activate End With End Sub
(ピンク) 2020/05/22(金) 22:03
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.