Excel2007で6万5千行を超えたデータを.xlsx形式で扱っています。これを過去の.xls形式で受け渡すことができるように、適当な行のところで複数のワークシートに分割したいのですが、手でちまちま分割する以外によい方法ありますでしょうか。スタイルを維持する必要があるためcsvデータに戻してしまう方法は取れません。

回答の条件
  • 1人2回まで
  • 登録:2008/03/06 13:46:30
  • 終了:2008/03/13 13:50:02

回答(0件)

回答はまだありません

  • id:BaBo
    VBAでマクロを書くといいと思います。
    具体的には、回答する時間がないので他の方の回答に期待。
  • id:hayate_007
    http://oshiete1.goo.ne.jp/qa2938236.html

    上記でマクロを使った方法が紹介されています.
    自分は検証できませんのでコメントでお茶を濁させてもらいます.
  • id:kkano
    きりしまかの 2008/03/06 18:47:25
    コメントありがとうございます。
    何か便利なツールで出来ると思ってみたのですが、無理ぽそうなので諦めて自力でVBA書きました…。
    以下、ご自由にお使いください。

    ' シートを分割
    Sub split_sheets()
      Dim rc As Long
      Dim Sheetid As Integer
      Dim perSheet As Long
      Dim srcSheet As String
     
      '1シートあたりの行数
      perSheet = 20000
      
      rc = UsedRange.Rows.Count
      cc = UsedRange.Columns.Count
      srcSheetName = ActiveSheet.Name
      
      For i = 1 To 9999
         ' 新シートを作成してナンバリング
         Dim newSheetName As String
         newSheetName = "PAGE-" & i
         Sheets.Add After:=Worksheets(Worksheets.Count)
         ActiveSheet.Name = newSheetName
        
         'コピー範囲を決定
         Dim copyBegin, copyEnd As Long
         copyBegin = 1 + (i - 1) * perSheet
         copyEnd = IIf(((perSheet * i) > rc), rc, (perSheet * i))
        
         'データコピー
         Sheets(srcSheetName).Rows(copyBegin & ":" & copyEnd).Copy Sheets(newSheetName).Range("A1")
        
         'セル幅を継承
         For j = 1 To cc
          Sheets(newSheetName).Columns(j).ColumnWidth = Sheets(srcSheetName).Columns(j).ColumnWidth
         Next
        
         If copyEnd = rc Then
          Exit For
         End If
      Next
      
    End Sub

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません