以下はみやほりんの失敗談についての考察です。
実話です。(笑

たとえば、次のような「売上報告書」なるものを毎日作成、印刷していました。

【表1】
売上報告書                    
日付          2006/1/20          
部門          数量             金額
A             126          1,058,005
B              82            158,744
C             171            668,875
合計          379          1,885,624

翌日も新しいシートを追加して作成し、そのうちブックがシートがいっぱい
になり、月ごとにブックを分けたり、年毎にフォルダを分けたり。
ただ入力し、印刷して紙の書類を持っているだけならこれでもよかったのです。
 
ある日。
上司が突然、「部門ごとの売上の移動平均値グラフを作れ」とか言い出します。

「いつできる」
「2週間ほどあればなんとか・・・」
「コンピュータに入力しているんだからすぐできるだろ!明日までにやれ!!」

そのころはVBAによるマクロはほとんど知りません。
泣く泣く、ほとんど徹夜でファイルを開き、コピー、貼り付け、ファイル閉じる
を繰り返しました。

とほほ。

簡単だと思ったら、同じシートでもよいので365回、コピー、貼り付けを繰り返し
てみてください。

拷問です。
 
これはブックの設計が悪かったのです。
手書きで作成していたころの書類をそのままエクセルに落とし込んだだけなので、
エクセルの機能がまったく使えなかった例です。印刷イメージそのままでエクセ
ルに入力し、保存し、蓄積したために能率が悪くなったのです。データの管理を
電子化して能率が悪くなったのでは、意味がありません。
 
エクセルは任意のレイアウトにデータを入力できる、という点で優れていますが、
同時にそれは落とし穴でもあります。任意のレイアウトで入力し、その状態でデ
ータを増やしていくことはワードでもできます。関数や数式を埋め込むことはで
きますが、その状態では「表引きの上手なワープロ」としか使われていないこと
になります。シート、ブックが量産されている状態ではエクセルの威力は半減以
下です。

コンピュータはどこにデータがあるのかを指示してやれば計算をこなしてくれま
すが、指示をするのはあくまで人間です。データが分散しているとデータの場所
を指示する人間の作業が増えるだけです。指示がない限りエクセルは勝手にデー
タを探してはくれません。
たとえば、シート名やブック名を日付にして管理していても、関数でそれらを日
付と認識させて自動で期間集計をするなどということはほぼ不可能です。

(もちろん、マクロで複数のブックを相手にデータをやっつける機能を作り上げ
れば問題は解決できるのですが、その話題はここでは割愛)

では、どのようなブックの設計がベターであったのか。
データをおいておく場所をなるべく少なくしておけばよいのです。
ここにデータベースという概念が必要になります。
データを次のようなリストで毎日の売り上げを記録したとします。
【表1】と違い、「いつの何部門の売上はどうだった」というデータの羅列です。

【表2-1】
日付            部門        数量             金額
2006/1/20          A         126        1,058,005
2006/1/20          B          82          158,744
2006/1/20          C         171          668,875
2006/1/21          A         192        1,612,195
2006/1/21          B         219          423,960
2006/1/21          C          96          375,505
2006/1/22          A          35          293,885
2006/1/22          B         229          443,315
2006/1/22          C          29          113,430
2006/1/23          A          35          293,885
2006/1/23          B          82          158,740
2006/1/23          C         110          430,250

人間はこのようなデータの羅列は大変読みにくいものです。ですが、コンピュータ
にとって見やすいのはこのようなリストなのです。データ加工の基礎となるこのよ
うなリストを(大変広義なイミでの)データベースと呼びます。
 
このリストから【表1】のような表を作成することは困難ではありません。
(1)【表1】の日付入力欄に「日付」と名前をつける。
(2)【表2-1】へ検索のためのキーとなる列を設ける。【表2-2】
(3)【表2-2】全体を選択して「List」という名前をつける。
(4)KEY列へ次の関数を入力する。
   =COUNTIF($B$2:B2,日付)
(5)【表1】の「部門」「数量」「金額」の各セルへ下記関数を入力する。
   =VLOOKUP(ROW(A1),LIST,COLUMN(C1),FALSE)
   (合計の行にはSUM関数が入力済みとして・・・)

【表1】
売上報告書                    
日付          2006/1/20          
部門          数量             金額
A             126          1,058,005
B              82            158,744
C             171            668,875
合計          379          1,885,624

【表2-2】
KEY             日付       部門         数量          金額
0          2006/1/20          A          126        1,058,005
0          2006/1/20          B           82          158,744
0          2006/1/20          C          171          668,875
1          2006/1/21          A          192        1,612,195
2          2006/1/21          B          219          423,960
3          2006/1/21          C           96          375,505
3          2006/1/22          A           35          293,885
3          2006/1/22          B          229          443,315
3          2006/1/22          C           29          113,430
3          2006/1/23          A           35          293,885
3          2006/1/23          B           82          158,740
3          2006/1/23          C          110          430,250

このように作っておけば・・・

・【表1】のシートだけで【表2-2】のデータをすべて日付ごとに表示できる。

・上記の結果、シート数、ブック数は少なくてすむ。

・ブック数が少ないのでメンテナンスが容易。

・【表2-2】ではエクセルのデータメニューが活用できる。
 (フィルタ、データベースクエリ、ピボットテーブル、集計)

また、【表1】の運用でセル結合などをしていると並べ替えができない、という問
題がよく発生しますが、その場合は【表2-2】側で並べ替えを行えば【表1】は
関数で参照しているだけなのでこの問題もスルーできます。

とくに、[データ(D)]メニューが活用できるのが大変有用です。
必ず、とは言い切れませんが、リスト形式でデータを蓄積していけば、そこから様
々な分析資料を派生して作ることができます。

上記は単純すぎる例かもしれませんが、規模が大きくなってもあとは応用です。
シートの量産はやめましょう。
データベースの感覚と関数スキル、[データ(D)]メニューの活用で能率アップ。
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送