こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VBAのAutoFilterのFieldに名前

VBA(EXCEL)のAutoFilterについて質問します。
Fieldに列番号ではなく、列につけた名前を設定することはできないでしょうか?

Sub Macro1()
Selection.AutoFilter
ActiveSheet.Range("$A$1:$B$9").AutoFilter Field:=1, Criteria1:="山田"
End Sub

列番号で設定すると、列が増えた時に、改めてAutoFilterの列番号設定を変更する必要があり煩雑に感じています。
名前設定以外に適切な方法があれば教えて下さい。

投稿日時 - 2018-06-16 11:34:22

QNo.9508842

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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

投稿日時 - 2018-06-17 17:41:26

ANo.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

投稿日時 - 2018-06-17 11:27:09

ANo.2

Field は番号でないとダメ見たいです。
A1に「抽出1」という名前をつければ、[抽出1].Column は1になります。
[抽出1]は Range("抽出1")にしてもいいです。
  [A1:B9].AutoFilter Field:=[抽出1].Column, Criteria1:="山田"
とするのはどうでしょうか。

オートフィルターがA列以外ので始まる場合、調整が必要です。

投稿日時 - 2018-06-16 12:42:43

ANo.1

列が増えるとrange範囲も変わってしまうと思いますが??

フィルタをかける前に、
・対象範囲を調べて、
・対象範囲1行目からフィルタをかけたい列名を探せば
設定できると思ます。

投稿日時 - 2018-06-16 12:29:01

お礼

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

投稿日時 - 2018-06-16 23:24:15

あなたにオススメの質問