• 締切済み

VBAのAutoFilterのFieldに名前

VBA(EXCEL)のAutoFilterについて質問します。 Fieldに列番号ではなく、列につけた名前を設定することはできないでしょうか? Sub Macro1() Selection.AutoFilter ActiveSheet.Range("$A$1:$B$9").AutoFilter Field:=1, Criteria1:="山田" End Sub 列番号で設定すると、列が増えた時に、改めてAutoFilterの列番号設定を変更する必要があり煩雑に感じています。 名前設定以外に適切な方法があれば教えて下さい。

みんなの回答

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

難しく考えなくても、下記のように簡単。 Sub test01() c = Range("a1:J1").Find("名前").Column MsgBox c Range("A1").AutoFilter Field:=c, Criteria1:="田中" End Sub のようなのでうまく行くのでは。 MsgBox c は確認用。確信したら削除。 ーー 例データは、A1:C7 番号  名前  体重 1 田中  12 2 小森  23 3 岡本 22 4 木島  32 5 橋本  35 6 木村  27 ーー 実行結果 番号  名前  体重 1 田中  12

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

>列が増えた時 先頭に列を挿入したときという意味であれば、 次のように、 列名から列番号を求める関数を用意するというのはいかがでしょうか? Sub Macro1()  Selection.AutoFilter   ActiveSheet.Range("$A$1:$B$9").AutoFilter Field:=getColNum("名前"), _    Criteria1:="山田" End Sub '//列名から列番号を返す関数 Function getColNum(ColName As String) As Integer  Dim wkColNum As Integer  getColNum = 1       'ヒットしないときは1を返す  With ThisWorkbook.Sheets(1)   wkColNum = 1   Do    If .Cells(1, wkColNum).Value = "" Then Exit Function    If .Cells(1, wkColNum).Value = ColName Then     getColNum = wkColNum     Exit Function    End If    wkColNum = wkColNum + 1   Loop  End With End Function

全文を見る
すると、全ての回答が全文表示されます。
  • SI299792
  • ベストアンサー率48% (721/1492)
回答No.2

Field は番号でないとダメ見たいです。 A1に「抽出1」という名前をつければ、[抽出1].Column は1になります。 [抽出1]は Range("抽出1")にしてもいいです。   [A1:B9].AutoFilter Field:=[抽出1].Column, Criteria1:="山田" とするのはどうでしょうか。 オートフィルターがA列以外ので始まる場合、調整が必要です。

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

列が増えるとrange範囲も変わってしまうと思いますが?? フィルタをかける前に、 ・対象範囲を調べて、 ・対象範囲1行目からフィルタをかけたい列名を探せば 設定できると思ます。

Carey0403
質問者

お礼

回答ありがとうございます。 対象範囲は入力された値のある範囲を設定しています。

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

