• ベストアンサー

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

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

noname#228034
noname#228034

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

  • ベストアンサー
  • 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
質問者

お礼

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

関連するQ&A

  • エクセルで空白セルを寄せたい

    エクセル2002使用です VBAは使わずに関数だけで空白セルがあるセルを詰めて表示したいのですが・・・   A|B|C|D|E|F|G 1 あ い う え お か き 2 ○   ○ ○   ○ の表を   A|B|C|D|E|F|G 1 あ う え か  2 ○ ○ ○ ○ のように表を書き換えたいのです。 1行目には必ず文字が入力されています。 2行目には入力されているセルと空白セルが不定期に入力されています。 2行目のセルが空白ならば、1行目のセルも削除して左へ詰めて 表を転記したいのです。 よろしくお願いします。

  • エクセルの空白セルの選択

    こんにちは いつもお世話になっています。  エクセルの空白セルの選択について教えてください。 A列、B列にデータがあります。それぞれの列で空白セルがありますが、同じ行で両列ともに空白のセルだけを選択する方法を教えてください。  単に「ジャンプ」から空白セルを選択すると片方にデータがある行のセルも選択してしまいます。片方にデータのある行は残し、両列ともに空白の行を削除したのです。  よろしくお願いします。

  • エクセルの空白セルの詰め方・・・

    行数・桁数がその時々により変わるシートで、その範囲に任意の値が入っています。 ただそのなかには空白セルも混じっています。 各桁毎に空白セルを左詰めしたいのですが、ひたすらカット&ペーストしかないのでしょうか? 効率的な方法がありましたら是非教えてください。 よろしくお願いします。

  • 空白セルを空白と認識しない?

    範囲指定をしてジャンプで「空白セル」を実行すると、きちんとグレー反転するセルがあるのですが、 VBAで if Isnull(Cells(I,3) then… と指定すると、そうではないセルとして認識されています。 なぜでしょうか?

  • エクセルで空白のセルを探して貼り付け

    エクセルVBAでSheet2の指定のセルをコピーして、 Sheet1にある表の中の指定の列の空白セルを探して貼り付けるVBAを作成したいのですが、うまく出来ません。 Sheet1の表は1行目、2行目は見出しの項目が並んでいます。 3行目から50行目までは値を入力するようになっていて、 51行目はそれらをの集計が表示されるようになっています。 下記のVBAを作成したら3行目~50行目までの空欄に貼り付けず、 52行目に貼り付けてしまいます。 ----------------------------------------------------------- Sheets("Sheet2").Range("B6").CurrentRegion.Copy Sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial xlPasteValues Application.CutCopyMode = False ------------------------------------------------------------ 修正して頂けないでしょうか? 宜しくお願いします。

  • 見た目空白セルの対処について

    エクセル上でA列に関数が入っていて、A列を値複写でB列にコピーしたケースについて B列上で空白のセルを選択しようとして「編集」→「ジャンプ」→「セルの選択」 →「空白のセル」の操作を行うと、該当なしとなってしまいます 空白部分のセル上で「Del」キーを操作したあと再度「編集」→「ジャンプ」→「セルの選択」→「空白のセル」の操作をしたところそのセルが選択されました ので、見た目は空白でも実際は空白でない状態になっていると思われます B列上の見た目の空白セルが部分部分にあるため、1つ1つ「Del」キー操作をするには大変な労力がいります。 簡単にB列上の見た目空白セルを選択する方法はないでしょうか

  • Excelで空白セルをつめて表示させたい

    お世話になります。 Excelの操作について教えてください。     A列  B列 1行  3 2行       2 3行  5 4行  4    1      ↓     A列  B列 1行  3    2 2行  5    1 3行  4 4行 と、空白でないのセルだけを、上に詰めて別のシートに表示させたいです。 出来れば関数を使って行いたいです。 いくつか同じような質問があったのですが、なかなかうまくいきません。 どなたか、ご教授下さい。

  • エクセルで1行目が空白の場合、列を削除したい

    こんにちは!質問をお願いします。 エクセルで表を作成していますが、1行目が空白のセルがある場合に、その列を削除したいのですが、VBAでどのようなコードにすればよいでしょうか? ※上記のD列を削除し左詰めにしたい。(空白セルはAからBBまでの間で、特定の位置以降で発生します。) ※ちなみに1行目には、=N というようにほかのセルを参照し、文字の入力があれば表示するようにしています。 初心者につき、うまく説明できていないかもしれませんが、よろしくお願いいたします。

  • 空白セルのあるエクセル表の並び替え

    空白セルのあるエクセル表の並び替え エクセル2002を使用しています。 エクセルの表で空白セルがたくさんあるのですが、 並び替えをしようとすると、行全体ではなく、行の一部しか並び変わってくれません。 空白行も含めて、行全体を並び替えるようにする方法はありますでしょうか? 宜しくお願い致します。

  • 空白セルをつめる。

    エクセルです。 空白のセルがあるので上方向に詰めたいのですが、よい操作方法ありますか? この場合はVBAを使用したほうが良いですか? ctrl+Gで空白行を削除できるのは知っているのですが、 行を削除すると困るのでそれ以外の方法を探してます。 A1   A1 ×   ×        ×  ×   ×  ×  上のように、上方向へ詰めたいのです。