2016-03-19 60 views
2

初めてこの素晴らしいコミュニティを楽しむことができて嬉しく思います。これは私の最初の投稿ですので、投稿時に間違いがあれば事前にお詫びします。日付基準を持つテーブルのvba excel AdvancedFilterメソッドは機能しません

私がアクセスファイルからデータをインポートするので、行数が動的に変化...私はVBAを経由して、この表にAdvancedFilter方法を適用しようとしていることにより、生成されたという名前のテーブルを得ました。
私はテーブルのヘッダーをコピーするためにシートの最初の行を使用しました.2番目の行では、フィルタリングのためにパラメータを設定しました。A1:D2の条件があります。行5から始めてテーブルがあります。ヘッダ行で始まり、データのすべての行と一緒にアクセスファイルからインポートされます。たとえば、範囲A5:D20です。
テーブルA5:D30の範囲と指定範囲A1:D2の範囲を指定すると、高度なフィルタを手動で適用します(詳細フィルタボタンをクリックしてフォームに記入してください)。データの範囲を指定するのではなく、テーブルの名前を使用する場合結果は違うので、私が期待している5つの行(正しい行)ではなく1行だけです。
上記の質問が好奇心のためのものである場合(ただし、私の問題と結びついていると確信しています)、主な問題はVBAコードで同じことをしようとしていることです。私は

Worksheets("name").Range("example[#All]").AdvancedFilter _ 
Action:=xlFilterInPlace, CriteriaRange:=Range("A1:D2"), Unique:=False 

Worksheets("name").ListObjects("example").Range.AdvancedFilter _ 
Action:=xlFilterInPlace, CriteriaRange:=Range("A1:D2") 

を試みたが、両方が動作しません:フィルタリングアクションが何行を返しませんでした。

私は

Worksheets("name").Range("A5:D30").AdvancedFilter _ 
Action:=xlFilterInPlace, CriteriaRange:=Range("A1:D2"), Unique:=False 

は、問題が解決しない(...ない範囲が動的に変化するので、私の問題の解決策が、テスト目的のために)手動で範囲を指定してみてください場合でも、コードが返されませんでした行はありません。

注:私は代わりにAdvancedFilter上記コードでrangeselectあれば選択が正しい:私はマクロの記録を開始する場合はヘッダ

最初のコードと、テーブル全体が自動的に書かれた同じであり、行います手動でフィルタリングし、マクロの記録を停止する(テーブル参照で正確に書かれたコード)... wierdのことは、私が手動で(マクロを記録している間)操作を行うと正しくフィルタリングされますが、 ...何も、上記のコードを実行する場合と同じです。

私は式 - >名前タブを開くと、私はテーブルを見つけることができますが、specifyed範囲は、ヘッダーが考慮されていないみたいだ...行5からではなく、6からはありません開始していません理由は分かっていますが、データのインポートによって自動的に生成されるので、インポートされたデータへの参照を保持する範囲を変更する方法がわかりません...おそらくこれは問題ですか?

問題を解決する方法がわからない、私を助けてください:)

編集:私は、フィルタのために使用している基準の
2つは具体的には、日付の基準である:日付< = XX/yy/zzzz日付> = aa/bb/ccccと問題はまさにこの問題です...上記の3つのコードを上記の文字列基準でフィルタリングしてみると、日付基準で使用すると動作しますが、彼らはしません。だから私は問題は、VBAの日付データ型を手渡す方法に依存すると思います。なにか提案を?

基準に使用される細胞は、この式(「SE」は、「IF」のイタリア語版である)を含有する:

=SE(filtro!F2="";"";">="&filtro!F2) 
=SE(filtro!F3="";"";"<="&filtro!F3) 

を私は別のシート(「filtro」)から基準を取り、細胞である場合私は< =または> =に挿入されたデータを基準に報告します。そうでない場合は、条件を設定しないためにセルは空のままです。

エットーレ

+0

VBAでプログラムされた詳細フィルタでテーブル名を使用する際に問題が再現できません。ネーミングと同じくらい、あなたが見る動作は正常です。テーブル名は、データ範囲のみを参照します。ヘッダー範囲(必要なもの)を含める場合は、 'Table1 [#All]'形式を使用してください。データに問題があるか、基準を設定した可能性があります。 –

