人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

excel、空白のセルを上に詰める
これをマクロでするには?

●質問者: mitsueda
●カテゴリ:コンピュータ
✍キーワード:Excel セル マクロ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● SALINGER
●27ポイント

前回の質問の回答をマクロの記録すればいいだけです。

Sub Macro()
 Selection.SpecialCells(xlCellTypeBlanks).Select
 Selection.Delete Shift:=xlUp
End Sub

2 ● ken3memo
●27ポイント

マクロ記録で

D2を選択してからセルの削除 上方向を記録すると

Range("D2").Select

Selection.Delete Shift:=xlUp

選択してから選択場所を削除だと変なので(いちいち選択したくないので)

普通に

Range("D2").Delete Shift:=xlUpと1行にまとめても削除されます。

あとは、空白の判断をIf Len(Cells(1, 1)) = 0 で判断したり、Trim関数とかで行って、削除すれば可能かなぁ。

If Len(Cells(1, 1)) = 0 Then Cells(1, 1).Delete Shift:=xlUp

Sub test() '設定した範囲の空白セルをTrimで調べて削除(上に詰める)
 
 Dim r As Object
 Dim n As Long
 
 Set r = Range("B2:G10")  '範囲をセット
 
 For n = r.Count To 1 Step -1  '指定範囲を後ろから1つ1つ調べる
 If Trim(r(n).Value) = "" Then '空白の判断
 r(n).Delete Shift:=xlUp  '削除 上方向指定
 End If
 Next

End Sub

※↑空白セルを消し、1つ上に行くので、チェック範囲はB2:G10でずか、

例えばB20とか枠外のセルも上に上がっていくので、

作ってみたけど汎用性は無かったりします。参考程度にみてください。


3 ● Johnny Shaman
●26ポイント

For each r in Range...を使った方が、よりオブジェクティブな良いソースになりますね…

Sub test() '設定した範囲の空白セルをTrimで調べて削除(上に詰める)

Dim c As Object

For each c in Range("A1:F20") '範囲をセット オブジェクト名が違ってたらすみません;

If c.Value = "" Then '空白の判断

c.Delete Shift:=xlUp '削除 上方向指定

End If

Next

End Sub

ちなみに、Excelのメニューの中に、Visual Basic Editor というのがありますので、(ヘルプの中から簡単に見つかるはずです。そこで、メニューから、モジュールを一つ作って、このソースコードをコピーして、Visual Basic Editorを閉じ、Excelのメニューでマクロからマクロの実行で実行できます。(たぶん名前はModule1とかになっているはずです。)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