Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2373 / 13646 ツリー ←次へ | 前へ→

【68433】データの分割 びめびめ 11/3/5(土) 19:56 質問[未読]
【68434】Re:データの分割 kanabun 11/3/5(土) 20:39 発言[未読]
【68435】Re:データの分割 UO3 11/3/5(土) 20:55 回答[未読]
【68436】Re:データの分割 びめびめ 11/3/5(土) 22:13 お礼[未読]

【68433】データの分割
質問  びめびめ  - 11/3/5(土) 19:56 -

引用なし
パスワード
   datas.xlsというファイルがあります。
このファイルは6〜?行目(?は毎回変わります)がデータになっていて
1〜5行目は6行目以降のデータの説明に使われています。
今したい作業は次のとおりです。

1〜105行をdatas_001.xlsという名前で保存
1〜5行そして6行目からは、106〜205行のデータとしてdatas_002.xlsという名前で保存

1〜5行そして6行目からは、206〜305行のデータとしてdatas_003.xlsという名前で保存


と1〜5行目を残しつつ、100行ごとのデータに分割して保存したいのですが
datas.xlsの行数がその都度1200行だったり、1600行だったりと変わるので、
この部分の反復回数をどうプログラミングすればいいかわかりません。
ご指導願えませんか。
よろしくお願いします。

【68434】Re:データの分割
発言  kanabun  - 11/3/5(土) 20:39 -

引用なし
パスワード
   ▼びめびめ さん:

1〜5行目、+6行目 から 100行分 を → datas_001.xlsという名前で保存
1〜5行目、+106行目から 100行分 を → datas_002.xlsという名前で保存
1〜5行目、+206行目から 100行分 を → datas_001.xlsという名前で保存
・・・
ということですか?

Sub Try1()
 Dim WS1 As Worksheet
 Dim LastRow As Long
 Dim wb As Workbook
 Dim wbPath As String
 Dim i As Long, n As Long
 
 With Workbooks("datas.xls")
   wbPath = .Path & "\"
   Set WS1 = .Worksheets(1)
 End With
 LastRow = WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row
 For i = 6 To LastRow Step 100 '◆100行Step で
   n = n + 1
   Set wb = Workbooks.Add(xlWBATWorksheet)
   With wb.Worksheets(1)
     WS1.Rows("1:5").Copy .Cells(1)
     WS1.Rows(i).Resize(100).Copy .Cells(6, 1) '◆100行づつ
   End With
   wb.SaveAs wbPath & "datas_" & Format$(n, "000") & ".xls"
   wb.Saved = True
   wb.Close
   Set wb = Nothing
 Next

End Sub

【68435】Re:データの分割
回答  UO3  - 11/3/5(土) 20:55 -

引用なし
パスワード
   ▼びめびめ さん:

一例です。

Sub Sample()
  Dim i As Long
  Dim n As Long
  Dim cnt As Long
  Dim x As Long
  Dim p As Long
  Dim myPath As String
  
  Application.ScreenUpdating = False
  myPath = ThisWorkbook.Path '<==保存フォルダ 適宜変更
  
  With Sheets("Sheet1") '<== 適宜変更
    x = .Cells.SpecialCells(xlCellTypeLastCell).Column
    i = .Range("A" & .Rows.Count).End(xlUp).Row
    n = (i - 5) \ 100
    If (i - 5) Mod 100 <> 0 Then n = n + 1
    For i = 1 To n
      cnt = cnt + 1
      Workbooks.Add
      Range("A1").Resize(5, x).Value = .Range("A1").Resize(5, x).Value
      p = 5 + (i - 1) * 100 + 1
      Cells(6, "A").Resize(100, x).Value = .Cells(p, "A").Resize(100, x).Value
      ActiveWorkbook.SaveAs myPath & "\datas_" & Format(cnt, "000")
      ActiveWorkbook.Close
    Next
  End With
  Application.ScreenUpdating = True
  MsgBox "保存が完了しました"
End Sub

【68436】Re:データの分割
お礼  びめびめ  - 11/3/5(土) 22:13 -

引用なし
パスワード
   ▼kanabun さん:
▼UO3 さん:
お忙しいところご指導いただきまして、本当にありがとうございました。
試してみたところ、やりたいことが実現でき、うれしい限りです。

2373 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free