
大量のデータを指定行数ごとに分割して別シートに分ける作業をします。
100行ごとに別シートへコピー Excel2013 マクロ講座 75回
今日、紹介するのは、データベースのように大量のデータが記載されているシートを、指定数ごと(仮に100行ごと)に分割して別シートにコピーするマクロです。
データがあまりにも大量にあると、シートも長くし、とても見づらくなりますね。
サンプルでは500件のデータを100件ごとに分割して、同じブック内の別シートにコピーするというマクロを作ります。
(サンプルファイルは、こちらから マクロ75回サンプルデータ)

Dim 総行数 As Long, 回数 As Long Const コピー行 = 100 回数 = Int(総行数 / コピー行) + IIf(総行数 Mod コピー行 > 0, 1, 0)
IIf 関数構文
式の評価に基づいて、2 つの部分のいずれかを返します。
見間違いではありません。If関数の前にIがついて、IIf関数です。シート関数のIF版がIIf関数だと思って大丈夫です。
IIf(expr, truepart, falsepart)
引数truepartには、評価した式がTrueのときの値または、式を記述し、
引数Falsepartには、評価した式がFalseのとき値または式を記述します。
| 引数 | 説明 |
|---|---|
| expr | 必須です。 評価する式。 |
| truepart | 必須です。exprがTrue の場合に返される値または式。 |
| falsepart | 必須です。exprがFalseの場合に返される値または式。 |

Range.Copy メソッド
| 名前 | データ型 | 説明 |
|---|---|---|
| Destination | Variant | コピー先のセル範囲。 この引数を省略すると、クリップボードにコピーされます。 |
Sub データを100行ごとに分割する()
Dim シート As Worksheet, 元 As Worksheet '元は元データのあるシート
Dim 総行数 As Long, 回数 As Long, i As Long, 開始行 As Long
Const コピー行 = 100
Set 元 = ActiveSheet '変数の元をActiveSheetにセットする
総行数 = 元.UsedRange.Rows.Count
回数 = Int(総行数 / コピー行) + IIf(総行数 Mod コピー行 > 0, 1, 0)
開始行 = 1
For i = 1 To 回数
Set シート = Sheets.Add
シート.Name = 開始行 & "~" & 開始行 + コピー行 - 1
元.Rows(開始行 & ":" & 開始行 + コピー行 - 1).Copy シート.Range("A1")
Columns("A:F").AutoFit
開始行 = 開始行 + コピー行
Next i
End Sub
指定行数をコピーして新規シートに貼り付けるマクロの結果です。