スタッフ データの大きなテーブルがあり、メイン データ セットからフィルターされたデータ セットを含むテーブルを他のワークシートに作成したいと考えています。私は広範な VBA マクロの作成経験があり、データベースと SQL で必要な作業は数分で完了しますが、ブーツで蟻塚を狙っているような気分です。
ピボット テーブルを使用して実行してみましたが、ピボット テーブルの経験が浅く、満足のいく結果が得られませんでした。
大規模なスタッフ データ セットには、開始日、現在の部署、専門スキル セットなどの情報 (通常予想される情報) が含まれています。
たとえば、X 部門で働くすべてのスタッフや、Y の専門スキルを持つすべてのスタッフを表示する動的なテーブルを他のワークシートに作成したいと思います。当然、メイン データ セットでデータが変更または追加されたときに、ワークシート テーブルを更新する必要があります。
ここに簡単な解決策があると考えるのは正しいでしょうか、それとも実際の DB を使用してそれを追求する必要がありますか?
答え1
Excel 関数に基づいて、ソース テーブルから別のテーブルにレコードをフィルター/抽出する方法を提案したいと思います。
ソーステーブル:
使い方:
- 条件セルが空白の場合、数式はレコードを返しません。
- 数式は単一の条件でも複数の条件でも機能します。
状況1:
状況2:
- セル内の配列数式
B31
:
{=IFERROR(IF(AND(ISBLANK($B$27),ISBLANK($C$27),ISBLANK($D$27),ISBLANK($E$27),ISBLANK($F$27),ISBLANK($G$27),ISBLANK($H$27))," ",INDEX($B$2:$H$21,SMALL(IF(MMULT(($B$2:$H$21=$B$27:$H$27)*1,{1;1;1;1;1;1;1})=COUNTA($B$27:$H$27),MATCH(ROW($B$2:$B$21),ROW($B$2:$B$21)),""),ROWS($A$1:A1)),COLUMNS($A$1:A1))),"")}
- フォーミュラを仕上げるCtrl+Shift+Enter& 横に塗りつぶします。
- この演習の重要な特徴は
MMULT
機能です。 - MMULT (行列乗算) は、2 つの配列の行列積を返します。
- 配列1の列数は配列2の行数と同じです。
- 配列結果には、配列1 と同じ数の行と、配列2 と同じ数の列が含まれます。
必要に応じて数式内のセル参照を調整します。