[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA オートフィルタで空白セルを選択し、抽出した行を空白にしたい』(イルカ)
2行目に見出しがあり、フィルタをかけています。
B行のオートフィルタで空白セルを選択し、その選択されたB行をデリートで
空白にしたいのです。
毎回空白行が変更するので、マクロで記憶させたいのですが、どうコードを書いたら
いいでしょうか?
ただ見た目が空白でも0の場合があり、300行まで表があるのですが、
Ctrl+Shift+↓ では、300行まで選択されないので
End(xlDown)やEnd(xlUp)は使えないです。
何かいい方法があれば教えてくださいm(__)m
もし、すでにA列から始まる領域に対してオートフィルターの設定がされていて、 その中のB列の空白セルの行を削除するということが要件なら、 以下のようにフィルタリング(抽出)しないで処理可能。
ちょっと、あらっぽい(?)コードだけど。
Sub Sample() On Error Resume Next ActiveSheet.AutoFilter.Range.Columns("B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete On Error GoTo 0 End Sub
(ぶらっと)
あぁ
>ただ見た目が空白でも0の場合があり
つまり、値は0だけど、表示書式で空白にしているということ? なるほど。じゃぁ、その状態の対応版は、後ほどアップするね。 (アップ済みのものは、ほんとの空白のみの対応版)
(ぶらっと)
見た目空白も対応するバージョン
Sub Sample2() Dim myBody As Range
With ActiveSheet.AutoFilter.Range Set myBody = .Columns("B").Offset(1).Resize(.Rows.Count - 1) .AutoFilter Field:=2, Criteria1:="=" On Error Resume Next Set myBody = myBody.SpecialCells(xlCellTypeVisible) On Error GoTo 0 If Not myBody Is Nothing Then myBody.EntireRow.Delete If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End With
End Sub
(ぶらっと)
Sample2()のコードで、空白セルも0表示も対応出来ました。
ただ変な仕様で申し訳ないのですが、行全体が削除になるのではなく、
各行は変更せず空白&0のみデリートで空白にしたいのですが、可能でしょうか?
手作業ですと、フィルタで空白セルのみ抽出し空白も0も範囲指定して
デリートを押せばいいのですが、毎回データーが変更するのでマクロで実行したいと
思っているのですが、初心者で・・・
可能であれば、よろしくお願いしますm(__)m
(イルカ)
じゃぁ、
If Not myBody Is Nothing Then myBody.EntireRow.Delete
これを
If Not myBody Is Nothing Then myBody.EntireRow.Clearcontents
これでどうだろうか
あるいは、他の列はさわらず、B列で空白に見えているセルだけを空白にする? もしそうなら、それはそれで対応するので、必要なら教えてね。
(ぶらっと)
If Not myBody Is Nothing Then myBody.EntireRow.Clearcontents
に変更したら、行は変わらず空白に出来ますね(^.^)
そうなんです・・・
B列で空白に見えているセルだけを空白にしたいです。
よろしくお願いしますm(__)m
(イルカ)
それでは以下で。
If Not myBody Is Nothing Then myBody.EntireRow.Clearcontents
これを
If Not myBody Is Nothing Then myBody.Clearcontents
(ぶらっと)
一応、↑でOKだと思うけど、要件に対するこちらの理解が紆余曲折して、途中からフィルタリングロジックをいれて それに基づいて対応してきたけど、以下のようなフィルタリングなしの処理でもできるね。 データ量が多い場合どちらが早いかは確認していないけど。
Sub Sample3() Dim v As Variant Dim i As Long v = Range("B1", Range("B" & Rows.Count).End(xlUp)).Value For i = 1 To UBound(v, 1) If Len(v(i, 1)) = 0 Then v(i, 1) = "" Next Range("B1").Resize(UBound(v, 1)).Value = v End Sub
(ぶらっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.