読者です 読者をやめる 読者になる 読者になる

GoogleSpreadsheetのsplit関数にしてやられた

プログラミング GoogleAppScript GoogleSpreadsheet

Excelが好きだ。

どのぐらい好きかといえば、次のような話をもってお話ししたい。

ネット業界というのは、プログラマーが多いとか、新しいもの好きが多いとか、いろいろな要因があいまって、猫も杓子もMac派で、さながら「Macにあらずんば人にあらず」といった業界だ。

そんなネット業界でWindows派を続けているのは、MacExcelではピボットテーブルグラフが使えないというシンプルな理由だ。

そんな僕だが、最近はできるだけGoogleSpreadsheetを使うようにしている。共有しやすいからね。

そういうわけでいつものように、ダウンロードしたどこぞのデータの名前を分解する作業を、GoogleSpreadsheetに場所を変えて始めることにした。

いつもならleft、mid、right、lenとfindをちまちま書くところから始める。こんな風に。

  • 一つ目の要素
    • =left(A2,find("_",A2)-1)
  • 2つ目の要素
    • =mid(A2,LEN(B2)+2,find("_",right(A2,len(A2)-len(B2)-1))-1)
  • 最後の要素
    • =right(A2,len(A2)-len(B2)-len(C2)-2)

でもせっかくなのでGoogleSpreadsheetらしく、Javascriptで独自関数を作ってみることにした。

function seprateunderscore(string, section_num) {
for (var i=1 ; i<=section_num-1 ; i++){
string = string.replace(/.*?_/,'');
}
string = string.replace(/_.*/,'');
return string
}

これで記述自体は随分楽になった。

しかし実際に使ってみると、データ量が多いとエラーが起きるようになった。関数の処理をもっと軽くしないといけないらしい。

そういうわけで、書きなおそうかと思ったのだが、よく考えると気が利くGoogleSpreadsheetのことだから、独自関数なんかつくらなくてもこういう関数要されているんじゃないかと思ったら、split関数があった。

support.google.com

しかし、ドキュメントを読んでみて、意味がわからない。関数の引数が分割対象と区切り文字の2つしかない。いくつめの要素かがないと、値を返せないはずだ。

よくわからないから書いてみた。驚いた、いやビビった。

最初の要素のセルに、関数を書いた瞬間、すべての要素が埋まった。何が起きたのかわからない。関数が書いてあるセル以外に返り値を返せるなんて、理解ができない。

検証してみると、返り値が入る箇所に一箇所でも別の値があると、この関数は上手く動かないらしい。

そういうわけで僕はこれからGoogleSpreadsheet派になろうと思っている。