[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フィルタで型が一致しません』(きんちゃん)
Worksheets("リスト用").Range("l3:l10")の範囲にある文字列だけを、オートフィルタで除外したいのですが、
以下の記述だと最終行で「型が一致しません」のエラーが出ます。
どの部分がいけないでしょうか。
Dim JOGAI As Range
Set JOGAI = Worksheets("リスト用").Range("l3:l10")
ActiveSheet.Range(Cells(5, 1), Cells(LASTROW, 32)).AutoFilter Field:=23, Criteria1:="<>" & JOGAI
< 使用 Excel:Excel2019、使用 OS:Windows10 >
また、仮にその書き方が成功したとしても、
それはOR条件でしょうから「どれかに等しくない」という意味となり、
結果としてすべてが抽出されませんか?
列を追加して、COUNTIFか何かで、23列の値が "リスト用"シートの"l3:l10"セル範囲に含まれるかと
計算しておき、それを対象にAutofilterを掛けるのが手軽ではないですか?
(abc) 2023/01/31(火) 22:26:47
書き方も違いますが、除外を3つ以上はオートフィルターでは不可能です 作業列を使った方法が解説されていましたので参考にしてください https://excel-ubara.com/excelvba4/EXCEL259.html
フィルタオプションなら、計算式を検索条件にできますが、作業列使ったやり方の方が 後々管理しやすいです (稲葉) 2023/01/31(火) 22:29:23
Dim JOGAI Dim AutoFilterRange As Range Dim filterList Dim filterColumn As Long Dim r
 '除外リストをつくる(配列)
 JOGAI = Worksheets("リスト用").Range("l3:l10")
'オートフィルタ対象範囲を設定 With ActiveSheet Set AutoFilterRange = .Range(.Cells(5, 1), .Cells(LASTROW, 32)) End With
'オートフィルタ対象列の値を配列で取り出す filterColumn = 23 Set filterList = Intersect(AutoFilterRange, AutoFilterRange.Columns(filterColumn)).Value
 Dim dic As Object
 Dim v
 'オートフィルタ対象列の値を連想配列に入れる(重複削除)
 Set dic = CreateObject("Scripting.Dictionary")
 For Each v In filterList
   dic(v) = ""
 Next
 '除外リストの値を連想配列から削除
 For Each v In JOGAI
   If dic.exists(v) Then dic.Remove v
 Next
 '除外リストの値を削除したリストを一次元配列化
 filterList = dic.keys
 Set dic = Nothing
オートフィルタ実行 AutoFilterRange.AutoFilter Field:=filterColumn, Criteria1:=filterList, Operator:=xlFilterValues (お邪魔します) 2023/02/01(水) 11:22:18
    Dim Rng As Range
    Set Rng = Worksheets(1).Range("L3:L10") _
    .SpecialCells(xlCellTypeConstants, xlTextValues)
    Rng.Select
End Sub
こういうことかな?
(まっつわん) 2023/02/01(水) 15:55:03
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
 Modified by kazu.