★詳しくは画像もご確認ください。
B、D、F、Hの列内のセルを調べて空白だったら、そのとなりの対になる
A、C、E、Gのセルも含め上方向に削除していく処理をしたい。
B、D、F、H列にあるものが商品名でして、
A、C、E、G列がその保管場所です。
ですので、B、D、F、Hが空白のときはそのすぐ左横の保管場所ごと削除
していきたいのです。商品名がある時には、保管場所も削ってはいけません。
また、
マクロを開始する行はデフォルトで200行からとして、変えられるようにお願いします。
マクロのみのご回答にポイントを進呈いたします。
どうかよろしくお願いいたします。
こんな感じでどうでしょう。
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 サブルーチンを実行してください。
あ、「200行まで」だったのですね。
2017/12/11 12:14:56回答に書いた VBA は、A~H列で、それぞれ最後にデータが入ってるところまでを処理対象にしちゃってますが、大丈夫ですか?
動いておりますし、処理スピードも速いので問題ないかと!お気遣いありがとうございます。また困った時には別質問させていただきますね。いつもありがとうございます。
2017/12/12 05:27:18