• ベストアンサー

《エクセル》 オートフィルタで指定した行だけ指定するマクロ

いつもお世話になります。 「オートフィルタで条件を指定して行を抽出し、その行のデータを削除する」 というマクロを作成したいのですが、うまく行きません。 そのようなマクロの式か、もしくはオートフィルタを使う以外で、同じ機能を果たせるマクロがあれば、教えていただけますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#1、#2とは違ったVBAらしいコード Sub test01() Range("a1:a10").Select Selection.SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete End Sub これは編集-ジャンプ-セル選択-定数-数 編集-削除-行削除の操作に当たるものです。 エクセルの上記の操作を知っているか、注目するかどうかでやり方が変ります。 上記コード上では繰り返しを伺えるものはありません。 それだけエラーが少なくなります。 (例えば下行から削除するなどのテクニックが要らない。) 回答はいろいろあると言う実例です。 大別して (1)繰り返しプログラム系 (2)プロパティ・メソッド系(本件)

7-samurai
質問者

お礼

ありがとうございました。 snoopy64さんの回答を参考に完成したのですが、後学のためにこちらでも作成してみます。

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

他の方のアドバイスで解決しているかも知れませんが、、、 「オートフィルタで条件を指定して行を抽出し、その行のデータを削除する」 にそって書いてみました。 A列が「空白以外」でオートフィルタを掛けて、A~IとK列を消去します。 試すならテスト環境で。 Sub Test() Dim msgResult  ActiveSheet.AutoFilterMode = False  Range("A1").AutoFilter    'A列が空白以外なら  Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:="<>"    '一応消して良いか確認  msgResult = _   MsgBox("A~IとK列を消去して良いですか?", _       vbYesNo + vbCritical, "消去")  If msgResult = vbYes Then    Range("A2:I65536,K2:K65536"). _       SpecialCells(xlCellTypeVisible).Clear  End If End Sub

7-samurai
質問者

お礼

ありがとうございました。 マクロ起動中に、実行の確認まで出来るとは知りませんでした。 一度チャレンジしてみます。

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.2

Dim i As Long For i = 2000 To 1 Step -1 If IsNumeric(Cells(i, 1)) Then Range("K" & i).Clear Range("A" & i & ":I" & i).Clear End If Next これでどうでしょうか。もっときれいなコードが書ければいいんですけど。。。お恥ずかしい(>_<) 頑張ってくださいヽ(^。^)ノ

7-samurai
質問者

お礼

とんでもございません!! ご親切にありがとうございました。 この数式で問題解決しました。

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.1

A列に社員番号、B列に氏名、C列に性別が入っていて、「男」を削除する例です。 Sub sDelLine() Dim i As Long For i = 65536 To 1 Step -1 If Cells(i, 3) = "男" Then Rows(i).Select Selection.Delete Shift:=xlUp End If Next End Sub 頑張ってくださいヽ(^。^)ノ

7-samurai
質問者

補足

早速ありがとうございます。 マクロ初心者の為、式に使われている単語の意味が分からないものがあり、お手数ですが3つばかり教えていただけますでしょうか。 >For i = 65536 To 1 Step -1 2000行まで行う場合は、65536を2000に変えれば良いのでしょうか? >If Cells(i, 3) = "男" 条件を、「A列の数字が入っているセル」にするにはどのように書けば良いでしょうか? >Rows(i).Select >Selection.Delete Shift:=xlUp 「この行の、A~I列と、K列のみを消す」にするにはどのように書けば良いでしょうか? ヒントさえいただければ、後は自分で何とかできるだろうとタカをくくっていたのですが・・・。 最初にこのように聞いておけば2度手間をかけずに済みましたことを深くお詫びいたします。 ご返答、お願いできますでしょうか。

関連するQ&A