質問: excelでsql serverからインポートする前にデータを動的にフィルタリングする excelにインポートする前に、sql server接続からデータをフィルターする方法があるかどうかを確認しようとしています。最初のインポートは関係ありません(接続がセットアップされている場合)が、後で開いたときにデータがほとんどまたはまったくなく、パラメーターが選択された後にのみ関連データをインポートする必要があるexcelが必要です。 sqlテーブルには大量のデータが含まれる可能性があり、パフォーマンスが問題になります。したがって、データをテーブルにインポートする場合、たとえば、country to be ukにフィルターを適用し、ファイルを閉じて、来週再び開きます。理想的には、クエリを実行してukのデータのみをインポートする必要があります。また、別の国を選択すると、その国のみのデータがインポートされます。選択肢を表から列挙する必要があります。現在、テーブルにその機能があるとは思えません。しかし、スライサー、ピボットテーブル、powerview、powerpivotはどうでしょうか。どんなアイデアにも感謝します。
回答: vbaを使用してもかまわない場合は、sqlクエリを動的に生成することでこれを簡単に行うことができます。qlikviewやcrystalほど複雑なものを必要としないアドホックダッシュボードを生成するために、以下のようなものをかなり広範囲に使用しています例えば。非表示のシート「変数」には、テーブル「table_sql_sales_employees」が含まれています。これはsqlによって入力され、パラメーターの選択に必要な最小値を返すだけです。 _select distinct accountdirector from invoicedsales order by accountdirector_のようなもの。次に、名前付き範囲 'sales_employees'があり、その範囲は_=table_sql_sales_employees[accountdirector]_として参照しています。これは、入力範囲が「sales_employees」に設定されているコンボボックスにマップされます。これにより、選択したリスト内のアイテムの選択したセル(私の場合はe5)に番号が送信されます。元のsql抽出に従って実際の値を返すには、=offset(table_sql_sales_employees[[#headers],[accountdirector]],$e$5,0)を使用する必要があります。これは「slp」という名前です。。:可能なすべてのアカウントディレクターのドロップダウン選択ボックスがあります。会計四半期にはもう1つありますが、同じ原則です。コンボボックスで選択が変更されると、マクロ 'changefilter()'が呼び出されます。_sub changefilter() dim wb as workbook set wb = excel.activeworkbook dim ws as worksheet set ws = excel.activeworkbook.sheets("lookups") dim conn as excel.workbookconnection dim slp as name set slp = wb.names("slp") dim qtr as integer qtr = wb.names("qtr").referstorange.value2 dim query as string ' adjusted sales consolidated set conn = wb.connections("sql_adjustedsales_consolidated") query = "select * from invoicedsales where accountdirector=" & "'" & slp.referstorange.value2 & "'" conn.oledbconnection.commandtext = query conn.refresh _ハードコーディングされた変数を使用してデータベースに接続することにより、テーブル/ピボットを基本的に事前設定し、「ファイルを開くときにデータを更新する」オプションと「ワークブックを保存する前に外部データ範囲からデータを削除する」オプションを選択します-これにより、ファイルサイズを小さく保つことができます実際には何も保存されません。フィルターを変更すると、ハードコードされた変数が、選択したパラメーターを使用して動的に生成されたsqlクエリで上書きされ、テーブルが更新されます。