+0

問題がデータまたは条件の問題に依存する場合、フィルタは「手動」モードでは機能しないはずです...しかし、同じシート、同じテーブル、同じデータ、ボタンをクリックしてフィルターを適用し、私が書いた3番目のコードで使用したのと同じ範囲でフォームを記入してください。それは動作します...多分、テーブルの_example_がデータのインポートで自動的に生成されることになりますか? – EttoreP

+0

日付またはローカル区切り記号を使用する条件である基準は、VBAでは手動で実行したときとは異なる処理をすることがあります。あなたが提供した情報であなたの問題を再現することはできないので、私ができることはあまりありません。あなたが好きな場合は、機密情報を削除して問題を示すブックを公開共有サイトにアップロードし、ここにリンクを投稿してください。 –

答えて

0

最後に、問題を解決してソリューションを共有します。私は私の質問の編集で述べたように、フィルタの2つの基準が日付のある、私は2つの問題を発見し、両方がこれに接続されている
:私は他のソース(アクセスファイル)からデータをインポートするとき

  • と私はフィールドに適切なフォーマットを設定していないフィルタリングしようとしていたテーブルが移入された、私はすべてのExcelを決定したまま残し、これは問題でした。正しい方法は次のように設定することです。
    1. テーブル内のフィールド(フィルタリングするデータを持つデータ)は、書式設定済みのdate(アクセスにテキストとして保存されているため、単純ではありません。 SQL正しいタイプと形式のデータを抽出するための文字列)を作成しました。
    2. フィルターの条件を格納するフィールドは、generalです(私の場合は、このフィールドには、私の質問の編集intが記載されています)。
    3. フィールドは、フィルタの日付(式で参照されているもの)をdateとして、テーブルのフィールド(ポイント1)と同じ形式で挿入します。
  • 私の質問の編集で述べた式は、このセルが満たされている場合は、(私は日付を挿入)セルを見て、< =データ挿入または> =データ - のようなものを返します。が挿入されています(これは問題ありません)。セルに何も挿入されていない場合、""が返されます。フィルタの文字列の条件ではこれは正常ですが、日付の基準ではないため、フィルタで日付が入力された表のフィールドに""という何も検索されません。私はnull値または他の同様のを使用するようにしようと試みたが、私は日付基準についてではありません見つけることができませんでした...ので、私が使用この問題を回避するには、< = 31/2100分の12またはを返すことです> = 01/01/1900私が大断日またはそれより低い日付を制限するのを嫌っていないとき。

これは誰かを助けることができますか。
Ettore

0

おかげで、この以下の手順をお試しください。それは私のために働いています。

まず、我々は名前付き範囲を作成します(名前の定義)(それは表で呼び出す)、範囲に式= OFFSET(Sheet1のA5,0,0、COUNTIF(Sheet1の$ A $ 5を使用し、動的与える必要があります:!!$をA $ 100、 "<>")、4)。

名前の範囲 - テーブルを作成するときに、このオフセット式を貼り付けます。

この式は、範囲を動的に変更します。

サブAdvanfil() ' ' Advanfiltマクロ '

' レンジ( "表")は、以下のように書くVBAコードはAdvancedFilter処置:= xlFilterInPlace、CriteriaRange:= _ 範囲( "A1:D2")、ユニーク:=偽 エンドサブ

私は上記のウルの難しさを緩和すべきだと思います。

+0

Sub Advanfil() アドバンストフィルタアクション:xlFilterInPlace、CriteriaRange:= Range( "A1:D2")、一意:= False End Sub –

+0

返信ありがとうございます。ダイナミックレンジは、あなたが提案したように、テーブルに100以上の行があり、この場合オフセットが間違ってしまうことがあるためです。 _Sheet1!$ A $ 5:$ A $ 10000_のようなものを使用して範囲を拡張することはできますが、テーブルに10行(次元が動的に変更される)の場合、Excelは10000行を有効にします。テーブルが10000以上の行になっても問題は解決しません。とにかく、私はすでに正確な範囲を保持するテーブルを持っているので、それを使わないのはなぜですか?とにかく、問題はVBAが日付データ型を保持する方法のようです。 – EttoreP

関連する問題