Excel VBA質問箱 IV

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

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


9112 / 13644 ツリー ←次へ | 前へ→

【29244】空白セルを削除しデータを左に詰める あいんすと 05/9/28(水) 22:57 質問[未読]
【29246】Re:空白セルを削除しデータを左に詰める とまと 05/9/29(木) 0:20 回答[未読]
【29248】Re:空白セルを削除しデータを左に詰める とまと 05/9/29(木) 8:55 回答[未読]
【29249】手作業での方法 Jaka 05/9/29(木) 9:43 発言[未読]
【29298】Re:空白セルを削除しデータを左に詰める あいんすと 05/9/30(金) 0:00 お礼[未読]

【29244】空白セルを削除しデータを左に詰める
質問  あいんすと  - 05/9/28(水) 22:57 -

引用なし
パスワード
   たびたびスイマセン。
シート全体でセルが空白である場合、データを左に詰めるように
Do Loopで組んだのですが、非常に時間が掛かります。
組み方が原始的ですが、こんな感じです。

(変更前)
 | A | B | C | D | E |
1   ■  ■     ■
2  ■            ■
3  ■     ■
4     ■  ■    

   ↓   ↓   ↓

(変更後)
 | A | B | C | D | E |
1   ■  ■  ■
2  ■  ■ 
3  ■  ■
4  ■  ■


Sub Example()

Dim i , j As Long

For j = 1 to 256
  For i = 1 to 65535
   If Cells(i, j) = "" then
     Cells(i, j).Select
     Selection.Delete Shift:=xlToLeft
   End If
  Next i
Next j

End Sub

・・・ひとつひとつじゃ使い物になりません。
スイマセンが何かいい方法ございますでしょうか?

【29246】Re:空白セルを削除しデータを左に詰める
回答  とまと  - 05/9/29(木) 0:20 -

引用なし
パスワード
   こんばんは。
もっと速いのはあるとおもいますけど
思い浮かばないので、たたき台で

Sub test()

Dim RowA As Long
Dim ColA As Long
Dim i As Long, K As Long, m As Long
Dim vntA


Application.ScreenUpdating = False
RowA = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
ColA = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
For i = 1 To RowA
  vntA = Cells(i, "A").Resize(, ColA).Value
  ReDim vntB(1 To 1, 1 To ColA)
  m = 1
    For K = 1 To ColA
     If vntA(1, K) <> "" Then
      vntB(1, m) = vntA(1, K)
      m = m + 1
     End If
    Next
  Cells(i, "A").Resize(, ColA).Value = vntB
Next
Application.ScreenUpdating = True


End Sub

【29248】Re:空白セルを削除しデータを左に詰める
回答  とまと  - 05/9/29(木) 8:55 -

引用なし
パスワード
   おはようございます
こっちの方がはやいかな。。
コードはデータ範囲を限定してるけど、
65536×256だと配列の制限にひっかかるのかな。


Sub test2()

Dim RowA As Long
Dim ColA As Long
Dim i As Long, K As Long, m As Long
Dim vntA


Application.ScreenUpdating = False
RowA = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
ColA = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column


ReDim vntB(1 To RowA, 1 To ColA)
For i = 1 To RowA
  vntA = Cells(i, "A").Resize(, ColA).Value
   m = 1
    For K = 1 To ColA
     If vntA(1, K) <> "" Then
      vntB(i, m) = vntA(1, K)
      m = m + 1
     End If
    Next
Next

Range("A1").Resize(RowA, ColA).Value = vntB
Application.ScreenUpdating = True


End Sub

【29249】手作業での方法
発言  Jaka  - 05/9/29(木) 9:43 -

引用なし
パスワード
   こんにちは。

手作業でも出来ます。速いかどうかは解りません。
範囲を選択して、
編集 → ジャンプ → セル選択 → 空白セルにチェック → OK
選択されたセルを右クリック削除で、左方向にシフト

【29298】Re:空白セルを削除しデータを左に詰める
お礼  あいんすと  - 05/9/30(金) 0:00 -

引用なし
パスワード
   ▼とまと さん:

お礼が遅れましたが、ありがとうございます。
早速使わせて頂きました。

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