タイトル行をつけて別シートへ分割コピー

リンクユニット


データを分割してコピーする Excel2013 マクロ講座 75b回

データを分割してコピーするタイトル行をつけて

前回は、データを分割して複数シートにコピーしました。でも、後からそれぞれのシートにも見出し行があったほうがいい、などという上司がいますよね。
もし手動で、分割しているとしたら、「早く言ってよぉ。」って思っちゃいます。 そんな時のためにデータを指定行数で分割すしたのですが、もう一つのマクロも用意しましょう。 必ず1行目に見出し行をつけるという設定のマクロです。

(サンプルファイルは、こちらから マクロ75b回サンプルデータ

タイトル行をつけてデータを指定行数で分割

今度は、追加したそれぞれのページにタイトル行もコピーして、その下に分割したデータを貼り付ける場合です。
基本的なコードは、最初のケースと同じです。
コピー回数分の処理を繰り返す、For~Nextステートメントの中で、 元データの1行目をコピーして追加したシートのRange("A1")1行目に貼り付けるという操作を加えます。
元.Rows(1).Copy シート.Range("A1")
分割してコピーしたデータは、Range("A2")以降に貼り付ける事になります。
データを分割してコピーするマクロ1

気をつける点は、データの総行数を-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行目以降に貼り付けられています。
データを分割してコピーするマクロ2

Setステートメント

コードの中で、Setステートメントを使ってオブジェクト(ワークブックやワークシート)をオブジェクト変数というわかりやすい名称に変えて格納しています。 元となるデータのあるシートを元という名前の変数としてSetすることで、もとのオブジェクトと同等のプロパティやメソッドを使用することが可能になります。
元.Rows(1).Copy シート.Range("A1")
上記のコードは、Setステートメントを使っているからこそできるわかりやすいコードだと思います。
データを分割してコピーするマクロ3
今回は、タイトル行をつけてデータを指定行数で分割して別シートにコピーするというマクロを作成しました。
次回は、分割したデータを新規ブックを作成して貼り付け、さらに名前をつけて保存するマクロを考えます。
お疲れ様でした。
スポンサーリンク
スポンサーリンク
おすすめコンテンツ