- ベストアンサー
マクロで、0のデーターの行を削除
下記のような表があるのです(毎月のため苦労して消してます)が、データーの合計欄(セル)が0の行を削除するマクロはどうしたらよいのですか? A B C コード 合計 内容 1 001 0 0 この行を削除 2 003 5 2・・・ この行は残す 3 004 9 4・・・ この業は残す 4 010 0 0 この行は削除
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
恐らくこれで動くはずです。 ざっくりと動作確認は行いましたが、もし動かなければ言ってください。 Sub Sankou() ' 'Range("ここの値は合計が始まるセルを指定").select Range("c1").Select Do Until ActiveCell = "" '空白セルまでLoop If ActiveCell = 0 Then 'もしセルに0が記入してある場合 Selection.EntireRow.Delete '行全体を削除 Else '0以外が記入してある場合 ActiveCell.Offset(1).Activate 'アクティブセルを1つ下へ移動 End If Loop MsgBox "終了しました" End Sub
その他の回答 (4)
- mazda323f
- ベストアンサー率52% (13/25)
ANo.4です。 ここではマクロのコメントに色がつかない為、分かりにくいと思いますので、先程のマクロ文をコピーして一度VBA上に貼り付けると分かりやすいかもしれません。
- kigoshi
- ベストアンサー率46% (120/260)
#1です。訂正します。 Dim rIdx As Long rIdx = 0 Do Until Cells(rIdx + 1, 1).Value = "" rIdx = rIdx + 1 If Cells(rIdx, 2).Value = 0 Then Rows(rIdx).Delete Shift:=xlUp rIdx = rIdx - 1 End If Loop 先の回答は合計欄をC列の場合でした。
- onlyrom
- ベストアンサー率59% (228/384)
見出し: 1行目 データ: 2行目~~ 合計列: B列 として、合計0の行を削除する場合 '------------------------------------------- Sub Test() Dim R As Long For R = Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1 If Cells(R, "B").Value = 0 Then Rows(R).Delete xlShiftUp End If Next R End Sub '-------------------------------------------- 但し、該当シートをアクティブにした状態で実行すること 以上。
お礼
ありがとうございました。 データー件数が約6000件であったので、最初暴走してしまったかと思いました。 もし、よろしかったら、勉強のために、各メソッドの内容を教えて頂けますでしょうか? ちなみに、 Sub Test() Dim R As Long For R = Cells(Rows.Count, "C").End(xlUp).Row To 3 Step -1 If Cells(R, "C").Value = 0 Then Rows(R).Delete xlShiftUp End If Next R End Sub のようにして、うまくいきました。
- kigoshi
- ベストアンサー率46% (120/260)
もっともベタな方法ですが Dim rIdx As Long rIdx = 0 Do Until Cells(rIdx + 1, 1).Value = "" rIdx = rIdx + 1 If Cells(rIdx, 3).Value = 0 Then Rows(rIdx).Delete Shift:=xlUp rIdx = rIdx - 1 End If Loop マクロを使わなくてもオートフィルタで0の行のみ表示しそれを選択・削除、という手もあります。
お礼
ごめんなさい、質問のデーターですとうまくいきましたが、 見出しは、1と2行目にあり、 合計欄は、”c”の列で、 教えて頂いた1のやり方で、 うまくいきませんでした。 念のため、アクティブセルもしてみましたが、だめでした。
お礼
本当にありがとうございました。 またご丁寧に説明をつけて頂いたことで、非常に判りやすく、 修正も楽でした。 印刷し保存を勝手にさせて頂きました。 また、動きも出て、良く判りました(やっている内容が判りました)