タイトル行をつけて別シートへ分割コピー
マクロ講座75b回
データを分割してコピーする Excel2013 マクロ講座 75b回
データを分割してコピーするタイトル行をつけて
前回は、データを分割して複数シートにコピーしました。でも、後からそれぞれのシートにも見出し行があったほうがいい、などという上司がいますよね。
もし手動で、分割しているとしたら、「早く言ってよぉ。」って思っちゃいます。
そんな時のためにデータを指定行数で分割すしたのですが、もう一つのマクロも用意しましょう。
必ず1行目に見出し行をつけるという設定のマクロです。
(サンプルファイルは、こちらから マクロ75b回サンプルデータ)
タイトル行をつけてデータを指定行数で分割
今度は、追加したそれぞれのページにタイトル行もコピーして、その下に分割したデータを貼り付ける場合です。
基本的なコードは、最初のケースと同じです。
コピー回数分の処理を繰り返す、For~Nextステートメントの中で、 元データの1行目をコピーして追加したシートのRange("A1")1行目に貼り付けるという操作を加えます。
元.Rows(1).Copy シート.Range("A1")
分割してコピーしたデータは、Range("A2")以降に貼り付ける事になります。
基本的なコードは、最初のケースと同じです。
コピー回数分の処理を繰り返す、For~Nextステートメントの中で、 元データの1行目をコピーして追加したシートのRange("A1")1行目に貼り付けるという操作を加えます。
元.Rows(1).Copy シート.Range("A1")
分割してコピーしたデータは、Range("A2")以降に貼り付ける事になります。
気をつける点は、データの総行数を-1すること、また貼り付けを開始する開始行が2に変わることです。下記コードのハイライト部分です。
Sub データを分割する最初の行はタイトル行() Dim シート As Worksheet, 元 As Worksheet '元は元データのあるシート Dim 総行数 As Long, 回数 As Long, i As Long, 開始行 As Long Const コピー行 = 100 Set 元 = ActiveSheet '変数の元をActiveSheetにセットする 総行数 = 元.UsedRange.Rows.Count - 1 回数 = Int(総行数 / コピー行) + IIf(総行数 Mod コピー行 > 0, 1, 0) 開始行 = 2 For i = 1 To 回数 Set シート = Sheets.Add シート.Name = "データ" & 開始行 - 1 & "~" & 開始行 + コピー行 - 2 & "まで" 元.Rows(1).Copy シート.Range("A1") 元.Rows(開始行 & ":" & 開始行 + コピー行 - 1).Copy シート.Range("A2") Columns("A:F").AutoFit 開始行 = 開始行 + コピー行 Next i End Subマクロを実行すると、下図のようになります。1行目はタイトル行で、分割されたデータが2行目以降に貼り付けられています。
Setステートメント
コードの中で、Setステートメントを使ってオブジェクト(ワークブックやワークシート)をオブジェクト変数というわかりやすい名称に変えて格納しています。
元となるデータのあるシートを元という名前の変数としてSetすることで、もとのオブジェクトと同等のプロパティやメソッドを使用することが可能になります。
元.Rows(1).Copy シート.Range("A1")
上記のコードは、Setステートメントを使っているからこそできるわかりやすいコードだと思います。
元.Rows(1).Copy シート.Range("A1")
上記のコードは、Setステートメントを使っているからこそできるわかりやすいコードだと思います。
今回は、タイトル行をつけてデータを指定行数で分割して別シートにコピーするというマクロを作成しました。
次回は、分割したデータを新規ブックを作成して貼り付け、さらに名前をつけて保存するマクロを考えます。
お疲れ様でした。
次回は、分割したデータを新規ブックを作成して貼り付け、さらに名前をつけて保存するマクロを考えます。
お疲れ様でした。