電子書籍の厳選無料作品が豊富!

お世話になります。VBA初心者です。
オートフィルターで検索する際に
検索するセル?を指定できるかどうか
ご教示頂きたいです。

Range("1:1").AutoFilter Field:=26, Criteria1:= _
"=エビ", Operator:=xlOr, Criteria2:="=カニ"

>AutoFilter Field:=26
この部分を26番目ではなく、
セルの名前が"名前"になっているところでフィルタ指定してあげたいです。
下記のようなコードとかうまく使えないですかね。。。
(使えないようならスルーしてくださって問題ないです)

Dim A
Rows("1:2").CreateNames Top:=True
A = Range("名前").Column


宜しくお願いします。

質問者からの補足コメント

  • どう思う?

    ありがとうございます。
    無事にできました。

    もうひとつ伺いたいのですが、
    同じ方法で昇順降順の並べ変えをしたいのですが
    型がエラーになってしまっていて
    うまく動作しません。

    修正方法を教えて下さい。

    Worksheets("sheet1").AutoFilter.Sort.SortFields.Add Key:=A, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal

    おそらく、>Key:=A,の部分がおかしいのかもしれません。。。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/04/24 14:08

A 回答 (3件)

こんにちは!



横からお邪魔します。
並び替えの方も「名前」という項目列で行うのでしょうかね?

一例です。
二つのマクロにしてみました。

Dim c As Range
Sub オートフィルタ()
With Worksheets("Sheet1")
Set c = .Rows(1).Find(what:="名前", LookIn:=xlValues, lookat:=xlWhole)
.Range("A1").CurrentRegion.AutoFilter field:=c.Column, _
Criteria1:="エビ", Operator:=xlOr, Criteria2:="カニ"
End With
End Sub

Sub 並び替え()
With Worksheets("Sheet1")
Set c = .Rows(1).Find(what:="名前", LookIn:=xlValues, lookat:=xlWhole)
.Range("A1").CurrentRegion.Sort key1:=.Cells(1, c.Column), order1:=xlAscending, Header:=xlYes
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

No1です



AutoFilterのSortって使ったことが無いので、よく知らないのですが・・・

引数Keyの内容はRangeオブジェクトのようですから、「TYpe Error」ということは変数AがRangeではないのではないでしょうか?
https://msdn.microsoft.com/ja-jp/VBA/excel-vba/a …

もしかして、前の質問と同じように
 A = Range("名前").Column
などとして、そのAを使っていたりしませんか。
上記の場合、Aは列番号(=数値:Long)だったりしますので、Rangeではありませんね。
    • good
    • 0

こんにちは



名前の定義で"名前"と設定したセル(範囲)の列数を利用したいという意味でしょうか?
フィールド番号と列番号は必ずしも一致するとは限りませんが、それで指定できる場合にはご提示の方法で可能です。

 A = Range("名前").Column
 ~~.AutoFilter Field:=A ~~
といった感じです。

あるいは、ダイレクトに
 ~~.AutoFilter Field:=Range("名前").Column ~~
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!