• ベストアンサー

エクセル2010で、空白セルを左詰めしたい

エクセル2010を使用しています。 VBAで以下の操作を実行したいと考えていますが、 初心者につき、ご教示いただけないでしょうか。 60万行くらいあるエクセルの表(CC列まで)で、 空白セルを左詰めしたいのですが 範囲指定(空白へのジャンプ)機能をするだけで固まってしまい 何度も操作が止まってしまい困っています。 VBAでスムーズに操作することができればと思うのですが・・・ よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 60万行全てを一度に処理したり、空白セルを1個ずつ処理するのではなく、1000行くらい毎に小分けして処理する様なマクロにされては如何でしょうか。 Sub Macro() Const m As Long = 1000 Dim i As Long, n As Long, w As Long, r As Range With ActiveSheet.UsedRange n = Int(.Rows.Count / m) Set r = .Resize(m, .Columns.Count) End With With Application .ScreenUpdating = False .Calculation = xlManual End With With r On Error Resume Next For i = 0 To n .Offset(m * i).SpecialCells(xlCellTypeBlanks).Delete xlToLeft Next i On Error GoTo 0 End With With Application .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub

noname#228034
質問者

お礼

ご連絡 遅くなりましたが、 ご教示 ありがとうございました! 少し時間はかかると思っていたのですが さほどの時間でもなく・・ なにしろ 固まることなく完了するので、とても助かりました! 本当にありがとうございます!!!

その他の回答 (1)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 空白セルを左詰めしたい とは、空白セルを削除して、その右側のセルを左に寄せるということですか? Sub test()   Dim r As Range   Dim t As Range   Set t = ActiveSheet.UsedRange   Application.ScreenUpdating = False   On Error Resume Next   For Each r In t.Rows     r.SpecialCells(xlCellTypeBlanks).Delete xlToLeft   Next   On Error GoTo 0   Application.ScreenUpdating = True End Sub 60万行もあると厳しいかもですね。

noname#228034
質問者

お礼

早速のご回答、ありがとうございます! やってみます。 他でも探して実行してみたのですが、 やはりデータ量の問題なんですかね・・・ どれも途中で固まってしまうので、質問させていただいたんです。