関連するQ&A

  • VBAによるフィルターについて

    VBAによるフィルターについて 表のフィールドから指定したセルの値を含む行をフィルターにかけるVBAを作成しています。 下記のように作成したのですが,うまくいきません。 表の上に検索値を入力するところを設定しました。 (C1=検索値です。)お願いします。 Sub Macro2() ' ' Macro2 Macro ' ' ActiveSheet.Range("$A$4:$L$425").AutoFilter Field:=3, Criteria1:="range(*c1*)", _ Operator:=xlAnd End Sub

  • Excel2003VBA

    お世話になっております。 手作業マクロの記録で下記作業を行い、一部修正をして一度はうまく動作していたのですが 1点 問題が御座いまして独自に色々試していたのですが、どうにもうまくいかないので どなたかご教授いただけませんでしょうか。 Sub ●●用() ' ' ●●用 Macro ' 12月1月の店舗を抽出し新しいブックに移動する。 ' Selection.AutoFilter Field:=3, Criteria1:="=12月", Operator:=xlOr, _ Criteria2:="=1月" Selection.AutoFilter Field:=8, Criteria1:="(店名)" Range("A4:W2076").Select Selection.Copy Sheets.Add ActiveSheet.Paste Application.CutCopyMode = False Worksheets("Sheet1").Select Worksheets("Sheet1").Move Workbooks("営業部まとめ.xls").Sheets("全件表示").Activate Selection.AutoFilter Field:=3 Selection.AutoFilter Field:=8 Range("A5").Select ActiveWorkbook.Save End Sub まず、 >Worksheets("Sheet1").Move ここだけあれば >Worksheets("Sheet1").Select こっちは必要ないでしょうか? あと、上記の中で > Worksheets("Sheet1").Select この部分なのですが、毎回「Sheet1」とは限らないので「アクティブシート」にしたいと思い色々試してみましたが 全てエラーとなり、結局元にもどしてしまいました。 > Worksheets("Sheet1").Move あと出来ればこれも移動させた後でデスクトップに名前を付けて保存までしたいのですが どのようなコードを追加すればよろしいでしょうか。 宜しくお願い致します。

  • マクロ AutoFilter・・Criterial

    ActiveSheet.Range("$A$2:$P$5000").AutoFilter Field:=9, Criteria1:="1" というオートフィルターのマクロがあります。 Criteria1:= の次にある ”1” はどういう意味ですか?

  • Excel2003VBAご教示ください。

    お世話になっております。 今 扱っている資料に手作業でマクロを登録しました。 _______________________________ Option Explicit Sub ●●用() ' ' ●●用 Macro ' 12月1月の店舗を抽出し新しいブックに移動する。 ' ' Selection.AutoFilter Field:=3, Criteria1:="=12月", Operator:=xlOr, _ Criteria2:="=1月" Selection.AutoFilter Field:=8, Criteria1:="(店名)" Range("A4:W2076").Select Range("A86").Activate Selection.Copy Sheets.Add ActiveSheet.Paste Application.CutCopyMode = False Sheets("Sheet1").Select Sheets("Sheet1").Move End Sub ________________________________ 上記は見たままのフィルタを使って 条件を2つ付けて絞って表全体を選択してコピーをし新しいシートを挿入して、そこに貼り付け そのシートを新しいブックに移動するという 見たまんまの作業ですが よくよく考えたら「フィルタを絞ったまま広げてないなぁ」と思い、 _____________________________ Option Explicit Sub フィルタ解除() ' ' フィルタ解除 Macro ' ●●用に抽出したフィルタの解除 ' ' Selection.AutoFilter Field:=3 Selection.AutoFilter Field:=8 Range("A5").Select ActiveWorkbook.Save End Sub ________________________________ 2つ目のマクロとして、これもまた見たままなのですが広げてセルをホームポジション(?)に移動させ、 上書き保存をするというマクロを別のモジュールで作成しました。 そこで質問なのですが、 ・上記2つのマクロは1つにまとめる事は可能でしょうか。 というのも1つめのマクロで新しいブックがアクティブになっているようで その直後に2つめのマクロをそのまま貼り付けたら 「実行時」か「コンパイル」どちらかのエラーがでそうだな。 と思い質問させていただきました。 2つ目の質問として ・新しいブックに名前を付けてデスクトップに保存までしておけば良かったなぁ と思いましたので それも合わせてご教示いただければと思いました。 まだVBAの勉強を始めたばかりですが 宜しくお願い致します。

  • EXCEL2003のVBAで AutoFilter で 「名前付き引数

    EXCEL2003のVBAで AutoFilter で 「名前付き引数が見つかりません」 のエラーが出ます。解決方法をご教示下さい。 Private Sub CommandButton14_Click() Dim myStr Workbooks("***.xls").Activate myStr = Sheet1.Range("F9").Value Range("F2:F17").AutoFilter Field:=1, Criterial:=myStr End Sub

  • エクセルVBAの一時停止後、 入力し再実行したい

    エクセルVBAでオートフィルター実行後に一時停止し、オートフィルターで選んだエクセルシート上のセルに直接入力た後、マクロを再実行させたい。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/3/2 '製品コードより枠番を選ぶ Selection.AutoFilter Field:=12, Criteria1:="=?????1*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Selection.AutoFilter Field:=12, Criteria1:="=?????2*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Range("A1").Select End Sub

  • マクロのAutoFilter Fieldについて

    初めての質問のため、足りない情報などあるかもしれませんので、 その際はご指摘いただけますと幸いです。 マクロのAutoFilter Fieldの場所を可変させたい。 調べ方が甘いだけだと思いますが、AutoFilter Fieldの値を可変させる方法を教えてください。 縦軸に製品、横軸に日付の情報を持つ計画表に対し、 とある日の製品計画情報を抽出したいと考えています。 マクロサンプル記載 Range("$A$2:$z$100").AutoFilter Field:="A1", Criteria1:="製品名" ※A1にはフィルタをかけたい列番号が引数として入っています。 上記の"A1"部分を1や2などの定数にすれば問題ないのですが、 日付によって計画が違うため、可変させたいと考えています。 何か良い方法があれば教えていただけますと幸いです。

  • EXCELのVBAを実行したら止まってしまいます。。。

    お世話になります。 下記のマクロを作ってみたのですが、シート「読込」にコピーされたところまで確認できるのですが、その後マウスが砂時計になって、動かなくなってしまいます。オートフィルタを解除する部分を削って実行してみましたが、同じところで止まりますので、貼付のところに問題があるようなのですが、何がいけないのでしょうか? また、なんかもっとスマートなプログラムになりませんでしょうか? 宜しくお願いします。 Sub test() Sheets("Normal").Select Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:=Sheets("読込").Range("B2"), _ Operator:=xlAnd, Criteria2:=Sheets("読込").Range("C2") Selection.SpecialCells(xlVisible).Copy Sheets("読込").Select Range("C3").Select ActiveSheet.Paste Sheets("Normal").Select Application.CutCopyMode = False ActiveSheet.ShowAllData Selection.AutoFilter End Sub

  • エクセルマクロVBAについて

    エクセルマクロVBAについて、こんなこと出来ますか? ■A列からAS列の1行目にヘッダー情報をもつデータベース ■A列に担当者名 ■A列にオートフィルタをかけて各担当ごとにデータを抽出したものを別シートに貼り付けて自動印刷したい ■担当者は都度変わるので、Criteria1:="xxx"というようには直接書けない(担当名を自動で抽出したい) ■担当者の数も都度変わる ■補足 一行のデータを特定の雛形に転記する必要があるので別シートに出したいです ちなみに、アナログで記録したコードは以下です。 Sub test1() Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="山田" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="斉藤" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="田中" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub これ、担当者の抽出を自動でなんとかなりませんか?

  • オートフィルター VBAでの設定について

    オートフィルターで0以外のものに絞って、 コピーしたいのですが、 値が0しかない場合にすべてのものをコピーするように なってしまうので、 コピーすることがないようにさせたいです。 例) Sub test() Sheets("Sheet1").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" Range("A2:A10").Select Range(Selection, Selection.End(xldown)).Select Selection.Copy End Sub このようなコードの場合にA2:A10の値が0しかなかった場合に コピーしている状態をなくしたいのですが、 どこのコードを変えたらいいでしょうか。 回答よろしくお願いいたします。

専門家に質問してみよう