- ベストアンサー
EXCELマクロ AutoFilterの使い方を教えて下さい。
- EXCELマクロ初心者です。使用環境は、EXCEL2007です。
- Web上で紹介されていたマクロをアレンジして以下のようなマクロを作成しました。
- B列に指定した数字が記載された行を削除するものです。指定した数字以外がB列に記載された行を削除する方法を教えてください。エラーが出てしまいます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
sub macro1() dim res res = inputbox range("B:B").autofilter field:=1, criteria1:="<>" & res activesheet.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup activesheet.autofiltermode = false end sub 「"<>" & 変数」のようにするのが,今回のご質問のキモです。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
元のコードは、たぶん、誰かが書いたコードでしょうけれども、私が、ここで書いてきた方法に似ていますので、その部分を活かして、返事を付けておきます。 本来は、あまりこういうテクニックはきれいではないのですが、何かの時に役に立つでしょうから、置いておきます。 If WorksheetFunction.Subtotal(3, .Columns(1).Cells) = .Rows.Count Then On Error GoTo errhandlerのエラーは、発生しなかったはずです。 なお、以下の変数は、Variant 型ですが、Prefix は、int のままにしておきます。 また、Application.ScreenUpdating = False は、AutoFilter には、あまり思ったほど効果なかったような気がします。 SpecialCells(xlCellTypeVisible).EntireRow.Delete これが必要なのは、Excelの一部のバグなのか、上手くいかない場合の時だけです。 '// Sub RowsDelete_in_Brow() ''B列に指定の数字がある場合、行を削除 Dim intCriteria As Variant With ActiveSheet If .AutoFilterMode = True Then .AutoFilterMode = False intCriteria = Application.InputBox("検索し残す数字を入力。", "数字入力", Type:=2) If VarType(intCriteria) = vbBoolean Or Not IsNumeric(intCriteria) Then Exit Sub Application.ScreenUpdating = False .Cells(2, 1).CurrentRegion.AutoFilter Field:=2, Criteria1:="<>" & intCriteria With .AutoFilter.Range If WorksheetFunction.Subtotal(3, .Columns(1).Cells) = .Rows.Count Then MsgBox intCriteria & " はありません。", vbExclamation .AutoFilter Exit Sub End If .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete End With .AutoFilterMode = False Application.ScreenUpdating = True End With End Sub
お礼
回答ありがとうございました。ただ、私には少し難しいようです。ご提案頂いたマクロを理解できるようにもっと勉強します。
- jcctaira
- ベストアンサー率58% (119/204)
Criteria1:=intCriteria の 「:=」は等号記号ではなく代入文です。 以下のように訂正すればできると思います。 .AutoFilter Field:=2, Criteria1:="<>" & intCriteria
お礼
私の作成したマクロを活用して、指示通りの訂正案を提示して頂けました。ありがとうございました。
お礼
指示内容通りでかつ、シンプルにしたマクロで非常に気に入りました。 ありがとうございました。