「社内でちょっとGASが触れる便利な人」として、ひたすらスプレッドシートを転記する仕組みを作っています。しんどいね。
この記事ではタイトル通り、GASでスプレッドシートAからBに文字を転記するテクニックを紹介します。
以下のように、3回に分けて記事を書くつもりです。
【はじめに】GAS(Google Apps Script)でスプレッドシートAからBに文字を転記できるようになるまで
【基礎編】GAS(Google Apps Script)でスプレッドシートAからBに文字を転記できるようになるまで
【応用編】GAS(Google Apps Script)でスプレッドシートAからBに文字を転記できるようになるまで
今回【はじめに】は、全体のあらまし説明です。
GASでスプレッドシート転記する方法は、大きく分けて2通りありまして。それぞれを【基礎編】と【応用編】で説明します。
【基礎編】では、シートAのセルをひとつずつgetRange().getValue()して、別のシートにsetValue()していく方法。
【応用編】では、シートAをgetDataRange().getValues()でまるごと2次元配列として取得して、setValues()する方法。
「何言ってるのかわかんない」という人、大丈夫です。それぞれの記事中で説明します。
もうこの時点で「あ、無理だわ」と思った人も大丈夫。ココナラで発注しましょう。平均予算3,000円〜5,000円くらいで転記のしくみを作ってくださるGASエンジニアの方々がいます。
なぜ、2通りの方法を紹介するのか
問題は、同じ目的なのに、なぜ【基礎編】と【応用編】で別々のやり方、別々のコードを紹介するのか、ということです。
どっちか片方だけ、便利な方だけ載せたらいいのではないか。
そう思うのも、もっともだと思います。
わざわざ、2通りの方法を紹介する理由。
それはそれぞれ、以下のような特徴があるからです。
【基礎編】比較的かんたん。だけど大量のデータを処理できない。
【応用編】配列がちょっとややこしい。だけど大量のデータを処理できる。
「大量のデータ」というのは、もっと具体的にいうとGASの最大実行時間6分を超える量のデータです。
以前、私が試してみたところでは、【基礎編】のやりかたで処理しようとすると、だいたい400行前後で6分を超えてエラーになります。
「そんな大量のデータを処理するつもりはない」という人も、念のため【応用編】まで読み進めることをおすすめします。そのうち大量のデータを処理する、あるいは、処理させられるはめになるので。
おそらくあなた自身も、【基礎編】の内容で満足すると、もっと大量のデータにも挑戦してみたくなるでしょう。あなたの周囲も「今度はあれ作って、これ作って」依頼してきます。遅かれ早かれそうなる運命です。
そこで2通り、というか、2段階の方法をご紹介するわけです。
まずはスプレッドシートでGASを使ってみよう!
Googleアカウントはお持ちですか? まだでしたら取得してください。
そして試しに、新しいスプレッドシートを作ってみましょう。
作成できたら、ファイルを開いて「拡張機能」>「Apps Script」へ進みましょう。
以下のような画面が出てきたら、試しにコードを入力してみましょう。
function myFunction() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('シート1');
sheet.getRange(1,1).setValue("Hello World");
}
コードを入力したら、「保存」して「実行」ボタンを押してみてください。
ここでいきなり画面が暗くなって、承認画面に移るはずです。「権限を確認」を押してください。ここからの選択画面が、初めての方には少しわかりづらいと思います。
アカウントの選択画面に移ります。あなた自身のGoogleアカウントであることを確認して、選択しましょう。
この次から少しわかりづらいです。何だか非難されているような画面ですが、たじろがずに小さな「詳細」を押しましょう。
さらに確認してきますが、ここでひるんではいけません。「無題のプロジェクト(安全ではないページ)に移動」を選択。
またまたしつこく尋ねてきます。しかしもうあとひと息。「許可」を選択。
すると、ようやくコードが動き出しました。スプレッドシートに戻ってみてください。いちばん左上のマス(A1)に「Hellow World」という文字が入っていたら、実験成功です。
一度この面倒な手続きを済ませたら、次回以降は「実行」ボタンを押すだけでコードを実行できるようになります。
GASコードの簡単な解説
function myFunction() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('シート1');
sheet.getRange(1,1).setValue("Hello World");
}
コードについても簡単に説明しときます。
まず、以下の2行で、このスプレッドシートの「シート1」を、シートの名前で取得しています。
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('シート1');
要するに「これから編集するシートはこれですよ」という指定をしているわけです。
そして次の1行で、「シート1」のセルに”Hello World”という文字を入れています。
sheet.getRange(1,1).setValue("Hello World");
getRange(1,1)というのが「1行目の1列目に」、setValue(“Hello World”)というのが「”Hello World”と書き込む」。つまり「1行目の1列目に”Hello World”と書き込む」という命令をしています。
コメント