★★★★★★Access2000VBA・Excel2000VBA独学~★★★「ワークシート関数」と「SQL」や「パワークエリ・パワーピボットなど」との使い分け。ワークシート関数が便利な場面とSQLが便利な場面の使い分けについて~
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
★ 「ワークシート関数」のほうが「SQL」や「パワークエリなど」よりも便利な場面
以前、『 Excelの「VLOOKUP関数」の使い方について 』という記事で、『VLOOKUP関数が「SQL」や「パワークエリなど」よりも便利な場面』という項に書いたことがおおむね、SQLと比較して「関数が便利な場面」かなと思いましたので、少し修正・追記してメモしておきます。
総じて、SQLとは異なり、「小回りを利かせたい場合」に使いやすいと思います。
「セルアドレスベース」ですべてを処理したい、という場合も使いやすいと思います。
(「SQL」の場合は逆に・セルアドレスベースじゃなくて列名ベースでのデータ操作となります。また、表単位の一括操作が多いです。セル単位の操作はかなり少ないです。基本的に「大量データの一括操作が前提」だからです。)
なお、基本、数式がセルに埋め込まれるため、数式(関数)の破壊を招いてデータをメチャクチャにされたり、並べ替え結果がおかしくなる場合があるので、「セルのロック」が必要な場合や「数式の列を値の貼り付けで数式削除する必要がある場合」が出てきます。
では以降、ワーシート関数がSQLやパワークエリ・パワーピボットなどよりも便利な場面、です。
(01)「クロス集計表(静的な表)」、もしくは、「そもそもルールが無いメチャクチャなレイアウトの表」、「スケジュール表など・そもそも計算目的が薄い表」等々のなかで、「値の操作・加工等々」がしたい場合
(02)列単位や行単位ではなく、1セル単位で細かく、「値の操作・加工等々」がしたい場合
(03)列単位・リスト表などのなかであっても、規模の小さい表での、「値の操作・加工等々」がしたい場合
(04)複雑な条件でのデータ抽出が必要ないとき。「複数の複雑な条件」が同時に発生していない場合。
(05)「値の操作・加工等々」をしたい対象の表の列のレイアウトが、頻繁に変化しない場合。(あるいは、列名で処理しなくてもいい場合・セル番地で処理できる場合。)
(06)1つの表の中において、複数の「参照先・紐付け先」を使いたい場合(=複数の異なる表の値を紐付けゲットしたい場合)で、かつ、その表たちがすべて・1つのExcelファイルの中に在り、かつ、SQLのJIONを使うと面倒なくらい「規模の小さい表」の場合。など。
(07)SQLなどで抽出した表に、新たに、別口で顧客IDなどを追加し、それに紐つく情報がほしいようなとき。
例えばバラバラな紐付き情報がほしいときで、追加分の件数が少なく、情報がVLOOKUPで簡単に求められる状況の場合、などなど。
※追加情報をイレギュラーなレイアウトにしたいときなども。
(08)複数のバラバラな表を、例えば特定の列でマージ(縦に結合)したいときで、SQLのUNIONクエリ等々だとかえって非効率になってしまうようなケース(例えば前項の(07)のようなケース)
などなど。
(09)SQLで抽出した表のなかで、数セルだけ、紐付け情報の内容を書き換えたいような場合。
(10)右クリックでの「更新」ではダメな場合・あるいはどうしても面倒くさい場合、リアルタイムにセルの値が自動で再計算されないと間に合わないときなど(複数の表を「数式で」ネスト的に連携させるしか方法が無い場合など)。
※とくにVBAでの「更新」のプログラムが書けない場合。
書ける場合はどちらでもいいので、複数の表がネスト的に連携させられていても、
「関数じゃないとダメ」という場面は減ると思います。
(11)大きな表になった場合に、動作速度が遅くても許される場合。
(12)複雑な抽出条件・集計条件・並べ替え・ピボットとの連携などを、全部「同時に」必要としない場合。
(13)「データがガタガタなリスト形式の表」の修正。
部分的に空白セルがあったり、縦横入替が部分的にだけ必要だったり等々の「部分的にイレギュラーなかたち・崩れが多い表」を直す作業。データクレンジング?、部分的な名寄せ・統合、などをしたいとき。
などなど。
★ 「SQL」のほうが「ワークシート関数」よりも便利な場面
総じて、
・数万~数十万件などのデータを複雑な条件で扱いたい
・セル単位じゃなくて表単位で一括でデータを操作(集計、抽出、結合、分解、その他)したい
・「セルアドレス」ベースではなく、「列名」ベースで、一括操作をしたい。
・複雑な条件で複数の表を結合したい
・件数が少なくても、複雑な条件で表を操作したい・条件自体を短時間に色々に切り替えたい
・ワークシート関数やVBAのループ処理よりも高速な計算処理や表の結合処理をしたい
・QueryTableオブジェクト(VBAかMicrosoftQuery)にて、「SQL+行列可変名前定義+ピボット」も併用しながら、パワークエリやパワーピボットのようなことを、実際のパワークエリやパワーピボットよりも簡単に高速にやりたい
・パワークエリやパワーピボットと似たようなことを、VBAで自動化したい
・AccessやSQLServer、MySQL、などとのデータの連携をやりやすくしたい・あるいは・移植をコストをかけずにおこないたい。
といった場合に使うことが多いです。
基本、SQLでも、「SUM」や「AVG(AVERAGEと同じ機能)」「MIN」「MAX」「COUNT」といった「集合関数」や、IFに似た「ベーシックな関数」が使えます。
実は、Excelのワークシート関数の「SUM」や「AVERAGE」といった「ベーシックな関数や集合関数」などは、SQLが持つそれらの「マネ」ではないかというくらい、似ているので、そういう処理は、SQLでも当然可能で、むしろ、SQLのほうが元祖で高速で工数も少なくコスパが良い場合も多いと思います。
また、SQLでの『 絞込み(フィルタ的な機能)や表結合処理(VLOOKUP的な横結合やその他縦結合)、各種集計処理 』等々の結果の表は、基本、全部「値のみ」で結果が出るので(答えが返ってくるので) 数式は「ひとつのセルにも埋め込まれません」。
ですので、数式の破壊を心配する必要が無く、「セルのロック」や「値の貼り付けによる数式削除」が必要ありません。並べ替え結果がおかしくなる場面も少ないです。
数式による再計算も発生しませんから、動きも速いようです。
では以降、SQLがワーシート関数やパワークエリ・パワーピボットなどよりも便利な場面、です。
(01)「リスト形式の表・データベース的な表(動的な表)」のなかで、「値の操作・加工等々」がしたい場合
(02)列単位や行単位で、大量に一括して「値の操作・加工等々」がしたい場合
ワークシート関数よりもラクにできる場合も少なくありません。
(03)数万~十数万規模の大きな表での、「値の操作・加工等々」がしたい場合
こちらもワークシート関数よりもラクにできる場合も少なくありません。
(04)数百件であっても、複雑な条件でのデータ抽出が必要なとき。「複数の複雑な条件」が同時に発生する場合。
こちらもワークシート関数よりもラクにできる場合も少なくありません。
(05)「値の操作・加工等々」をしたい対象の表の列のレイアウトが、頻繁に変化する場合。(あるいは、列名で処理したい場合・セル番地で処理したくない場合。)
(06)複数の表を同時に・複雑に紐付けしたいときや、紐付けした「以外」の、つまり、「紐付けされなかったデータ」も簡単に知りたいとき、など。
(07)複数のバラバラな表を、例えば特定の列でマージ(縦に結合)したいときで、ワークシート関数だとかえって非効率だったり、動作速度が遅かったりするとき。
(08)右クリックでの「更新」でOKな場合・複数の表を「数式で」ネスト的に連携させるしか方法が無い場合など。
※とくにVBAでの「更新」のプログラムが書る場合は、複数の表がネスト的に連携させられていても、
「ほぼ」リアルタイムの処理が可能なので「関数じゃないとダメ」という場面は減ると思います。
(09)数万件~数十万件など、大きな表を扱う場合に、動作速度が遅いと困る場合。
関数だと件数が多いと動作が遅くなるようです。
また、もしかしたらファイル容量もSQLのほうが少なくなるかもしれません。
数式は基本的には一切、セルに埋め込まれませんので。
(10)複雑な抽出条件・集計条件・並べ替え・ピボットとの連携などを、全部「同時に」必要とする場合。
(パワークエリやパワーピボットと似たことをしたい場合)
(11)パワークエリやパワーピボットと似たことを、「VBAで自動化したい」という場合。
(パワークエリやパワーピボットをVBA操作するのは参考文献も少なくてとても難しいため)
※特に、古いバージョンのExcelでもこれができます。
(12)特に、「複雑な条件を」「複数」「同時に」使いたい場合や、「条件を色々と切り変えたい」という場合。
などなど。
★ パワークエリやパワーピボットがワークシート関数やSQLよりも便利な場面
パワークエリやパワーピボットでしかできないことを行う場合。
・最新の「見える化」機能との連携とか、クラウド対応とか、色々。
・表のクレンジング(クロス集計表のテーブル化等々)なども。
などなど。
中小・零細企業でのデータ管理においては、滅多に使わないとは思います。
「SQL単独」や「SQL+行列可変名前定義+ピボット」を使うほうが便利なケースの方が基本的には多いはずです。
「SQL単独」はクエリのクエリのクエリ、と言った感じでネスト的なこともでき、パワークエリのかわりになります。
また、「SQL+行列可変名前定義+ピボット」はパワーピボットの変わりになります。
大抵は、「SQL単独」か「SQL+行列可変名前定義+ピボット」で、かなり複雑な表操作や集計が、パワークエリやパワーピボットよりも少ない工数で可能なので、パワークエリやパワーピボットを使うことは少ないと思います。
特に、「見える化」「グラフ化」について、Excelを深く使っていない場合は、不要になると思います。
- 投稿タグ
- 「ニセモノ」への道, 「本物」に近づくために, AccessVBA, Accessの独学, Access操作の基礎, Accesの独学, ADO/DAO, ExcelSQL, ExcelVBA, Excelの独学, Excel操作の基礎, Excel連携VBA, MicrosoftQuery, ODBC, SQL, パソコンでの自動化, マクロ, 独学, 自動化