第56話 データベース関数

「ところでおめえ、D関数は使ってたか?」


 クエスト終わりの詰め所でビールをあおるサイトウに尋ねられた。聞き覚えはあるのだが使ったおぼえはない。


「いえ、ないです。なんでしたっけそれ」


「やっぱりな。Excel職人やってても意外と知らねえもんだ。おめえみたいな広告畑のやつは特にSUMIFSやらの扱いがうめえかわりにD関数は使ったことのねえやつが多いな」


「GoogleSpreadsheetsの独自関数じゃなくて、Excelにもある関数ですか?」


「おう、伝統ある関数よ」


 伝統とは?


「D関数、正確にはデータベース関数だな。DSUM、DAVERAGEなどがある。データベースっても堅苦しくSQLのことを考える必要はねえぞ。書き方の違うSUMIFSやAVERAGEIFSだと思えばいい」


 サイトウは手近なホワイトボードをひっぱってきて説明を書きはじめる。


名前 性別 年齢

---------- --- -----

タカハシ 男 27

サイトウ 男 41

イノウエ 女 29


 前にも見た例だが、サイトウが若くなってイノウエの年齢がリアルなものに変わったようだ。なにが真実なのかはわからないが、気にしても仕方ないだろう。


「このデータがA1:C4セルにあるとする。ここから男の人数をだしたい時、どうする?」


 まあ普通COUNTIFSをつかうだろ。おれはホワイトボードに数式を書く。


=COUNTIFS(B2:B4, "男")


「そう書くよな。D関数だとだいぶ書き方が変わる」


=DCOUNTA(データベース, フィールド, 条件)

=DCOUNTA(A1:C4, A1, E1:G2)


「データベースは集計や条件列を含んだデータ全体だ、一番上の行に必ず見出しも含める必要がある。フィールドは集計対象の見出しセルを書く。そしてもっとも癖があるのが最後の条件だ」


名前(E1) 性別 年齢

---------- --- -----

(空白) 男 (空白)


「E1:G2のように条件になる列と値をどこかに書き、それを参照するのが基本だ」


「なんだか記述が複雑ですね」


「この程度の集計に使うとしたらたしかにそうだな。だが複雑な条件にしても数式そのものがコンパクトにおさまるって利点はある。条件が多いと長くてまともに読めねえようなSUMIFSとかあるだろ」


 身に覚えがある話だ。SUMIFSは条件の数が増えていくと書いている本人にもなにがどうなっているかわからなくなってくる。


=SUMIFS(E:E, B:B, "条件1", C:C, "<=条件2", C:C, ">条件3", D:D, "条件4")


 こういう数式をメンテナンス作っていくのは骨が折れる。条件に関数を含んだりすることもよくあるので、わけがわからなくない。


=SUMIFS(E:E,

B:B, "条件1",

C:C, "<=条件2",

C:C, ">条件3",

D:D, "条件4"

)


 どうにか読みやすくしようとして改行をすることもあるが、数式編集欄を大きく広げなくてはならず、なんだか悔しい。思い返していたところでサイトウが続ける。


「あと重要なのはOR条件の書き方だな。40歳以上男もしくは25歳以上の女の人数を出さないといけないとき、COUNTIFSだとどうする?」


「男女で年齢条件の違う集計なんてすることありますか?」


「あ?婚活パーティの参加資格とかあんだろうが」


「あ、はい。すいません」


 なぜサイトウが婚活パーティについて連想したのかは聞く気になれなかったが、とりあえずおれは数式を書いた。


=COUNTIFS(B2:B4, "男", C2:C4, ">=40")+COUNTIFS(B2:B4, "女", C2:C4, ">=25")


「こうやって2つのCOUNTIFSを足し算しますね。でもそもそもOR条件とあんまり相性良くないですよね」


「そうだな。COUNTならまだいいが、AVERAGEをORで、なんて言われると詰みだな。D関数はその点ORと相性がいい」


名前 性別 年齢

---------- --- -----

(空白) 男 >=40

(空白) 女 >=25


=DCOUNTA(A1:C4, A1, E1:G3)


「条件範囲の行を増やせばそのままORになる。条件が複雑になってもわかりやすいだろ?」


 たしかにそのとおりだった。複雑な条件集計には強そうだ。しかし実用上引っかかる点もある。


「使い方はわかりました。でも実際使う際ってこういう表を作りたかったりするので、いちいち条件をセルの範囲で作るのは使いにくくないですか?」


E F

性別 人数

----- -----

男 =COUNTIFS($B$2:$B$4, E2)

女 =COUNTIFS($B$2:$B$4, E3)


 COUNTIFSやSUMIFSで条件を式内にべた書きすることは少ない、大抵は他のセルに書かれた条件別に集計を行うために使われる。


「そこだよ。そもそも使う発想がちげえんだ」


 サイトウが手元のジョッキを飲み干した。


「広告畑だとExcelを使う基本的な目的は客への報告だろ?そういうときはおめえが書いたみてえに先に集計したい条件の表を作ってからCOUNTIFSやSUMIFSで数値を埋めていくことになる。D関数はそうじゃねえんだ。そもそも集計したい条件が決まっていないところでいろいろ試してえ、そういう自分のための分析をしたいときに使うんだよ。どいつもこいつも客のために関数くんでると思い込まねえこったな」


「はあ…」


「明日のクエストはD関数のあるところをまわしてもらうとするか、構文見直しとけよ。そんじゃあそろそろおれはもう寝るわ。おつかれさん」


 サイトウは自室へ帰っていった。エンジニアのSpreadsheetsを取り扱うようになってからどうにも知らない関数ばかりに出会っている。職種によって使い方が異なるとは思っていたが、出てくる関数までがことごとく異なるのだと痛感させられる。


※今回の関数

DSUM https://support.google.com/docs/answer/3094281

DAVERAGE https://support.google.com/docs/answer/3094144

AVERAGEIFS https://support.google.com/docs/answer/3256534

COUNTIFS https://support.google.com/docs/answer/3256550

DCOUNTA https://support.google.com/docs/answer/3094147

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る