続いて、データの移動について見ていこう。
図1のデータを、E1〜H19の範囲に移動してみる。
function myMoveDataFunction() { var sheet=SpreadsheetApp.getActiveSheet(); for(var i=1;i<=19;i++) { for(var j=1;j<=4;j++) { var moveValue=sheet.getRange(i,j).getValue(); sheet.getRange(i,j+4).setValue(moveValue); sheet.getRange(i,j).clear(); } } }
リスト6のコードで、値をコピーした後は先述のclearメソッドで、元のデータをクリアしている(10行目)。これで、データの移動の完成だ。
実行すると図6のように表示される。
GASでは、データの移動にも「moveTo」というメソッドが用意されている。
{移動元Rangeオブジェクト}.moveTo({移動先Rangeオブジェクト})
copyToメソッドとは異なり、オプションはない。
使い方はリスト7のようになるだろう。4行目でmoveToメソッドを使っている。
function MoveToSample() { var sheet=SpreadsheetApp.getActiveSheet(); sheet.getRange("A1:D19").moveTo(sheet.getRange("E1:H19")); }
Excel VBAではCutメソッドを使う。使い方はGASのmoveToメソッドと一緒だが、データも書式も移動できる。GASで書式を移動するには、連載第3回で紹介したようなメソッドで、書式を指定するコードを別途追加する必要があるだろう。
なおCutメソッドでもCopyメソッド同様、移動先の指定も省略できる。その場合は、クリップボードに保存される。保存されたデータはPasteメソッドで貼り付けることができる。
最後に、データのソート(並べ替え)を紹介する。
データのソートには「sort」メソッドを使う。
{Rangeオブジェクト}.sort({ソートする列の指定})
{Rangeオブジェクト}.sort({column:{ソートする列の指定},ascending:true||false})
{Rangeオブジェクト}.sort([{ソートする列の指定1},{ソートする列の指定2}……])
{Rangeオブジェクト}.sort([{column:{ソートする列の指定},ascending:true||false},{column:{ソートする列の指定2},ascending:true||false}……])
{ソートする列の指定}はソートしたい列が左から何番目かの数値を指定する。
「ascending:true」は「昇順」を表す。「ascending:false」だと「降順」となる。「ascending:true」を省略した場合は「昇順」となる。
[〜]内で、「,」で連結することで、{ソートする列の指定}は増やすことができる。
実際に使ってみよう。これまでと異なり、使用するデータは図7のようにする。書式はメニューから手動で設定している。
リスト8のコードを記述してみよう。
function mySortFunction() { var sheet=SpreadsheetApp.getActiveSheet(); var range=sheet.getRange("A3:D13"); range.sort({column:1,ascending:true}); }
getRangeメソッドでソートする範囲を指定する(3行目)。sortメソッドで左から1列目の「氏名」列を基準に昇順でソートする(4行目)。
実行結果は図8のようになるはずだ。
Excel VBAにおいてはSortメソッドを使う。使い方はGASのSortメソッドとほぼ一緒だが、さらに「最初の行が見出しかどうか」「大文字、小文字の区別」「並べ替えの方法」など細かい指定ができる。
今回は、以上で終わりだ。さまざまなメソッドの使い方とともに、ちょっとした高速化のコツを紹介したが、いかがだっただろうか。
メソッドを使う回数は、GASの方で便利なメソッドが用意されてないと、どうしても増えてしまうかもしれない。その場合は、今回紹介したように、for文などの繰り返し処理を使うことになるだろう。それはしょうがないとして、「いかにfor文の中でメソッドを呼び出す回数を減らすか」が高速化のカギだ。配列を使ったり、処理を行う順番を変えたり、if文などの条件分岐を使うなどして工夫してみてほしい。
工夫をしたとしても、大量のデータを使う場合は、GASの実行時間制限6分を超えてしまうかもしれない。そういった場合は、データの持ち方にもよるが、そもそもGASで処理するのではなく、ExcelファイルとしてローカルPCにダウンロードして、VBAで加工した後、アップロードする方が早いだろう。
「GASだけ」「VBAだけ」と固執せず、「GASはデータ共有やちょっとした処理を主目的として使い、大量データ処理はVBAを使う」というふうに柔軟に考えてもいいのではないだろうか。特性や状況に応じて、道具を使い分けることができる基本的なスキルを持っておくことの方が重要だろう。
次回は、データを基にさまざまなグラフを作る方法を解説するので、お楽しみに。
PROJECT KySS 薬師寺 国安(やくしじ くにやす)
1950年生まれ。フリーVBプログラマー。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット
Copyright © ITmedia, Inc. All Rights Reserved.