• 締切済み

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/17070)
回答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% (455/693)
回答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
  • ベストアンサー率47% (793/1659)
回答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