- ベストアンサー
特定のセルに数値がない行を削除
フィルタ等を使用せず、特定のセルに数値がない行を簡単に削除したいのですが…よろしくお願いします。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >ボタンのようなものを作成し、それを押すと うーむ。マクロですね。 コントロールツールボックス・バーを出したら、その中のボタンをドラッグして、適当な場所に張りつけします。 そのボタンを右クリックして、コードの表示をクリックすると Private Sub CommandButton1_Click() End Sub こんなようなものが出てくるはずですから、そこに上書きしてしまってください。 '------------------------------------------------ Private Sub CommandButton1_Click() Dim i As Long Application.ScreenUpdating = False 'A列の範囲を以下で取ります With Range("A1", Range("A65536").End(xlUp)) For i = .Rows.Count To 2 Step -1 '先頭行は残します If .Cells(i, 1).Value = "" Then .Cells(i, 1).EntireRow.Delete End If Next i End With Application.ScreenUpdating = True End Sub '------------------------------------------------ 後は、Alt+Q で、画面を閉じたら、今は、コントロール・ツールボックスのバーの[青い三角定規]が[オン]の状態ですから、クリックして、[オフ]にしてから、コントロール・ツールボックスのバーを非表示させてください。 なお、今回のケースは、ジャンプ機能やSpcialCellsメソッドは、あまりうまくいかないように思います。
その他の回答 (9)
- Cupper
- ベストアンサー率32% (2123/6444)
質問の意図とはかけ離れた回答になります。 フィルタ処理で十分実用に耐えると思いますが如何でしょう。 印刷範囲を指定して、その外にフィルタ用の関数を記述する列を 設定することでスマートな処理が可能です。 また、後から元のデータが変更された場合にも対応が可能になります。 行を削除すると参照しているセルその物が消えてしまいますので 以後、意図しない結果が返る可能性があります。 繰り返し利用するような場合はフィルタで対応することをお薦めします。
補足
ありがとうございました。 皆さんのご回答を元に、出来ました!
- zap35
- ベストアンサー率44% (1383/3079)
#03です。 >1列目が空白の行(B行)以外が残る状態にしたいのです であればオートフィルタで絞り込みを行い、まとめて行削除することが可能です。それにも関わらず「フィルタはNG」であればマクロしかありません。よほど頻繁に使用するのでボタン起動できるようにされたいのでしょうか? 一番左側(A列)のセルの値が空白の行を削除するマクロは既出ですので、該当する条件の行を「隠す」マクロを以下に示します。わざわざ式を入力したセルをマクロで削除すると「復活」ができなくなりますし、式の書き方によっては#REF!エラーとなる可能性もありますので、「見えなくする」だけにとどめます。マクロをどこに書くかは#07さんの回答を参考にして下さい。 Private Sub CommandButton1_Click() Dim idx As Long For idx = 1 To ActiveSheet.Range("A65536").End(xlUp).Row If ActiveSheet.Cells(idx, 1).Value = "" Then ActiveSheet.Cells(idx, 1).EntireRow.Hidden = True End If Next idx End Sub マクロ実行によって非表示になった行は、見えなくなっている行を含む範囲を選択して「右クリック」→「再表示」で表示することが可能です。 蛇足かもしれませんが、このシートで集計を行う必要があるのであればSUM関数、COUNT関数ではなくSUBTOTAL関数を使用すると良いと思います。SUBTOTAL関数は「非表示の行は集計しない」ですから、「表示された行」だけを集計することが可能です。
お礼
ありがとうございました。 皆さんのご回答を元に、出来ました!
>尚、セルにはすべて数式が入っていて=で別Sheetからの参照しています。 >このようなものを、ボタンのようなものを作成し、それを押すと、B行以外が残る状態にしたい 色々アイデアは、あります。 A列で並び替えを実施します。今、問題のセルは所謂「空白」ですので、 下(A列、昇順)に集まります。集まったものを一気に削除。 配慮その1: 現状の行の並びが重要であるなら、1列追加して、現状の並びで通し番号を つけておき、前述の並び替え、削除の後で、この通し番号を使って、オリジナルの並びに戻す。 尚、本件は、下記を前提にしています。 数式が入っていて=で別Sheet・・・・・ =if(xxxx,1,"") このように、条件が合えば、数値、さもなくば "" をいれる というような数式を考えています。 目では見えなくとも、何か、入っている場合は、Wendy02さんも言われるように、 SpecialCellsは、使えないです。 目で見えるものを評価するには、Cells(i, 1).Value を使うか、 あるいは、並び替えかな、と思います。 小生も、勉強になりました。
お礼
ありがとうございました。 皆さんのご回答を元に、出来ました!
A No.5の書き込みをしたものです。 一部表現を修正させていただきます。 前提: 何も入力されていないセル「を含む行」を削除する。 入力されていないセルの定義は、xlCellTypeBlanks 対象範囲は:ActiveSheet.UsedRange.Address 「を含む行」を追記しました。
これで、試していただけますか? 前提: 何も入力されていないセルを削除する。 入力されていないセルの定義は、xlCellTypeBlanks 対象範囲は:ActiveSheet.UsedRange.Address ---------------------------------------------- Sub test() hani = ActiveSheet.UsedRange.Address Range(hani).SpecialCells(xlCellTypeBlanks).Select Selection.EntireRow.Delete End Sub ---------------------------------------------- 注意:8192個以上のそのようなセルは、まずいようです。 できること、できないことを分かって、使えばよいと思いますが・・・・ しかし、その他にも、上記では問題がありました。行内に2つ以上のブランクがあると、Selection.EntireRow.Delete がエラーとなります。 そこで、下記のようなものを、更に、考えました。 -------------------------------------------------- Sub test2() dim myArray as variant hani_test = ActiveSheet.UsedRange.Address myArray = Range(hani_test).Value r = UBound(myArray, 1) 'myArrayは、単に、対象エリヤの行数を知りたかっただけです。 'rが行数です。 For i = r To 1 Step -1 Cells(i, 1).Select hani = Range("A" & i & ":" & Cells(i, 255).End(xlToLeft).Address).Address aa = 999 aa = Range(hani).SpecialCells(xlCellTypeBlanks).Count If aa <> 999 Then Range(hani).EntireRow.Delete Next End Sub これであれば、問題もなく、安心して使えると思います。 しかし、 aa = 999 aa = Range(hani).SpecialCells(xlCellTypeBlanks).Count なぜ、カウントが0の時に、aaに0が入らないのか、分かりません。 カウントが0(空白のセルは無い)の場合は、初期値といれた999 がそのまま生きていますので、 Range(hani).EntireRow.Delete がスキップされます。 補完していただくことを期待します。
お礼
ありがとうございました。 皆さんのご回答を元に、出来ました!
- imogasi
- ベストアンサー率27% (4737/17069)
(1)なぜフィルタという、エクセルで便利な機能を使わない 質問の書き振りからすると、素人の気まぐれかと思っちゃう。 (2)目視で数値がない行を(CTRL)範囲指定し、行削除しては。行数の多少も質問に書いてない。 (3)関数でもできるが (A)作業列を使う (B)作業列を使わない どちらも、関数の本来の使い方でなく複雑化するので、回答の式の意味が理解できるか、、質問の書き振りから想像して心配。 (4)もちろんVBAでできますがVBAの作成経験はあるの (5)数値のない行 数値に拘るの?データが入っていないセル=空白セルのこと? (6)特定のセル どういう風に特定を割り出すの? (7)簡単に 関数での回答が、もし頭にあるなら、行削除は関数ではできないのをご存知か?その結果関数を組み合わせてやるのだが、複雑になる。 (8)特定のセルのある列は決まっている1列にありますか 決まっておれば、また空白セルなら 列指定 編集ージャンプーセル選択ー空白セル で選べる。 編集ー削除ー行全体 で削除できる。しかし文字列のセルは選択できないよう。 どういう方法があるかもわからない前提で、簡単にとはいえないでしょう。ここが複雑なので簡単にと言う質問ならありえるが。 もう少し回答者のことを考えて質問文を書いてほしい。
補足
質問が分かりにくく、すみません。 1 2 3 4 5 A 5 0 0 B C 5 D 8 9 7 9 のような状態です。 尚、セルにはすべて数式が入っていて=で別Sheetからの参照しています。 このようなものを、ボタンのようなものを作成し、それを押すと、1列目が空白の行(B行)以外が残る状態にしたいのですが…
- zap35
- ベストアンサー率44% (1383/3079)
>フィルタ等を使用せず、…簡単に削除 フィルタが一番簡単だと思います。「フィルタ等が使えない理由」を補足していただくと良い回答があるかもしれませんよ。 もちろんマクロでも可能ですが、マクロを書くためには条件が足りません ・「特定のセル」とはどこ? ・「数値がない」は「手入力」と「計算式の結果」両方を含む? ・データの範囲(○行目~×行目)はどの列で判定すればよい? 等 これらを想像で補ってマクロを書くことは可能ですが、ponpa22さんに手直ししていただく必要がでますね。
補足
質問が分かりにくく、すみません。 1 2 3 4 5 A 5 0 0 B C 5 D 8 9 7 9 no のような状態です。 尚、セルにはすべて数式が入っていて=で別Sheetからの参照しています。 このようなものを、ボタンのようなものを作成し、それを押すと、B行以外が残る状態にしたいのですが…
- maron--5
- ベストアンサー率36% (321/877)
■手順■ 1)該当の列を範囲指定します 2)メニューバーの[編集]-[ジャンプ]-[セル選択]を選択します 3)「空白セル」にチェックして、OK 4)列のうちの空白セルが選択されます 5)その状態で、メニューバーの[編集]-[削除]-[行全体]を選択し、OK 6)もし、この列に数値以外の文字列入力行も削除したいのであれば 7)該当の列を範囲指定します 8)メニューバーの[編集]-[ジャンプ]-[セル選択]を選択します 9)「定数」にチェックして、「数値」のチェックをはずして、OK 10)その状態で、メニューバーの[編集]-[削除]-[行全体]を選択し、OK
お礼
ありがとうございました。 皆さんのご回答を元に、出来ました!
- kkkkk007
- ベストアンサー率25% (179/691)
>>フィルタ等を使用せず 何を使用していいのでしょうか? または、その逆でもかまいません。
お礼
ありがとうございました。 皆さんのご回答を元に、出来ました!
補足
質問が分かりにくく、すみません。 1 2 3 4 5 A 10 0 0 B C 5 D 8 9 7 9 no のような状態です。 尚、セルにはすべて数式が入っていて=で別Sheetからの参照しています。 このようなものを、ボタンのようなものを作成し、それを押すと、B行以外が残る状態にしたいのですが…
お礼
ありがとうございました。 皆さんのご回答を元に、出来ました!