- ベストアンサー
マクロにて空白のセルを一括して消去でなく削除したい
空白のセルを一括して、空白セルについた色も含めてマクロで全て削除したい。 現在のデータ(仕様)について 1.Sheet2に列ごとにセルに色をつけ、データもあるとします。 2.A列10行・B列6行・C;列18行というように、列によってデータの入った範囲が違います。 3.どの行も途中に空白セルはなく、詰めたデータです。 以上です マクロで一括処理したいと思いますが、このようなことができるコードを教えて頂けませんか。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
全部のセルを調べているので、時間が掛かります。 質問の情報からは書式設定されているセルがどこなのか特定できませんでした。 A列~C列であれば、Cellsの部分をRange("A:C")とすれば、3列だけなので早くなります。 あるいは、Cellsの部分を UsedRangeにすれば、かなり限定されます。 あと、最初に Application.ScreenUpdating = FALSE を入れ、最後に Application.ScreenUpdating = TRUE を入れれば、セルの描画が都度 掛からないので早くなります。
その他の回答 (4)
- masnoske
- ベストアンサー率35% (67/190)
失礼しました。 If rng.Value = "" Then の間違いです。
お礼
ありがとうございます。
補足
できました。ありがとうございます。処理が大変遅いのは改善できないですか。できれば、教えて頂けませんか。私のPCのせいでしょうか。よろしくお願いします。
- masnoske
- ベストアンサー率35% (67/190)
シートにある全てのセルは Cellsで捕まえられます。 For Each Next でループを回し、セルに値が無ければ Clearするだけです。 Dim rng As Range For Each rng In Sheets("Sheet2").Cells If rng.Value <> "" Then rng.Clear End If Next
お礼
ありがとうございます
補足
Sub Macro1() Dim rng As Range For Each rng In Sheets("Sheet2").Cells If rng.Value <> "" Then rng.Clear End If Next End Sub ありがとうございます。これで試してみましたが、データがあるところが、セルの色も含めて削除されて、データのない空白が残っています。上記のコードで実行しましたがどこか間違えているでしょうか。それと、処理に時間がかかりすぎて終わらないように感じました。ご回答をよろしくお願いします。
- kkkkkm
- ベストアンサー率66% (1719/2589)
A1からC列までデータがあるとした場合、以下で試してください。 Sub Test() Dim LastRow As Long With Sheets("Sheet2").Range("A1").CurrentRegion LastRow = .Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row End With Sheets("Sheet2").Range(Cells(1, "A"), Cells(LastRow, "C")).SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp End Sub
お礼
ありがとうございます。
- m5048172715
- ベストアンサー率16% (860/5261)
遅くても良いなら、任意の行の、 1列目のセルの値を読み込んでそれが""なら、 2列目のセルの値を読み込んでそれが""なら、 ・・・ 最終列まで読み込んでそれが""なら、 その行を消す。セルの色は判定内に無いので、数字も文字列も入って無い空白の行だけ消えます。 高確率でもっと高速・高効率・スマートな方法があるはずだけど、それを知らなくてもこのアルゴリズムで自動で消せるのは楽だと私は思います。 これで使うステートメントは、forループ、セルの読み、文字列判定、行削除くらいかな。たった4つです。
お礼
ありがとうございます。
お礼
できあがりました。お世話になりました。範囲のことも含めて、色々な要望にも応じて頂き、ほんとうにありがとうございました。助かりました。