Sub ExportDataInBatches()
Dim rs As Recordset
Dim db As Database
Dim strSQL As String
Dim batchCount As Integer
Dim batchSize As Integer
Dim recordCount As Long
Dim i As Integer
' バッチサイズとエクスポートするデータの数を設定
batchSize = 1000 ' 1つのバッチのサイズ
strSQL = "SELECT * FROM YourTableName" ' エクスポートするデータのクエリを指定
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
recordCount = rs.RecordCount
' バッチの数を計算
batchCount = recordCount \ batchSize
If recordCount Mod batchSize > 0 Then
batchCount = batchCount + 1
End If
' バッチごとにデータをエクスポート
For i = 1 To batchCount
rs.MoveFirst
rs.Move (i - 1) * batchSize
If i = batchCount Then
' 最後のバッチの場合、残りのすべてのレコードをエクスポート
batchSize = recordCount Mod batchSize
End If
ExportBatchToExcel rs, batchSize, i
Next i
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
Sub ExportBatchToExcel(rs As Recordset, batchSize As Integer, batchNumber As Integer)
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim i As Integer
Dim j As Integer
' 新しいExcelアプリケーションを開始
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False ' Excelを表示しないように設定
' 新しいブックを作成
Set xlBook = xlApp.Workbooks.Add
' レコードセットからデータをエクセルにコピー
For i = 1 To batchSize
For j = 0 To rs.Fields.Count - 1
xlBook.Sheets(1).Cells(i, j + 1).Value = rs.Fields(j).Value
Next j
rs.MoveNext
If rs.EOF Then Exit For
Next i
' エクセルファイルを保存
xlBook.SaveAs "Batch_" & batchNumber & ".xlsx"
' ブックを閉じる
xlBook.Close
' Excelアプリケーションを終了
xlApp.Quit
' オブジェクトを解放
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End Sub