 |
 |
■■■
■■
■ ありがとう SUMPRODUCT!
Excel関数があまり得意でないので、 きっとExcel関数で簡単にできるようなものでも ExcelVBAでフォローしてしまって 汎用性に乏しいデータベースを作ってしまう私。
なぜExcelVBAを組めるようになったかと言えば、 Win95時代(ようやく会社は『95』を今年の4月に卒業!) Accessの重さと応用力の無さに困り、 それより軽くて優れているExcelで データベースをなんとか管理できないか と思っていたところ、 隣の席にいたSEあがりの課長が 「これ、私が過去作ったプログラムなんだ。 これを参考に作りたいもの作ってみたら?」 と軽く1000枚はあるだろうModuleのコピーをくれた ことから始まっている。
もともと英語も数学も大の苦手。 "変数"って何よ? そんな全くのド素人がプログラムに対して何1つの知識もなく 嫌いな英語と数学と戦って 人様のプログラムを参考に作り上げていく苦難。 周囲には助けてくれる人は誰もいない。 しかし、 延々と続く単純な入力作業や計算から解放されたい! という思いのほうが強かった。 今思えば、日本食の職人さんの 「技は教えてもらうもんじゃない、見て盗め」 という世界と全く一緒だったわけだが、 うちの師匠(課長)も厳しかったゾ〜 「うーん 随分普通と違った表記の仕方だね。 プログラム書く人はこうは書かない」 知るかーーー! 「普通は、移動系はまとめて別に」 出来上がってから言うなーーー! 「1つにいろんな指示入れるのは普通じゃない。 あと引数に漢字は使わない」 もっと簡易で、日本語だけで組めるのください。
とまぁ、こんな風に馴染んでいったわけだが、 PC使用がデフォな時代の新人でも扱える子は現れず、 間違った世界に足を踏み入れてしまったことに気づいた。
ExcelVBAごときで何を!と笑うなかれ。 IT関連ではないうちの会社の場合、 旧人(笑)はともかく新人ですらExcelVBAを組める人は皆無だ。 勿論、 こういうものを盗んで覚えろ と言っても、今時誰もついてきてくれない。 たまに向上心のある人が入社してくると 「ここを変えてね」とプログラム上に表記 弄る必要のある変数などはまとめて1箇所に配置 引数はシートで外出し ぐらいすると触れるようになるが、 そもそも向上心のある人がうちの会社にいること自体異常で だいたい覚えたあたりで転職してしまう。 システム部に作成を依頼すると年単位で対応してもらえない 程度の会社なので、どうしても当座凌ぎの存在は欠かせない。 しかし、当座凌ぎを作った個人がずっと抱え込むような態勢では 意味が無い。
なら、どうするか? 最近は すぐ転職する新人の女の子 どころか リストラ代わりに事務部門へ仕事できないオッサンたち を配置することもあるし 30代以下の男性なら大抵、Excel関数 なら得意 ということも経験で知ったので なるべく教えずに済む(もしくは他に先生がいる) Excel関数に何でも頼りたい! と思うようになった。
そして、はたと困ったのが、次のようなケース。
複数の条件下に合致する個数を数える
という計算方法についてだ。 COUNTIF では、複数の条件指定ができない。 勿論、上記の内容をExcelVBAで作れば簡単だ。 汎用性を持たせて、アドインツールにしてしまってもいい。 でも…アドインを理解させるのが一苦労という現実が… ということで却下。
上記が可能な関数を周囲に聞いても答えが出なかったので カニの持っている参考書やネットで調べて出てきたのが D関数 であった。 DCOUNT は、確かに複数条件下の個数を数えてくれる。 しかし、検索値ごとに行名を指定してやらねばならず、 検索値が表形式になっている場合は、 一列に並んだ検索値の1行ごとに行名入りのセルを挿入する という必ず元データより検索値の列の方が倍長くなる バカバカしい作業が発生してしまう。 DCOUNTIF ってないの?! と思っていたら、
SUMPRODUCT
という関数を発見した。 しかし、私の欲しいものは SUM ではなく COUNT だ。 とりあえず、新規の列に「1」をずらっと並べて これで、数値の合算=個数のカウントとした。 今までの1行ごとに行名入りのセルを挿入する方法より 余程手間がかからない。 が、やはり今度は COUNTPRODUCT ってないの?! と思ってしまう。 ダメ元でその造語で検索したら、同じことを考えた人がいてくれた。 そして、そこに最終の答えがあった。
=SUMPRODUCT(($G$3:$G$284=R11)*($I$3:$I$284=Q11))
なんとSUMPRODUCTを使って、 条件1の中に掛け算を入れて条件を複数化する という方法で解決できたのだ! 「1つの条件の中に複数条件」という部分か凄い。 SUMIFとCOUNTIFのように同じことをするのに夫々関数がある という状況に慣れてしまって、 これだけSUMもCOUNTも同じ関数を使うとは思わなかった。
この関数のこの利用法を発見できて、とても嬉しい。
FSAが来る前に早くキレイにしちゃお(゚ー゚*) そして引き継いじゃお♪ 珍しく、ちょっと月曜日が楽しみな私である。
2006年09月01日(金)
|
|
 |