excel、空白のセルを上に詰める

 これをマクロでするには?

回答の条件
  • 1人1回まで
  • 登録:2009/09/24 06:53:22
  • 終了:2009/10/01 06:55:02

回答(3件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/09/24 07:55:06

ポイント27pt

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

Sub Macro()
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Delete Shift:=xlUp
End Sub
id:ken3memo No.2

ken3memo回答回数246ベストアンサー獲得回数772009/09/24 07:38:28

ポイント27pt

マクロ記録で

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とか枠外のセルも上に上がっていくので、

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

id:johnny_shaman No.3

Johnny Shaman回答回数33ベストアンサー獲得回数12009/09/24 09:42:40

ポイント26pt

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とかになっているはずです。)

コメントはまだありません

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

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

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

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