ピボットテーブルが集計以外にも便利な場面
※関連記事
ピボットテーブルの使い方やできること01 ~「できること」編 ~ ビジネスデータ管理(コスト減等も)を2~100倍効率化するツールその2
ピボットテーブルの使い方やできること02 ~ 「使い方」編 ~ ビジネスデータ管理(コスト減等も)を2~100倍効率化するツールその2
※Shift+TABキー、もしくは、Homeキーを押すと、目次付近に戻れます。
※まだ書きかけです。すみません。
※★★★ 「この世で一番重要」なExcelサイトのご紹介 ★★★
★★★ (どんなExcelサイト、VBAサイトよりも重要です。) ★★★
ここは、無駄な作表、無駄なVBA、無駄な関数処理を激減させてくれる、「Excelは本来は紙と電卓の代わりではなく、コンピュータなのです。」「真のVBAでのコストカット」ということの「基礎」をマジで、真に教えてくれるサイトです。(ただ、もちろん、紙と電卓としてのExcelの使い方も間違いなく有効です!)
他のサイトにも重要なサイトはありますが、ここほど、「真のVBAでのコストカット」ということの「基礎」をマジで、真に教えてくれるサイトは他にはありません。
※本記事でご紹介する「ピボットでの各種作業」も、ここのサイトを参考に自動化できるということになります。その意味でも本当に重要なサイトです。
ちなみにですが、「ビジネス定型集計や定型リストアップをしたい」という場合に限ってだけは、『Microsoft Query(QueryTableオブジェクト、QueryTablesブジェクトなど)と、ピボットテーブル(PivotTableオブジェクト、PivotCacheオブジェクトなど)をVBAで操作するエキスパートでないVBA講師の方』に、VBAは習わないほうがいいです。
「Excelの集計機能の全部を全然知らない」という意味と同じなので、そんな人から習えば、無駄なVBAや関数などを「作りまくって無駄にコストを上げてしまう・データ管理のムリムダムラをかえって増やす」ことを教えられてしまう可能性が高いです。本当にご注意ください。(「ビジネス定型集計や定型リストアップをしたい」という以外の、例えばシュミレーションやグラフ操作やゲーム作成などをしない場合はこの限りではありません。)
=============
以下、本文です。
★ はじめに
Excelは「表作成・集計や抽出のためのソフト」なんですけれども、そのなかでも、「ピボットテーブル」は、プログラミングなしに『無駄な 表作成・集計や抽出 を激減』させてくれる『VBAよりも重要なツールのひとつ』です。
ここでは、「表作成・集計や抽出」以外に、ピボットテーブルが使える場面をご紹介させていただきます。
具体的な操作内容はまだ書けていませんが、以降の内容からご自分で検索語句を考えてWeb検索にかけてみてください。きっと、効率化・コストカットのなんらかのヒントになると思います。
なお、ピボットテーブルは「基本的にはプログラミングはあまり関係ない」と思われています。
「ピボット(ついでに言うとMicrosoft Queryも)」を、VBAで自動的に動かす書籍やサイトが「ほぼない」ことがその証拠です。
特に書籍というか、出版の分野では、Excelが20年も続いてきたのに、『「ピボット(ついでに言うとMicrosoft Queryも)」をVBAで動かす』ための詳しい専門書籍が一冊もない・・・、というのは、わざと日本をダメにしたいのか?出版社の想像力・創造力・企画力・着眼点の著しい欠如だなあ・・・結局出版社はExcelVBAやデータ管理のことを何も理解していない・・・、日本の子供たちの将来を何も考えていないに・・・というくらいの状況だと思います。
話がそれました。すみません。
ですが、それは間違いで、「ピボット操作を自動化する」というプログラミングはさらにコストカットを促します。ピボット自体で集計や抽出のコストカットができてしまう上に、それの自動化で、さらに、コストカットに貢献できる、という形になります。
なぜそうなれるかというと、「ピボットをVBAで動かす」とは、「ピボット作成そのものやレイアウト変更を自動化する」、という意味だからです。
そしてそれをメニューバーやクイックツールバー、リボン、シート上に作ったボタンなどに仕込めば、「ワンクリックで終わる作業も少なくない」ということです。データ入力や途中の目視チェック等々だけは自分でやって、あとはすべてワンクリックで終わるとすれば、そのような部分的な自動化であっても、かなりの効率化になります。(『「マクロ」のリボンへのメニューボタン化・関連の記事5つ』→1、2、3、4、5)
ピボットやMicrosoft QueryをVBAで扱えるということは、「それらの集計や抽出の結果を、帳票作成の自動化ともからめられる」ということでもありますし・・・。
ピボット作成やレイアウト変更を自動化する、GetPivotData関数を使った数式を好きなセルに埋め込む、など、便利な機能が満載です。
これは、本記事で掲げたような「表作成・集計」以外のピボット操作の自動化にもたいへん有効です。
以下の操作を、冒頭で紹介したサイトなどをご参考に、VBAにて『Microsoft Query(QueryTableオブジェクト、QueryTablesブジェクトなど)や、ピボットテーブル(PivotTableオブジェクト、PivotCacheオブジェクトなど)』などを使って自動化すると、更なるコストダウンが見込めます。(もちろん、自動化したほうがよいほど「頻度の多い操作」に限りますが。)
なお、「なんでもピボットにしやがって」とか言って、ピボットを馬鹿にする愚かな人がたまにいらっしゃいますけど、ピボットをVBAで動かしたことがない人だと思います。きっと何もわかってらっしゃらないと思いますので、そういう方の言うことは無視してくださって大丈夫です。(もちろん、使い過ぎはかえって非効率を生むことも少なくないので、バランスをとることは大切ですが・・・(^^))
★ 作表
(01)クロス集計表(静的な表)をリスト形式表(動的な表)に、できるだけ早く、プログラムを使わずに直す。(シンプルな構造のクロス集計表に限りますが)
(02)行と列をいつでも(コピペじゃなくドラッグだけで)瞬時に入れ替え表示できる表を作る
(03)列見出しを複数多段的にしたり、行見出しを同じようにした複雑な集計表を作る
(04)自由にグループ化したり、解除したりできる表を作る(特定の2、3個のチームだけ、売上合計を一時的にON・OFFする、など)
(05)1つの列や行だけでなく、関連する列や行も複数一括で、同時に入れ替えたり移動させたり色付けできる表を作る
(06)集計した特定の値を、つねに、別のシートの特定の場所に表示したい。集計値が無ければ表示しない、という表を作りたい。
※例えば「この帳票のこの特定のセルに、常時、担当者が××さんの売上合計を表示したい。ゼロなら表示しない」、といったこと。
★ 重複チェック
(入力ミスチェックと同じシチュエーションで使えます)
(01)「どんな重複や入力ミスが何件あるか件数だけ知りたい」というとき
(02)「そもそもどんな重複データがあるか?」などを調べるとき
(03)「重複が無い」ということ自体を素早く調べる。(1列当たり数十秒~数秒で)
重複がある列だけを絞り込む
(04)もとの表を触らずに、重複を見つけたい。
(05)たくさんの列で、立て続けに重複チェックをしないといけないとき(関数だと面倒な時)
(06)全部の列を調査対象に何がどう重複しているかを一瞬で調べて不要な列を削除したいとき。
(07)関数を知らない人、勉強したくない人に重複チェックさせたいとき
(08)沢山の列で重複調査しなければならないとき、チェックなどを繰り返したり、モトのシートも残しておきたい時
(09)誰かに重複削除依頼したデータが、本当に正しく削除されたかをプログラムや関数なしで瞬時にチェックしたい場合。
(10)重複調査する列は「顧客ID」や「住所」などだが、削除する基準の列が「趣味」「訪問日」「重要度区分」など、別の列の場合。
(11)関数がどうにも覚えるのが面倒なとき、ちゃちゃっと済ましちゃいたい時。
★ 入力ミスチェック
(重複チェックと同じシチュエーションで使えます)
(01)一つの列の中に、どんな値が何個あるか、関数無しで瞬時に調べたい時。
そして、その各個数順に並べたい時。
(02)「そもそもどんな入力ミスがあるか?」などを調べるとき。特にそれが「いくつあるか」を知りたいとき。
(03)数万件ある表の中に、どんな入力ミスがあるかのチェック
・空白行、空白セル、結合セル、が混ざっていないか?
・数字しか入力してはいけない列に、日本語や英語を入力していないか?
・誤って、個人情報などを数セルだけに入力していないか?50列、3万行を全部調べる
など。
===================
以下詳細
★ 重複チェック
(01)「どんな重複や入力ミスが何件あるか件数だけ知りたい」というとき
この場合、どの列に、どんな入力ミスや重複が隠れているか、わかりません。
そのようなときに、いちいち、関数を使うのも時間がかかってしょうがないです。
そのようなときこそ、一列ずつ、ピボットを使えばあっという間です。
関数を覚える必要もないし、ミスはちゃんと見えてくるし、重複も件数だけならすぐにわかります。
沢山列がある場合に、どの列にどんな入力ミスがあるかを全部調べるのは、関数だと本当に面倒くさいです。
列が20も30もあるのに、全部の列に空白作って、関数の数式埋めるなんてやりたくないです。
ピボットならドラッグだけで何がどうミスってるかすぐにわかります。
(02)「そもそもどんな重複データがあるか?」などを調べるとき
これも上記と同じ理屈です。
1つの列だけ調べるならいいのですが、列が沢山ある場合、行も沢山ある場合、関数だと面倒で仕方が無いです。
ピボットなら、重複した値は、「2件以上のなら重複」といったかたちで全部すぐに出てきます。
もし、重複分を削除したければ、元の表に連番の列を作っておけば、すぐに調べられます。
重複の明細が、その連番の列の値(行番号)とともにワンクリックで出てくるからです。
それさえわかれば、行番号を紙にメモしておき、検索で行を特定して削除もできます。
たくさんあるなら、「フィルタオプションの設定」機能で、行番号だけ残しておけば、
一括で消せます。
(03)「重複が無い」ということ自体を調べる。
ピボットテーブルは、「重複自体がない」ことを調べるにも早いです。
もちろん、セル対セル、での値同士での「重複」についてだけですが・・・
でもそれでも、それがすぐにわかるのとわからないのとでは、仕事のラクさが違ってきます。
VBAプログラムを書かなくてもいいので、基本的な操作(ドラッグと件数で降順の並べ替え)さえ知っていれば、プログラマ以外の、もっと言ってしまえば小学生でも、高学年ならその操作ができてしまうところがすごく良いです。
いちいち関数用の列を作る必要もありませんから、「元データが絶対に狂わない」という信頼性も高いです。
(Excelは高機能すぎて、いろいろできすぎてしまうため、元データを少しいじると、 元データ自体がゴミデータになることがあるため。そうなってしまうと、後が面倒。)
例えば 数列の表であれば、行が数万行あたとして、「重複ある、なし」は本当に早くわかります。
たとえば8列くらいで、3万行ある表に、セルの値が重複するものがあるかどうか調べる時間は、ピボットの扱いと並べ替えができれば、3、4分で終わると思います。
「何がどう重複しているか」までを調べるのには、ちょっと時間がかかりますが、「重複ある、なし」だけを調べるなら、そのくらいの時間で終わります。
Excelピボットに慣れた人なら、1、2分で終わるでしょう。
これが
▽ VBAプログラムが書けない、
▽ 関数なんてひとつも知らない、
▽ 営業の方、事務の方、小学生高学年の子、
にもすぐにできるわけですから、
こんなに効率のよい集計ツールは無いよなあ、といつも思います。
(04)もとの表を触らずに、重複を見つけたい。
基本的には、連番の列を作る以外は、まったく触りません。
元の値はまったくいじらなくいいです。
重複を調べるための数式用の列も作らなくていいですし。
ピボットテーブルは、ピボットテーブルの出力先を新しいワークシートにすれば、元の表のレイアウト、値、すべてを、基本的にはなんら変更しません。
逆に、もし、元の表に足りない列があれば、付け加えることも可能です。
ただし、その際に、一番最初のデータの並びを再現するために、必ず「連番」の列だけは新設しておきます。
1、2、3、4、・・・という感じで行番号を付けていきます。
この連番さえつけておけば、元の表で何らかの並べ替え操作が行われたときに、すぐに初期状態に戻れます。
何かの定型的な集計をするときに関数やセルのリンクをたくさん使うともとの表がぐっちゃぐちゃになってしまって、あとで訳が分からなくなってしまうことがあるのですが、ピボットテーブルでは、定型的な集計の時は関数を多用するときほどは、もとの表をいじらなくても済みます。
これは、再現が楽ちん、ということを意味するので、すなわち、誰にでもできる確率が高い、ということでもあります。
まったく勉強をしなくてもよいというわけではありませんが、少なくとも、定型集計に関してはVBAプログラミングや関数の勉強の10分の一くらいか、それ以下の勉強で集計ができるようになります。
なお、もとの表をいじらないで済みまはしますが、元の表に足りない列を付け加えることはルール違反ではありません。ピボットの場合。
例えば、「日付」という列がある場合で、「月」、や、「月度」、といった列が無い場合、それを後から追加して、再計算することも可能です。
「日付」の列の値をもとに、「月」、や、「月度」、の列を作るときは数式や関数が必要ですが、そのくらいで(新しい列を作るときくらいで)、そのほかにはあまり関数は使いません。
ちなみに、「日付」から「月度」を求める関数は、以下の通りです。
●月度を出す関数
(21日からが新月度の場合=20日締めの場合)
=TEXT(日付セル+11*(DAY(日付セル)>20),"M")
(22日からが新月度の場合)
=TEXT(日付セル+10*(DAY(日付セル)>21),"M")
(16日からが新月度の場合=15日締めの場合)
=TEXT(日付セル+16*(DAY(日付セル)>15),"M")
↑31-締日 ↑締め日
(05)たくさんの列で、立て続けに重複チェックをしないといけないとき(関数だと面倒な時)
複数の列を同時に「重複調査」したいときにピボットは本当に便利です。
例えば
「名前」「電話番号」「住所」などの3つの列で
すべての列の値が重複するものを取り出したい、
というとき、本当に便利です。
その列が隣接していてもいなくても関係ないし、
この場合も、元の表をまったくいじることなくできますので、
信頼度が大きいです。
「元の表いじった?」と上司に聞かれ、「まったくいじってません」
と答えられれば、もし変な結果が出ても、自分のせいにはされません。
少しでもいじれば、「おまえが触ったからだ」と責任転嫁されることだってあります。
ですので、そういった、防衛的な意味でも、ピボットは良いです。
(06)全部の列を調査対象に何がどう重複しているかを一瞬で調べて不要な列を削除したいとき。
ちょっともとの表の加工が必要ですが、全部の列において、どう値や入力ミスが重複しているかを調べ、
その削除すべき列をも瞬時に教えてくれます。
関数やVBAプログラミングを使うよりは、かなり早いと思います。
ただ、条件付書式を使う方法もあるので、そちらのほうが早い場合は、そちらで!
http://yuwithyou.net/2012/03/excel_double.html
色ですぐにわかるくらい、小さな表なら、こちらのやりかたで。
逆に、表が数万件あったりとか、大きすぎて削除対象の行番号がわかったほうがいい場合はピボットを。
(07)関数をしらない人に重複チェックさせたいとき
これは有効ですね!
「関数なんて勉強したかねーや!」という人にこそ、ピボットでの重複調査は便利すぎます!!
フィルタ機能などでも調べられる場合があります。
(08)沢山の列で重複調査しなければならないとき、チェックなどを繰り返したり、モトのシートも残しておきたい時
例えば、入力ミスの多い表で、「顧客ID」「氏名」「フリガナ」などの複数の列で重複調査をしなければならないとき。
(例えばフリガナに濁点や派列音が入っているとか、音読みキン読み間違いなどために、
違う人物として顧客IDが振られているときなどは、
フリガナでも漢字名でも、住所や電話番号でも調べてみないと、正確なことがわからない。
例えば、田上さん(タノウエさん)が「タガミさん」として入力ミスしてあると、過去情報の検索でヒットしないために、
「新しい顧客情報」として顧客登録してしまうことがある。そのようなデータをさがす場合は、
1つの列だけでは入力ミスを見つけることができない。
それをいちいち関数を使ってやっていると、非常に面倒。また、正しく削除できたかのチェックも遅くなる。
そういう場合にピボットを使うと便利。名前定義をしてチェックすると特に便利。)
(09)誰かに重複削除依頼したデータが、本当に正しく削除されたかをプログラムや関数なしで瞬時にチェックしたい場合。
(10)重複調査する列は「顧客ID」や「住所」などだが、削除する基準の列が「趣味」「訪問日」「重要度区分」など、別の列の場合。
(11)関数がどうにも覚えるのが面倒なとき、ちゃちゃっと済ましちゃいたい時。
(12)一つの列の中に、どんな値が何個あるか、関数無しで瞬時に調べたい時。
そして、その各個数順に並べたい時。
★ 入力ミスチェック
(01)「そもそもどんな入力ミスがあるか?」などを調べるとき。特にそれが「いくつあるか」を知りたいとき。