Googleスプレッドシートを使っていると、データを転記したいときがあります。
たとえば、商品名ごとに新しくシートを分けてデータをコピペしていく場合です。
しかし、この作業を一つずつ手作業でコピペするのはメンドウです。
そこで、転記作業をGASで一発で行う方法を紹介していきます。
・定期的な転記作業を自動処理
・手作業によるコピペミスがない
・担当が変わっても引継ぎがカンタン
今回は、ご自身の扱うデータによってGASプログラムを修正する必要があります。
画像や動画を使いながら解説していますので、ご自身のPCで試しながらご覧ください。
目次
Googleスプレッドシートの転記作業を自動化の事例を解説
使用手順2|GASプログラムを実行
使用手順3|商品名ごとに新しいシート作成されて、データ転記
以下で詳しく説明していきます。
使用手順1|スプレッドシートのデータ確認
今回扱う事例は以下です。
A列からG列まで以下のようなデータが入っています。
B列|ユーザーID
C列|名前
D列|メールアドレス
E列|商品名
F列|価格
G列|販売日
このデータの中でE列の商品名ごとにシートを分けて転記したい
使用手順2|GASプログラムを実行
以下の手順でプログラムを実行していきます。
2. 「スクリプトエディタ」をクリック
3. GASプログラムをデフォルトの記載を削除
4. この記事で紹介しているGASプログラムをコピペ
5. ファイルをクリック
6. 保存をクリック
7. プログラムを実行
以下で一つずつ解説していきます。
以下の画像は、別の記事を転用しているものがあります。
操作の内容に違いがないため、画像を修正せずにそのまま使用しています。
ご了承ください。
そうすると、以下のスクリプトエディタを出現します。
ちなみに1と2の作業は以下のショートカットキーでも開くことが可能です。
1. ツールをクリックする|[Alt] + [T]
2. スクリプトエディタをクリックする|[E]
以下のリンク先のGASプログラムをコピーします。(リンク先は同じページ下部です)
まず、以下のスクリプトエディタを選択して、もともと記載されているプログラムを削除します。
そして、コピーしたGASプログラムソースを貼り付けます。
ここまで作業が進むと以下のようになっているはずです。
ここまで出来たら、以下のとおりファイルを保存します。
5と6の作業は、[Ctrl] + [S]のショートカットキーを使うことをオススメ
プログラミングだけでなく、パソコン仕事においてはショートカットキーを使う方が早いです。
ぜひショートカットキーでの作業をオススメします。
7の作業は、[Ctrl] + [R]のショートカットキーを使うことをオススメ
ちなみにプログラムエディタの背景色が黒にする方法や、正確な操作を知りたい人がいるかもしれません。
その場合は、以下の動画をご覧いただくことをオススメします。
上記の動画では、GASを使い始めるまでの操作手順を動画で解説しています。
もし動画よりテキストのほうが得意な人は、以下の記事を参考にしていただくと良いです。
使用手順3|確認作業(商品名ごとに新しいシートにデータ転記)
プログラムを実行すると、以下のようになります。
・新しいシートに商品ごとのデータが転記
このように転記作業をプログラムで自動化することができます。
プログラムの詳細解説は記事後半で行っています。
手元の作業が早くすることが第一歩
このサイトでは、パソコンで仕事の仕組み化することの大切や実損方法を紹介しています。
しかし、パソコンスキルが低いうちは、仕組み化より手元のパソコンスキルを早くすることを目指すほうが大切です。
手元のパソコンスキルとは、タイピングやショートカットキーです。
理由は、手元のパソコンスキルを早くする方が、カンタンだからです。
実は、仕組み化はカンタンそうに見えますが、そうでもありません。
というのも仕組み化をするためには「作業の最適化(作業のムダを省く)」と「作業の平準化(人に仕事を渡すため)」を行う必要があります。
場合によっては、チームメンバーや上司への説明も必要になってきます。
そのため、手元のスキルを高めて自分の仕事を早くするほうがカンタンです。
それから「チームの仕事を仕組み化する」
上記の順番でレベルアップしていくことをオススメします。
「Googleスプレッドシートのデータを新しいシートに転記する」プログラムを解説
GASプログラムの全体を以下に記載しますので、コピペしてご利用ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// プログラム0|スプレッドシート名の設定 function DivideData() { // プログラム1|スプレッドシートの情報を取得 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('シート1'); // プログラム2|スプレッドシートのデータを二次元配列として取得 var myRange = sheet.getDataRange().getValues(); // プログラム3|空の配列を設定 var products = []; // プログラム4|プログラム2の商品列(E列)をプログラム3の空配列に取得 for (var i=1; i<myRange.length; i++){ products.push(myRange[i][4]); } // プログラム5|プログラム4の商品名の重複を削除 var product_list = products.filter(function(value, i, self){ return self.indexOf(value) === i; }); // プログラム6|商品名ごとに繰り返す for (var i=0; i<product_list.length; i++){ // プログラム7|空の配列を設定 var myproducts = []; // プログラム8|ヘッダー情報を取得 myproducts.push(myRange[0]); // プログラム9|商品名が一致すれば、その情報を配列に格納 for (var k=0; k<myRange.length; k++){ if (myRange[k][4] == product_list[i]){ myproducts.push(myRange[k]); } } // プログラム10|シートを追加 var sheetsnum = spreadsheet.getNumSheets(); var newsheet = spreadsheet.insertSheet(product_list[i], sheetsnum); // プログラム11|新規追加したシートに情報を貼り付け newsheet.getRange(1,1,myproducts.length,myproducts[0].length).setValues(myproducts); } } |
以下でプログラムを解説していきます。
プログラム0|スプレッドシート名の設定
1 2 |
function DivideData() { } |
– プログラム名は「DivideData()」
– 「()」に記載がないため引数はなし
プログラム1|スプレッドシートの情報を取得
1 2 |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('シート1'); |
– spreadsheetという変数に、アクティブな(選択中の)スプレッドシートを設定
– sheetという変数に、spreadsheetの「シート1」を設定
プログラム2|メッセージ情報を取得
1 |
var myRange = sheet.getDataRange().getValues(); |
– プログラム1で設定したsheet(「シート1」)のデータを配列として取得
– 注意:「二次元」配列としてデータ取得するため、プログラム4の処理で工夫が必要
myRange[0]:スプレッドシートの1行目のデータ
myRange[1]:スプレッドシートの2行目のデータ
myRange[2]:スプレッドシートの3行目のデータ
・
・
・
myRange[i]:スプレッドシートの(i+1)行目のデータ
・
・
・
myRange[289]:スプレッドシートの290行目のデータ
(画像では見えていませんが、スプレッドシートの行数は290行目まであるため、myRange[289]までデータが格納)
i番目のデータの場合
myRange[i][0]:スプレッドシートの(i+1)行目のA列のデータ(オーダーID)
myRange[i][1]:スプレッドシートの(i+1)行目のB列のデータ(ユーザーID)
myRange[i][2]:スプレッドシートの(i+1)行目のC列のデータ(名前)
myRange[i][3]:スプレッドシートの(i+1)行目のD列のデータ(メールアドレス)
myRange[i][4]:スプレッドシートの(i+1)行目のE列のデータ(商品名)
myRange[i][5]:スプレッドシートの(i+1)行目のF列のデータ(価格)
myRange[i][6]:スプレッドシートの(i+1)行目のG列のデータ(販売日)
プログラム3|空の配列を設定
1 |
var products = []; |
– productsという変数を配列として設定
– 右辺を「[]」とすることで、空の配列を設定可能
プログラム4|プログラム2の商品列(E列)をプログラム3の空配列に取得
1 2 3 |
for (var i=1; i<myRange.length; i++){ products.push(myRange[i][4]); } |
– プログラム2の商品列(E列)のデータをproducts(プログラム3で設定)という変数に取得配列として設定
– i=1にすることで、シート1の1行目(ヘッダー情報)を除外
– 「products.push(myRange[i][4]);」は(i+1)行目の5列目のデータを取得(以下の図のとおり)
– このデータを使って、プログラム5で重複を削除した商品リストを作成
プログラム5|プログラム4の商品名の重複を削除
1 2 3 |
var product_list = products.filter(function(value, i, self){ return self.indexOf(value) === i; }); |
– products_listという変数に、プログラム4の商品リストから重複削除したものを格納
– 今回のデータは、「商品A, 商品B, 商品C, 商品D, 商品E, 商品F」の6種類ある
– products_list = [商品A, 商品B, 商品C, 商品D, 商品E, 商品F]となる
プログラム6|商品名ごとに繰り返し処理を実行
1 2 |
for (var i=0; i<product_list.length; i++){ } |
– プログラム5で設定したproducts_listの要素数だけ処理を実行
– たとえば、products_list=[商品A, 商品B, 商品C, 商品D]だったら、要素数4となり、「i = 0,1,2,3」で処理を繰り返す
プログラム7|空の配列を設定
1 |
var myproducts = []; |
– myproductsという変数を配列として設定
– 右辺を「[]」とすることで、空の配列を設定可能
– この配列に商品ごとのデータを格納
プログラム8|ヘッダー情報を取得
1 |
myproducts.push(myRange[0]); |
– myproductsの1行目にヘッダー情報を格納
– myRange[0]はヘッダー情報なので、それをmyproductsの配列に格納できる
プログラム9|商品名が一致すれば、その情報を配列に格納
1 2 3 4 5 |
for (var k=0; k<myRange.length; k++){ if (myRange[k][4] == product_list[i]){ myproducts.push(myRange[k]); } } |
for (var k=0; k < myRange.length; k++){
}
– myRange(プログラム2で設定したシート1のデータ)の要素数だけ繰り返し実行
if (myRange[k][4] == product_list[i]){
}
– myRange[k][4](シート1のE列:商品名)とプログラム5で設定した商品名のリスト(重複を削除した配列)とif文で比較する
– 一致していれば、次のプログラムを実行
myproducts.push(myRange[k]);
– myproducts(プログラム7で設定)にmyRange[k]を格納
– 商品名が一致した行をmyproductsに格納
プログラム10|シートを追加
1 2 |
var sheetsnum = spreadsheet.getNumSheets(); var newsheet = spreadsheet.insertSheet(product_list[i], sheetsnum); |
var sheetsnum = spreadsheet.getNumSheets();
– sheetsnumという変数に、スプレッドシートのシート数を取得
var newsheet = spreadsheet.insertSheet(product_list[i], sheetsnum);
– 新しいシートを挿入
– products_list[i]という名前(プログラム5で設定した商品名)をシート名とする
– 「sheetsnum」番目にシートを挿入(sheetsnumは一つ上のプログラムで取得)
プログラム11|新規追加したシートに情報を貼り付け
1 |
newsheet.getRange(1,1,myproducts.length,myproducts[0].length).setValues(myproducts); |
– プログラム10で挿入した新しいシートに情報に貼り付け
– 貼り付ける情報はmyproducts(プログラム9で取得)
– 貼り付ける領域は(1,1,myproducts.length,myproducts[0].length)で、セルA1を起点にしてmyproducts.length行、myproducts.length[0]列移動させた範囲(以下の画像)
以下の画像のように、各商品別に情報を貼り付ける。
この貼り付けは商品ごとに繰り返し実行されるため、最終的に以下のようにシートごとに情報が出力される。
プログラムの説明は以上です。
Google Apps Script(GAS)について詳しく理解したいなら
Google Apps Script(GAS)を活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にGASを活用して効率化してきた作業は以下の動画で解説しています。
動画を見てみると、あなたの仕事にどのようにGASを応用すればいいのかイメージが浮かぶこともあると思います。
ぜひご覧ください。
GASの使い方・始め方を知らない人にはこちらの記事・動画がオススメ
この機会に、「GASを使い方を知りたい」と思った人もいるかもしれません。
そのように感じている人は、ぜひ以下の記事をご覧ください。
10分程度でGoogle Apps Scriptを使うためのスタート地点に立てるように解説をしています。
GASで出来ることを知らない人はこちらの記事・動画がオススメ
GASの始め方を理解する前に、やっておくことがあります。
それは、GASを使って何ができるのかを理解しておくことです。
なぜならGASの使い所を知らないと、仕事で使えないからです。
仕事でどう活用するかをイメージしないまま学んでも、効果的な学習ができません。
そこで、このサイトでもいくつか事例を使って、GASの実践方法を紹介しています。
興味がある人は以下の記事もご覧ください。
オススメの書籍を紹介
書籍に関しては、以下を読んで購入しました。
GASの全体感をつかむには良いと思います。
ただし、実際の勉強は書籍よりもウェブサイトを活用してきました。
はっきり言って、ウェブサイトだけでも十分に勉強できるほど数多くの情報がアップされています。
書籍で全体感をつかんだら、ウェブサイトでの学習に切り替えたほうが良いのが私の考えです。
Googleスプレッドシートを効率的に操作したいなら
この記事ではGASを活用した仕事の効率化の事例を紹介してきました。
しかしGoogleスプレッドシートの仕事を早くすることを目指すなら、GAS以外の方法もあります。
たとえば、以下の方法です。
上記の内容については、以下の動画で紹介しています。
ぜひGoogleスプレッドシートを上手に扱えるようになりたい人はご覧いただきたいです。