[GAS]スプレッドシートのデータコピー2

ビジネススキル

  • 公開日
  • 最終更新日

エンプロススタッフ

今年のは体重を減らさないことが目標の小林です。夏バテしない強い子になりたいです。

前回、スプレッドシートのデータのコピーについて書きましたが、今回は別バージョンです。

スプレッドシートのデータのコピー

 

今回は、前回と同じ例を使って説明していきます。・・・使いまわし?いやいや違いますよ!!

ファイルBのセル[B5]と[C5]にそれぞれファイルAのセル[A2]と[B2]の値をコピーしたい。

シートA画像

ファイルA

シートB画像

ファイルB

 

 

 

 

 

そしてスクリプトエディタを使い、コードを入力していきます。

このコードは、ファイルBへ入力していきます。入力内容はこちら、

[code language="js" title="データコピーのコード"]
function getSheetA2(){
  var file = DriveApp.getFilesByName("シートA");
  var sheetA = SpreadsheetApp.open(file.next());
  var sheetData = sheetA.getSheets();

  SpreadsheetApp.getActiveSheet().getRange("B5").setValue(sheetData[0].getRange("A2").getValue());
  SpreadsheetApp.getActiveSheet().getRange("C5").setValue(sheetData[0].getRange("B2").getValue());
}
[/code]

それでは解説していきましょう。

前回のコードに追加が行われた感じですね。重複する部分はさらっと流しますのでさらっと部分は前回分を読んでみて下さい。

2-3行目・・・ファイルAを開いてデータが読み込めるようにします。

4行目・・・実際にデータを読み込みます。getSheets()を使うとファイルのデータをシート毎に読み込む事が出来ます。

そうして読み込んだデータを変数sheetDataへ取り込んでいます。

6-7行目・・・取り込んだデータをファイルBの所定の場所へ書き出しています。

 

今回のポイントは前回sheetA.getRange~の様に、sheetAと書いていた部分がsheetData[0]という書き方に変わっています。

先程4行目部分でデータを取り込んだ時に、1つ目のシートはsheetData[0],2つ目のシートはsheetData[1]という風に変数sheetDataいくつかの部屋に分け、1部屋に1シートずつデータを入れています。

この部屋分けをする考え方は、「配列」という考え方で出来ています。今はそういうのがあると思っておいて下さい(要望があればも少し詳しく説明します。)

今回の場合はファイルAの中にシートは1つしかありませんので、sheetDataでは1つ目のシートを表すsheetData[0]を使ってデータを取り出しています。

ではなぜ、わざわざこんな方法をつかうのでしょう。前回の書き方でもいいのでは・・・。と思われる方もいるはず。

 

実は、このひと手間で処理が早く終わる様になるんです!!

前回と今回の違いをざっくり説明していきます。

前回の方法では、ファイルAを開いてデータをコピー、ファイルBを開いてデータを貼り付け。この作業を毎回行います。
通常この作業自体はそんなに時間がかからないのですが、スプレッドシートの場合は、ファイルAとファイルBを切り替える度にインターネットでgoogleにアクセスする分、時間がかかってしまいます。

それが今回の方法では、一旦ファイルAのデータを一旦手元にコピーし、そこからファイルBに貼り付けを行います。つまりgoogleにアクセスする回数が減る分早く処理が終わるのです。

実は今回の例ではほとんど違いは分かりませんが、処理を早くするという考え方は大事になりますので
コードを書く場合に意識をしてみてはいかがでしょう。

LINEをつかって友達や家族にこの記事を教える

シェアボタン

お問い合わせ

エンプロスの職業訓練についてご不明な方は、まずは学科・コース入校から就職までよくある質問をご覧ください。

  • 職業訓練のエンプロスについて、ご質問ご不明点などございましたら、下記のお問い合わせフォームからお問い合わせください。お問い合わせについては、2営業日以内にご返答いたします。

    お問い合わせフォーム
  • 営業時間
    8:50〜18:00
    定休日
    土日祝
    TEL
    079-287-1000