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

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


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


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


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

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

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


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


1512766136
●拡大する

●質問者: naranara19
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●300ポイント ベストアンサー

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

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 サブルーチンを実行してください。


naranara19さんのコメント
ありがとうございます。なぜか実行されないで無反応なのですが、どうしてでしょうか。

a-kuma3さんのコメント
質問にあるように、200行目以降を行を詰める対象にしていますが、そこは間違いないですか?

naranara19さんのコメント
す、すみません。200行より前をお願いしたいのです。

naranara19さんのコメント
ありがとうございます!スタートを1からにしたらばっちりできました。いつも感謝です。

a-kuma3さんのコメント
あ、「200行まで」だったのですね。 回答に書いた VBA は、A?H列で、それぞれ最後にデータが入ってるところまでを処理対象にしちゃってますが、大丈夫ですか?

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

●質問をもっと探す●



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