1512766136 エクセルマクロVBA セルの空白判定後の行の削除



★詳しくは画像もご確認ください。


B、D、F、Hの列内のセルを調べて空白だったら、そのとなりの対になる
A、C、E、Gのセルも含め上方向に削除していく処理をしたい。


B、D、F、H列にあるものが商品名でして、
A、C、E、G列がその保管場所です。

ですので、B、D、F、Hが空白のときはそのすぐ左横の保管場所ごと削除
していきたいのです。商品名がある時には、保管場所も削ってはいけません。

また、
マクロを開始する行はデフォルトで200行からとして、変えられるようにお願いします。


マクロのみのご回答にポイントを進呈いたします。
どうかよろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2017/12/11 11:41:25
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント300pt

こんな感じでどうでしょう。

Function is_blank_cell(c)
    is_blank_cell = IsEmpty(c) Or c.Value = ""
End Function

Sub condense_table()
    start_row = 200     ' 圧縮範囲の開始行
    For col = 1 To 7 Step 2     ' A, C, E, G 列
        last_row_1 = Cells(Rows.Count, col).End(xlUp).Row
        last_row_2 = Cells(Rows.Count, col + 1).End(xlUp).Row
        If last_row_1 > last_row_2 Then
            last_row = last_row_1
        Else
            last_row = last_row_2
        End If
        For r = last_row To start_row Step -1
            If is_blank_cell(Cells(r, col + 1)) Then
                Range(Cells(r, col), Cells(r, col + 1)).Delete Shift:=xlUp
            End If
        Next
    Next
End Sub

対象のシートを選択した状態で、condense_table サブルーチンを実行してください。

他4件のコメントを見る
id:a-kuma3

あ、「200行まで」だったのですね。

回答に書いた VBA は、A~H列で、それぞれ最後にデータが入ってるところまでを処理対象にしちゃってますが、大丈夫ですか?

2017/12/11 12:14:56
id:naranara19

動いておりますし、処理スピードも速いので問題ないかと!お気遣いありがとうございます。また困った時には別質問させていただきますね。いつもありがとうございます。

2017/12/12 05:27:18

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

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

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

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

回答リクエストを送信したユーザーはいません