Spreadsheetデータの選択、挿入、削除、コピー、移動、ソート&ちょっとした高速化のコツExcel VBAプログラマーのためのGoogle Apps Script入門(7)(3/3 ページ)

» 2017年06月12日 05時00分 公開
[薬師寺国安PROJECT KySS]
前のページへ 1|2|3       

データの移動

 続いて、データの移動について見ていこう。

 図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();  
    }
  }
}
リスト7 for文を使ったデータの移動

 リスト6のコードで、値をコピーした後は先述のclearメソッドで、元のデータをクリアしている(10行目)。これで、データの移動の完成だ。

 実行すると図6のように表示される。

図6 データが移動した

データを移動するmoveToメソッド

 GASでは、データの移動にも「moveTo」というメソッドが用意されている。

データを移動するmoveToメソッドの書式

{移動元Rangeオブジェクト}.moveTo({移動先Rangeオブジェクト})


 copyToメソッドとは異なり、オプションはない。

 使い方はリスト7のようになるだろう。4行目でmoveToメソッドを使っている。

function MoveToSample()
{
  var sheet=SpreadsheetApp.getActiveSheet();
  sheet.getRange("A1:D19").moveTo(sheet.getRange("E1:H19"));
}
リスト7 moveToを使ったデータの移動

Excel VBAとの違い

 Excel VBAではCutメソッドを使う。使い方はGASのmoveToメソッドと一緒だが、データも書式も移動できる。GASで書式を移動するには、連載第3回で紹介したようなメソッドで、書式を指定するコードを別途追加する必要があるだろう。

 なおCutメソッドでもCopyメソッド同様、移動先の指定も省略できる。その場合は、クリップボードに保存される。保存されたデータはPasteメソッドで貼り付けることができる。

データをソートするsortメソッド

 最後に、データのソート(並べ替え)を紹介する。

 データのソートには「sort」メソッドを使う。

データをソートする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のようにする。書式はメニューから手動で設定している。

図7 ソートで使用する「個人情報」のデータ

 リスト8のコードを記述してみよう。

function mySortFunction() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var range=sheet.getRange("A3:D13");
  range.sort({column:1,ascending:true});
}
リスト8 「氏名」列を基準に昇順でソートするコード

 getRangeメソッドでソートする範囲を指定する(3行目)。sortメソッドで左から1列目の「氏名」列を基準に昇順でソートする(4行目)。

 実行結果は図8のようになるはずだ。

図8 「氏名」列で昇順ソートされた()

Excel VBAとの違い

 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年に薬師寺聖と結成したコラボレーション・ユニット


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。