[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『A列のセルがブランクであれば行ごと削除』(mutsu)
お世話になります。 A列のセルにブランクがあれば、その行ごと削除をしたいので、色々検索し以下の マクロを使ってみました。
Sub test() For Each c In Range("A1:A200") If IsEmpty(c) Then c.EntireRow.Delete Next End Sub
しかし、これですと2行連続でA列がブランクの場合、上の行のみ削除されます。 どこをどのように変更すれば、2行連続で削除できますか?
行の削除でFor Each Loop はそのような結果になります。 一般的には、下からLoopでしょう、
Sub Sample() Dim i As Long For i = 200 To 1 Step -1 If IsEmpty(Cells(i,"a")) Then Rows(i).Delete Next End Sub
For Each Loop での解決案(高速)
Sub test() Dim r As Range, txt As String Again: For Each r In Range("a1",Range("a" & Rows.Count).End(xlUp)) If IsEmpty(r) Then txt = txt & r.Address(0,0) & "," If Len(txt) > 245 Then Range(Left(txt,Len(txt) -1)).EntireRow.Delete txt = Empty GoTo Again End If Next If Len(txt) Then Range(Left(txt,Len(txt)-1)).EntireRow.Delete End Sub (seiya)
seiya様、ありがとうございます。 上記方法で、エラーが出てしまいました。 Range(Left(txt),Len(txt) -1).EntireRow.Delete←部分の「Left」が反転して コンパイルエラー:因数は省略できません と出ます。 変換等が必要なのでしょうか?(mutsu)
失敗!
Range(Left(txt,Len(txt)-1).EntireRow.Delete
です。(コード修正済み) (seiya)
seiya様、何度も申し訳ありません。><;; 今度は、実行時エラー1004です。 Rangeメソッドは失敗しました。_Globalオブジェクト と出ています。 お願いいたします。(mutsu)
横から失礼します。 これでうまくいきませんか? 数式で返した "" には反応しませんが。 (純丸)(o^-')b
Sub test() On Error Resume Next '空白が無かった時のため Range("A1:A200").SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub
↑ は数式が無ければ一番早いですね。
コード変更しましたので...(seiya)
純丸様、残念ながら数式で値を返しています>< ありがとうございました。 ほかに機会があれば、使わせいただきます。
seiya様、本当に申し訳ありません。前回と同じエラーが最下行で出ました。 If Len(txt) Then Range(Left(txt,Len(txt)-1)).Delete の部分です。 データベースに問題ありですか?(mutsu)
ごめんなさい!朝から大ボケ...LOL
txt = txt & r.Address(0,0) & "," (コード変更済み) (seiya)
ちょっと質問です。SpecialCells(xlCellTypeBlanks) に反応しないセルは、 IsEmpty でも False なのではないでしょうか? 私が何か、勘違いしてます? (純丸)(o^-')b
あっ!そうだ If r.Value = "" としないと... (seiya)
でしょ? だから、一番最初に提示されているマクロが IsEmpty なんで、それで数式で 値を返してるとコメントされているので???なのです。 ちなみに r.Value = "" なら、こんなのも考えられます。元々の空白も削除されちゃいますが。 (純丸)(o^-')b
Sub test() Dim r As Range Dim myr As Range On Error Resume Next Set myr = Range("A1:A200") For Each r In myr If r.Value = "" Then r.ClearContents Next r myr.SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub
Ahhh...
ありあり...大いにありですよ。(seiya)
純丸さん、seiyaさん色々ありがとうございます。 「あり」ですね。大いに「あり」でした。 ご提示いただいたマクロをテスト用の数式のないデータで起動させていました。 本当に間が抜けててすみません><.。
純丸さんのマクロを使わせいただいたところ、ばっちり動いてくれました。 そして、とても図々しいのですがもう一つお聞きしたいことが・・・ A〜C列の3列がブランクの場合のみ、行ごと削除をしたい場合はどのようになるのでしょうか?
取り合えず、If r.Value = "" Then r.ClearContents を If r.Value = "" And r.Offset(0, 1).Value = "" And r.Offset(0, 2).Value = "" Then r.ClearContents に、したらどうでしょう。 (純丸)(o^-')b
参考出品。 「行ごと削除をしたい」って、行削除でよいのかしら。 Sub TEST_20060903() Dim i As Long For i = 1 To 3 Range("A1:C200").AutoFilter _ field:=i, Criteria1:="" Next i On Error Resume Next Range("A2:C200").SpecialCells(xlCellTypeVisible).Select If Err.Number = 1004 Then MsgBox "該当セルがありません。" ElseIf Err.Number = 0 Then Selection.Delete shift:=xlUp Else MsgBox "想定外のエラー" End If Range("A1:C200").AutoFilter Err.Clear Range("A1").Select End Sub (みやほりん)(-_∂)b 一応、一行目だけは残すようにしてありますけど。
みやほりんさん、純丸さん、ありがとうございます。 思った通りのデータが出来上がります。 助かりました。 応用できるよう、勉強します。(mutsu)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.