2016-04-22 2 views
0

を使用して、ここに私の質問は、私はこのように見て、文字列の列を持っている...エクセルVBA:だからオートフィルタスマート

です:

"2,3" "1,2" "2" "3,22,1" "32,5"

ここで、私がしたいのは、 "自分自身の関数を書かずに" "(32行または22行の行をフィルタリングする必要があります)。

ので、例えば、唯一の "2" を保つことによって、上記のリストから、私が取得したいと思います: "2,3" "1,2" "2"

私は今の私は、フィルタリング: 1. "2"を含むORに "2" OR "2"を含む

残念ながら、最初の2つのフィルタで「3,22,1」が維持され、「32,5」は第2のものによって保持される。

フィルタ機能でこれを行う方法に関するアイデアはありますか? 私が言ったように、私はそれのための関数を書くことができますが、私はコードを最小限に抑え、VBAをより良く使う方法を学びます。

ありがとうございます! リッカルド

+0

私はちょうど解決策を考えました。今すぐテストする必要があります。 ActiveSheet.Range( "A:A")。 AutoFilterフィールド:= 1、Criteria1:= Array( "2、*"、 "* 2"、 "2"、 "2、") – Riccardo

+0

クールで、動作しない場合は、 〜lセルを使い、InStrを使用して基準に基づいてチェックしてください。私はそれを助けることができますが、その間に幸運: – IIJHFII

+0

"*、2" "2、*"、 "2"、 "*、2、*"のそれぞれに対してオートフィルタを別々に使用すると、問題なく動作します。 このような配列を使用して結合しようとすると、 Selection.AutoFilterフィールド:= 1、Criteria1:= Array( "*、2"、 "2、*"、 "2"、 "*、2、* ") これは、配列の最後の要素にフィルタを与えているだけです。 ORでリンクされた4つの条件を適用する方法を見つける必要があります。私は原則として2つしか使えないが、回避策がなければならないことを知っている。私はArray()を使うのは1つだと思ったが、それは私のためには機能していない。 すべてのアイデア? – Riccardo

答えて

0

は、私はあなたがこのことについて、どのように削除するために、何保つために、しかし、基準のあなたの配列を使って何をしたい、まだ種類がわからないよ:

それは書くより確実な方法だとは注目に値する
Sheets("Sheet1").Range("A:A").AutoFilter Field:=1, Criteria1:=Array("2,", ",2","2",",2,"),_ 
Operator:=xlFilterValues 

マクロを使って直接シートを参照することもあります。スクリプトで時折迷子になることがあります。

+0

*を使用しない場合は、 "contains"でフィルタリングしていませんが、一致すると "2"を含む行だけが表示されます。しかし、配列内の*を使用すると、機能しません(単一のフィルタリング "2、*"などで動作します) – Riccardo