<< タイミング | main | VBAセミナーやります >>
2008.11.11 Tuesday

Google DocsのSpreadsheetがヤバイ件(1)

Google DocsのSpreadsheetがおもしろいです。
あ、「ヤバイ」はほめ言葉としての意味です。

目指す方向性が違いますから、現在のExcelと比較することはあまり意味がありませんが、とりあえず、実装しているワークシート関数を比較してみました。

まず、Excel 2007にはあるけど、Google Spreadsheetにはない関数です。

 AMORDEGRC CUBESETCOUNT GAMMALN NUMBERSTRING
 AMORLINC CUBEVALUE GESTEP ODDFPRICE
 AREAS DATEDIF GETPIVOTDATA ODDFYIELD
 ASC DAVERAGE IMABS ODDLPRICE
 AVERAGEIF DBCS IMAGINARY ODDLYIELD
 AVERAGEIFS DCOUNT IMARGUMENT PHONETIC
 BAHTTEXT DCOUNTA IMCONJUGATE REGISTER.ID
 BESSELI DELTA IMCOS REPLACEB
 BESSELJ DGET IMDIV RIGHTB
 BESSELK DMAX IMEXP ROMAN
 BESSELY DMIN IMLN RTD
 BETADIST DPRODUCT IMLOG10 SEARCHB
 BETAINV DSTDEV IMLOG2 SQL.REQUEST
 CALL DSTDEVP IMPOWER SUBTOTAL
 CELL DSUM IMPRODUCT SUMIFS
 CHIDIST DVAR IMREAL TDIST
 CHIINV DVARP IMSIN TIMEVALUE
 CHITEST ERF IMSQRT TINV
 CLEAN ERFC IMSUB TTEST
 COMPLEX EUROCONVERT IMSUM TYPE
 CONVERT EVALUATE INFO VDB
 COUNTIFS FDIST ISPMT WEEKNUM
 CUBEKPIMEMBER FINDB JIS YEN
 CUBEMEMBER FINV LEFTB YIELDMAT
 CUBEMEMBERPROPERTY FTEST LENB 
 CUBERANKEDMEMBER GAMMADIST LOOKUP 
 CUBESET GAMMAINV MIDB 


誰も使わないような関数はともかく、よく使う関数では

・全角の文字列を半角にするASC関数や、半角→全角にするJIS関数はない
・Excel 2007で追加された次の関数はない
  AVERAGEIF
  AVERAGEIFS
  COUNTIFS
  SUMIFS
  ただし、IFERROR関数はある
・ちょっと特殊なCELL関数、EVALUATE関数、INFO関数、TYPE関数はない
・Excelの隠し関数
  DATEDIF
  NUMBERSTRING
  はない
・DSUM関数やDAVERAGE関数など、いわゆるD関数(データベース関数)はない
・FINDB関数など、バイナリを扱う「〜B関数」はない
・ピボットテーブルがないのだから、当然GETPIVOTDATA関数もない
・ふりがな機能がないのだから、当然PHONETIC関数もない
・LOOKUP関数がないのは、ちょっと悲しい
・SUBTOTAL関数もないのか
・DATEVALUE関数はあるけど、TIMEVALUE関数はない
・WEEKNUM関数はない
・YEN関数もない。なくていいけど

実害はありませんね。普通に使う分には「関数がなくて困る」ということはないでしょう。できれば、LOOKUP関数は欲しかったけど。

逆に、Google Spreadsheetにはあるけど、Excelにはない関数は次の通り。

 ADD FILTER
 CONCAT SORT
 DIVIDE SPLIT
 EQ UNIQUE
 GT GoogleFinance
 GTE GoogleLookup
 LT ImportData
 LTE ImportFeed
 MINUS ImportHtml
 MULTIPLY ImportRange
 NE ImportXML
 POW 


表の左列にあるのは、+や/などの演算子と同じ働きをする関数です。
演算子があるから、普通は使わないでしょう。

右列にある関数に注目したいですね。
「Google〜」や「Import〜」は、インターネットならではの特殊な関数です。
これについては、あらためてじっくり紹介しますが、まずは

FILTER関数
SORT関数
SPLIT関数
UNIQUE関数

です。こいつらが、実におもしろいです。正直、次のExcelにも実装して欲しいですね。
まず、FILTER関数から。
こいつは、リストを条件で絞り込んだ結果を返す関数です。絞り込んだ件数じゃありません。絞り込んだ結果のリストを返します。
たとえば、下図のようなリストがあったとします。



このリストを「数値が10より大きい」という条件で絞り込んでみます。セルD3に「=FILTER(A2:A13,B2:B13>19)」という式を入力します。



Enterキーを押して確定すると



と、なります。なんと、式を入れなかったセル範囲D3:D7にもデータが表示されます。Excelでも配列を返す関数などを使ったとき似たような結果を得ることができますが、それにしても入力時にはあらかじめセル範囲を選択しておかなければなりません。でも、FILTER関数は結果が何件になるか入れてみなければわかりませんので、それは無理ですね。

で、おもしろいのが、勝手にデータが表示されたセル範囲D3:D7です。実は、これらのセルには自動的に別の関数が入力されています。



「CONTINUE(D2,6,1)」というような関数です。Spreadsheetの関数一覧には記載されていない関数ですから、おそらくSpreadsheetが勝手に入れてくれる関数でしょう。もちろん、ユーザーが手入力して使うことも可能です。ExcelでいうとSUBTOTAL関数みたいなものかな。

CONTINUEという名前と引数から想像すると「セルD2に入力した数式の結果を6行×1列に拡張して表示せよ」的な関数なんでしょうね。この状態で、たとえば、B列のデータを編集したとします。セルB3を削除すると、



このように、ちゃんと反映されます。もっともCONTINUE関数が「CONTINUE(D2,6,1)」と、結果を返すセル数を固定していますので、最後の「該当なし」のセルは「--」となります。では、FILTER関数の条件に設定した「B2:B13>19」に一致するデータが増えた場合はどうでしょう。


  ↓


と、今度はちゃんとCONTINUE関数が拡張されます。う〜ん、Excelでは経験したことのない結果なので少し違和感もありますが、なかなか賢いです。
もちろん、複数の条件を指定することもできます。



今度は「数値(B列)が10より大きい」かつ「フラグ(C列)が"OK"」という条件です。すると、



ちゃんと絞り込んでくれます。ヘルプによると条件は30個まで指定できるようですね。数的には問題ないでしょう。

>If there are multiple conditions, then all must be true for the corresponding values in the source array to be returned.

ということですから、指定した複数の条件はAND(かつ)で判定されるようです。なお、第1引数に複数列を指定すれば複数列を返してくれます。

Excelでも工夫すれば同じことを実現できますが、それにしてもあらかじめ結果が表示されるであろうセルに数式を入れておかなければなりません。

他にもかなり便利な関数が実装されていますが、長くなったので今回はここまで。次回に続きます・・・
コメント
コメントする








 
この記事のトラックバックURL
トラックバック
Calendar
1234567
891011121314
15161718192021
22232425262728
293031    
<< January 2017 >>
Selected Entries
Categories
Archives
Recent Comment
Recent Trackback
Recommend
Recommend
Recommend
Recommend
Recommend
Links
Profile
Search this site.
Others
Mobile
qrcode
Powered by
30days Album
無料ブログ作成サービス JUGEM