• ベストアンサー

VBA AutoFilterModeについて

以下のサイトにVBAのサンプルがあったので見ていたのですが、「Range("A1").AutoFilterMode」という箇所があります。RangeオブジェクトにAutoFilterModeプロパティは無いと思いますし、実行するとエラーになりますが、このコードについてあっているのか、間違っているのか、どちらになるでしょうか? https://github.com/carvetighter/VBA-Code-Library/blame/master/Mod_Autofilter.bas

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1636/2482)
回答No.1

確かにエラーになりますね。 その下に If wks_current.AutoFilterMode = True Then とありますので本来は wks_current.AutoFilterMode = False としたかったのだと思いますが 右にThen wks_current.Range("A1").AutoFilter があるので何かの間違いで Range("A1")を付けてしまったのかもしれません。 AutoFilterModeはWorksheet のメンバーだと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA 変数について

    VBA初心者でございます。 VBAでgrpという変数を設定し、それをキーにしてオートフィルタをしたいです。 以下のコードではエラーがでてしまうのは、なぜでしょうか? どうぞ宜しくお願いいたします。 Sub 絞り込み2() Dim grp Set grp = Worksheets("リスト").Cells(3, 2) Worksheets("マスタ0701").AutoFilterMode = False With Worksheets("マスタ0701").Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)) .AutoFilter Field:=13, Criteria1:=grp '.CurrentRegion.Select Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)).SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") '.AutoFilter End With End Sub

  • エクセルVBA住所録で半角全角問わず検索する方法

    エクセルVBAで住所録を作っています。 住所録で下記のようなコードを書いて、キーワード検索をさせるようにしているのですが、『*丁目』や番地に半角英数を使っています。 全角で数字を入力しても検索されるようなコードの書き方はあるのでしょうか? 宜しくお願いします。 Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub

  • VBAで保存時の状態に戻す方法

    本などを参考にしながらエクセルVBAを使って売上帳を作成しています。 品名欄のキーワード検索機能を付けていますが、抽出した後、元の状態に戻す良い方法はないですか? キーワードの抽出は以下の書き方です。 Sub 品名検索() Dim ans As String ans = InputBox("文字列を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A4:IV4").AutoFilter 'オートフィルタモードをセット .Range("A4:IV4").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub よろしくおねがいします。

  • vbaにて、オブジェクトエラー

    ただいまvbaで、ユーザーフォームとテキストボックスを用いて、数字のからまで、でフィルタリングするvbaをつくっています。 オブジェクトエラーがでてしまうのですが、 ちゃんとsetを入れているのになぜ出てしまうのでしょうか? また、その他何かご指摘あればいただきたいです。 何卒宜しくお願い致します。 Sub 集計開始() Dim drng As Range Dim kara As String, made As String Dim cnt As Long ActiveSheet.AutoFilterMode = False Set drng = Range("A1").CurrentRegion kara = Val(usetform1.TextBox1.Text) made = Val(usetform1.TextBox2.Text) If kara <> "" And made = "" Then drng.Worksheets("●●●").AutoFilter Field:=15, Criterial1:=">=" & kara ElseIf kara = "" And made <> "" Then drng.Worksheets("●●●").AutoFilter Field:=15, Criterial1:="<=" & made ElseIf kara <> "" And made <> "" Then drng.Worksheets("kwzweb").AutoFilter Field:=15, Criterial1:=">=" & kara, _ Operator:=xlAnd, Criteria2:="<=" & made Else MsgBox "数字を入力してください" Exit Sub End If End Sub

  • VBAのRange()ってオブジェクトですか、プロパティですか、メソッドですか?

    最近VBAを勉強しはじめました。 基本的なことだとは思いますが、なかなかネットで検索していても頭が混乱してしまうので、こちらで質問させてください。 Range("A1")という記述は、VBAでは何を意味しているのでしょうか? Range("A1")というのは、Rangeオブジェクトそのものではないらしいことはわかったのですが、そこから先はなんだかチンプンカンプンで。 色々、見ていると、 オブジェクトを返すメソッド?? オブジェクトを返すプロパティ?? 四苦八苦しながら、結果的に動くプログラムは書けることは書けるのですが、どうにも、自分が何やっているのかわからないのは気持ちが悪くて。 あと、気になる言葉でアクセッサってのが見つかりました。 もはや、何をどう質問していいのかすらわからないレベルです。 VBAについて、少しずつ、体系的に学びたいと思ってます。 この本を読むとわかりやすいとかそんなアドバイスでもいただけたら、とても助かります。

  • <excel:VBA>変数を使って簡略化したい

    google検索してなんとか自力で作ったVBAを下記に貼りました。 きちんと動作はするのですが、せっかくなので変数を使って簡素化し、 データが多くても動作が速くなるようにしたいのです。 いろいろ試しましたが、変数の使い方の知識が乏しく、うまくいきませんでした。 変数としたいのは■マークの2箇所になると思います。 詳しい方、力を貸していただけないでしょうか。 どうぞよろしくお願いいたします。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Sub オートフィルタ貼付作業() With Sheets("データ").Range("A3") Application.ScreenUpdating = False Range("AA3:EK3").AutoFilter .AutoFilter Field:=1, Criteria1:="1" ’■Fieldが1ずつ増えていく Range("AA3").Copy Range("Z3") ’■AA3が1列ずつ右へずれていく .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter Range("AA3:EK3").AutoFilter .AutoFilter Field:=2, Criteria1:="1" Range("AB3").Copy Range("Z3") .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter ~~~~~~~~~~~~ 115列分のデータがあり 下記まで同じようにつづきます ~~~~~~~~~~~~ Range("AA3:EK3").AutoFilter .AutoFilter Field:=115, Criteria1:="1" Range("ek3").Copy Range("Z3") .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter End With Application.ScreenUpdating = True Sheets("貼付").Activate Cells.Columns.AutoFit End Sub ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

  • VBAのコードについて

    VBA初心者でございます。 以下のコードの後半(End If以降)でエラーがでてしまいます。 非常に乱暴な質問で大変恐れ入りますが、コードで気になる点などございますでしょうか? もしございましたら、ご教示頂けますと幸いです。 どうぞ宜しくお願いいたします。 Sub 絞り込み() Dim i As Long Dim grp As String Dim newBookName As String Dim newBookPath As String Dim newBook As Workbook For i = 2 To 4 grp = Workbooks("test_master").Worksheets("grpリスト").Cells(i, 2) newBookName = Workbooks("test_master").Worksheets("grpリスト").Cells(i, 2) & ".xlsx" newBookPath = ThisWorkbook.Path & "\" & newBookName '指定したパスにファイルが作成済でないかを確認。 If Dir(newBookPath) = "" Then '新しいファイルを作成 Set newBook = Workbooks.Add '新しいファイルをVBAを実行したファイルと同じフォルダ保存 newBook.SaveAs newBookPath Else '既に同名のファイルが存在する場合はメッセージを表示 MsgBox "既に" & newBookName & "というファイルは存在します。" End If Workbooks("test_master").Worksheets("マスタ0701").AutoFilterMode = False With Workbooks("test_master").Worksheets("マスタ0701").Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)) .AutoFilter Field:=13, Criteria1:=grp '.CurrentRegion.Select Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)).SpecialCells(xlVisible).copy Workbooks(grp).Worksheets("Sheet1").Range("A1") '.AutoFilter End With Next i End Sub

  • Excel VBAについてご教ください

    いつも、こちらのサイトをみながら、VBAを勉強させていただいているのですが、 今回、自分のやりたいことが見当たりませんでしたので、ご教示いただければと思います。 やりたいことは、 (1)「エリア1」にある名称ごとに同じBookの別シートに振り分け (2)各シートで「累計売上」順(降順)に並べ替え の2つの作業を同時に行いたいのです。 また、 (1)には、あらかじめ決まったシートが用意されているので、 そのシートの決められた範囲にデータを移したいのと、 データを貼り付ける前に、前に残っている前回のデータを削除してから、同場所に貼り付けを行いたいです。 ちなみに、エリアが3つあるので、シートも3枚あります。 自分でも、いろいろとやってみて、 下記のようなコードを書いたのですが、あまりにも重くて、動きがわるかったため、 シンプルかつ、軽やかに動くコードの書き方をお教えいただければと思います。 よろしくお願いいたします。 Sub Macro2() Application.ScreenUpdating = False With Worksheets("元データシート") .Range("A5").AutoFilter _ Field:=9, _ Criteria1:="京前", Operator:=xlAnd .Range("F4:P65500").Copy _ Worksheets("前 品別").Range("AJ5") .AutoFilterMode = False .Range("A5").AutoFilter _ Field:=9, _ Criteria1:="京中", Operator:=xlAnd .Range("F4:P65500").Copy _ Worksheets("中 品別").Range("AJ5") .AutoFilterMode = False .Range("A5").AutoFilter _ Field:=9, _ Criteria1:="京後", Operator:=xlAnd .Range("F4:P65500").Copy _ Worksheets("後 品別").Range("AJ5") .AutoFilterMode = False End With Application.ScreenUpdating = True MsgBox "各地区シートにデータを振分けました。" End Sub 【元データの形式は以下のような形になってます。】     A    B    C    D     E       F      G      H      I     J   4  コード S番号 S名称  S名  月間個数 月間売上 累計個数 累計売上 エリア1  エリア2 5  4237  4025  AAA  あああ   3      150     7      350    京後    後A    6  6769  4025  AAA  いいい   2      100     5      250    京中    中B 7  3453  4028  BBB  ううう    5       50     5       50    京後    後C 8  4252  4029  CCC  えええ   1      110     9      990    京前    前A 9  3564  4027  DDD  おおお   0       0      8      80    京前    前A 10 8035  4022  EEE  かかか   1       30     2      60     京中    中B 11 9225  4026  EEE  ききき    2       40     3       60    京後    後A 以下5000行ぐらいデータが続きます。

  • VBAでコードの編集が上手くいきません

    先日、ご回答頂いたコードを元に自分でいじっているのですが上手く行きません 自分が変更したコード シート1→シート名:変更箇所 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$C$40" Then Exit Sub If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value If Target.Address <> "$C$42" Then Exit Sub If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value If Target.Address <> "$C$44" Then Exit Sub If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value End Sub シート2→シート名:リスト Private Sub worksheet_change(ByVal Target As Excel.Range) Dim i As Long, c As Long Dim h As Range, ha As Range Dim myDic As Object Set ha = Application.Intersect(Target, Range("A:C")) If ha Is Nothing Then Exit Sub Set ha = Application.Intersect(ha.EntireColumn, Range("1:1")) For Each h In ha Set myDic = CreateObject("Scripting.Dictionary") If h.Column = 1 Then c = 3 'A列→C列 If h.Column = 2 Then c = 4 'B列→D列 If h.Column = 3 Then c = 6 'C列→F列 On Error Resume Next For i = 2 To Cells.SpecialCells(xlCellTypeLastCell).Row If Cells(i, h.Column) <> "" Then myDic.Add Cells(i, h.Column).Value, Cells(i, h.Column).Value End If Next i With Worksheets("変更箇所").Cells(40, c).EntireColumn.Validation .Delete .Add Type:=xlValidateList, Formula1:=Join(myDic.keys, ",") End With Set myDic = Nothing Next End Sub シート1において$C$40または$C$42または$C$44のいずれかを変更した場合 最後に変更したセルに対し、シート2にオートフィルタ―がかかる様にしたいと思っています。 試しにシート1を以下のように編集したところ、思った動作を行ったのですが $C$40または$C$42または$C$44のいずれかのセルを空白にすると エラーがでてしまいます。 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub Worksheets("リスト").Range("A:C").AutoFilter field:=1, Criteria1:=Target.Value End Sub Then Exit Subをどう編集すれば上手く動作するでしょうか?

  • Excel VBA 変数 ワークシートへ反映

    支店毎に売上集計を行うVBAを現在作成中です。 sheet3に支店名をリストにしており、ユーザーフォームのテキストボックスとコマンドボックスを配置し、テキストボックスに支店名を入力してコマンドボックスを押す事でsheet1の決まったセルに商品毎の金額の合算が出る様にしたいと考えています。 金額の集計表は別にあり、列の一番目に支店名、2番目に商品名、3番目に取引内容が反映されております。 今回ご相談させて頂きたいのは、ユーザーフォームのコマンドでどの様に入力したら良いかという事です。下記にユーザーフォームで現在までに入力した内容を記載します。 Sub 売上集計() If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False End If Dim Result As Long For i = 1 To 100 GroupName = Sheets(3).Cells(i, 1).Value Range("A1").AutoFilter field:=1, Criteria1:=Array("" & GroupName & ""), Operator:=xlFilterValues Range("A1").AutoFilter field:=2, Criteria1:=Array("商品名A"), Operator:=xlFilterValues    Range("A1").AutoFilter field:=3, Criteria1:=Array("売上", "返品"), Operator:=xlFilterValues result1 = WorksheetFunction.Subtotal(9, Range("BF:BF")) If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False End If End Sub 上記希望内容についてユーザーフォームのコマンドに入力すべき内容をご存知の方、何卒ご教示願います。