GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~, VBAやGoogle Apps Scriptのツール開発と研修をセットで依頼される企業が増えている理由. Google Apps Scriptで二次元配列の行と列を入れ替える方法をお伝えしました。 行と列を入れ替えるには、zip.applyメソッドを使いましたが、このメソッドのためだけに、Underscore for GASライブラリを使っても良いくらいの、意義と効果があると思っています。 社内のノンプログラマにGASを教えて、みんなでラクしようぜ!という活動をしています。 業務の中で圧倒的に利用頻度が高いのが「スプレッドシート」。 スプレッドシートのデータを扱うときに こんな感じで、「シートの中身を全部取ってきて、あとは二次元配列 dataで扱う」ことをします。 ノンプログラマにプログラミングを教えるにあたって「ループ」「配列(しかも二次元)」というのはなかなかに難しい内容です。 今回はスプレッドシートを扱う上での二次元配列について、どう教えたらいいか、を書 … 今回は、GAS(Google Apps Script)でスプレッドシートに関するコードを書いたことがあるなら一度は感じるであろう、縦方向(列方向)の操作が上手くできない問題について、私なりの解決策を書きます。, APIの呼び出し回数を少なくするために getValues() を使ったが、取得した二次元配列を縦方向に扱えずに困っている、、、そんな皆さんは読んでみてください。, このシートはSlackにRSSで飛んでくる情報を見て手入力しています。 By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. リンク先も含め直ぐ見て理解出来たとまでは行きませんでしたが これからも当ブログを拝見させていただき徐々に理解を深めて行きたいと思います。 ※その作業を自動化しろっていうツッコミはなしでお願いします。いずれやります。, 純粋に getDataRange().getValues() とすると、以下のような二次元配列が返ってきて、H列に「通期」が含まれているか判定するのが非常にめんどくさいです。, めんどくさい理由は二次元配列だからです。 例えば、下記のような書き方で、「①文字列のみ」、「②数字のみ」、「③文字列と数字を含んだ配列」などがあります。 上記③を変数に 「代入」 する場合は、次のように変数名を 「複数形」 にして記述するのが一般的です。 Copyright © 2015-2020 いつも隣にITのお仕事 All Rights Reserved. シェルスクリプトを書くのが一番好きです。得意ってわけではないですしほとんど書ことはありませんが、効率化してる感を一番得られます。, 街コンポータルサイト「machicon JAPAN」やマッチングサービス「CoupLink」などを開発・運営しています。. どうやら普通はもっと別のやり方をするのですね。, もし差し支えなければval,colが指し示すものが何かご教示いただけませんでしょうか。, valは検索値、colは検索対象とする列番号ですね。 スクリプトを書くのはGASが初めてな初心者ですが、いつも当ブログを拝見させていただいていて大変為になっております。ありがとうございます。 これまで例として使用してきたスプレッドシートはコチラです。 それで、Gmailからメッセージを取得してきたときに、それに含まれる名前、年齢とそのメッセージIDを記録するのですが、同じメッセージを重複してデータ追加しないようにしたいのです。 そのために、既に現在対象としているメッセージIDが、既にスプレッドシートに記載されているかどうかを判定する必要があります。 そしてその判定処理をするために、メッ … getValuesで列の情報を取得してから教えていただいたindexOfを用いて特定の名前があった場合には0、無い場合には-1が出てそれをifで条件分岐をしてどの行に存在したかを判定しております。 photo credit: ElleFlorio A Bag of Colors – Redux via photopin (license), Google Apps Scriptでスプレッドシートのデータを配列に格納して操作するテクニックについてシリーズでお伝えしています。, 配列やオブジェクトなどの便利機能を搭載するライブラリUnderscore for GASの紹介と導入の仕方についてお伝えしました。, さて、なんでわざわざUnderscore for GASを導入したかというと、今回使うzipメソッドが使いたい!というのが最大の理由です。, スプレッドシートのデータは二次元配列として操作することができますが、zip.applyメソッドを使うとその行と列の入れ替えが簡単にできます。, 行列転置?…ややこしそうだな~…なんて思わずに、騙されたと思ってみてみて下さい。それはもう配列操作の世界が劇的に広がります。, ということで、今回はGoogle Apps ScriptでUnderscoreのzip.applyメソッドで二次元配列の行と列を入れ替える方法とその意義についてお伝えします。, GASでスプレッドシートの「VLOOKUP関数的な検索」をしたいことって結構あります。, つまり、指定した列の中から値を検索して、マッチしたレコードの行番号(または別の列の値)を引っ張ってくるという操作です。, Sheetオブジェクト、検索値、検索対象の列番号を渡すと、最初にマッチした行の行番号を返すというものです。, for文の中にスプレッドシートのAPIが含まれてしまっているので、処理速度的に痛々しいですね。, 速度を上げるために、配列でやることもできますね。以下のようなスクリプトになります。, ですが、こんな処理、いっぱい使いますもんね。わざわざ関数を作らずとも、もっと簡潔にやりたいじゃないですか。, indexOfメソッドでは、以下のようにすることで、配列の先頭の要素から値を検索し、見つかったらそのインデックス番号を返します。, つまり、そのままの二次元配列でindexOfメソッドを使った列方向の検索はできない、ということです。, そこで登場するのが行と列を入れ替える、つまり行列転置です。二次元配列arrTransが, となってくれているのであれば、名前がごそっと格納されている配列arrTrans[1]に対してindexOfメソッドを使うことで, と、名前をキーにしてインデックス番号を求めることができます。このインデックス番号は、行番号-1(配列のインデックスは0から始まるのでマイナス1)ですよね。, このように、シートデータを格納した二次元配列は列方向で操作したいときもたくさんあるのです。そして、そんな時に行と列を入れ替えることができるなら、配列操作の幅がグッと広がります。, そこで、いよいよ登場するのがUnderscore for GASのzipメソッドです。, 配列の行列を入れ替えるをするには、zip.applyメソッドを使って以下のように書きます。, 実行すると、ちゃんとLucasの行番号-1、つまり「4」とログ出力されるはずです。, Underscoreのロードや、行列転置などの準備が要りますが、それを含めてもたったの三行。実際に行方向の検索についてはindexOfメソッドによるたった一行で実現できちゃいます。, Google Apps Scriptで二次元配列の行と列を入れ替える方法をお伝えしました。, 行と列を入れ替えるには、zip.applyメソッドを使いましたが、このメソッドのためだけに、Underscore for GASライブラリを使っても良いくらいの、意義と効果があると思っています。, 次回以降、行と列を入れ替えるとUnderscore for GASのいくつかのメソッドが劇的に使えるようになりますので、順次お伝えしていきたいと思います。, ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ。セミナー・もくもく会・Facebookグループのサポートで「自らで学び続ける力をつける」支援、「教え合うことで学びの価値を上げる」場の提供をしています。, 初めまして、あいすと申します。 ビジネスサイドとの親和性でいったらおそらく最強の言語なので、有効に使って仕事を楽にしましょう!, プログラミングは少し好きです。2018年10月より職種がエンジニアではなくなりました。 getValuesで列の情報を取得してから教えていただいたindexOfを用いて特定の名前があった場合には0、無い場合には-1が出てそれをifで条件分岐をしてどの行に存在したかを判定しております。 どうやら普通はもっと別のやり方をするのですね。, むしろそのほうがシンプルに書けるときも多いと思いますので、もちろん、その方法でも良いと思います!, 御早いご返信ありがとう御座います。 GAS歴1週間ほどの水野(キンチキ)です。 今回は、GAS(Google Apps Script)でスプレッドシートに関するコードを書いたことがあるなら一度は感じるであろう、縦方向(列方向)の操作が上手くできない問題について、私なりの解決 … そんな中で以前よりタカハシ様がお書きになったコード内にありますval,colが指し示すものが何かが理解が出来ず、最近の列行に関してもうまく理解が進んでおりませんで もし差し支えなければval,colが指し示すものが何かご教示いただけませんでしょうか。, ちなみになのですが現在自分は列情報からの行の特定についは 1m6WMSOLw4oBnVFLGz252v-Al6K0YAiLruiA3zBskUwU, // const showDataNumber = [1, 2, 3, 4, 5, 6, 7]; 配列をループさせるのもよし, // 本来は1行目(ヘッダー行)を上手いこと処理してループするのがいいと思いますが、手抜きしました, Google Apps Scriptで二次元配列の行と列を入れ替える方法とその革命的な効果, you can read useful information later efficiently. この関数がこのプログラムの肝です。, この関数は、第一引数で渡した二次元配列から、第二引数で渡したインデックスの値を抽出した一次元配列=縦方向(列方向)の一次元配列に変換します。, これを使うことで getValues() で取得した値を縦方向に抽出することができるため、特定の列の値を処理することができます。, getValues() で取得した二次元配列は、一次元配列に変換すると縦方向の扱いを簡単にできるというお話でした。, Underscore for GASなるものがありますが、私は少し試した限り convertTwoDimensionToOneDimension 関数を実装して使った方がよいと感じました。 これは1セルずつ表示するという雑な出力なので、キレイに出力されたい方は showFullYearSettlement をいじってください。, 細かい処理はコメントで書いてあるのでそちらを見ていただくとして、注目していただきたいのは convertTwoDimensionToOneDimension という関数です。 ということで、二次元配列を一次元配列にすればよいです。, 今回必要なのは、H列に「通期」が含まれている行だけです。 Google Apps Scriptで二次元配列の行と列を入れ替える方法とその革命的な効果, GASはスプレッドシートだけでなく、GmailやSlackと合わせて使うことも可能な優れものです。 Google Apps Scriptで配列を使ってスプレッドシートにデータ行を追加する方法, Google Apps Scriptでスプレッドシートにデータ行を挿入する2つの方法, 詳解! 情けない話ですがここまで教えて頂いたにもかかわらず それに、2018年12月20日時点で最終commitは2015年4月14日かつスターが35個しかないライブラリを使うのもどうかと思います。, 使いたい方は以下の記事など参考になさるとよいかと。 Google Apps Script(以下GAS)上で配列、連想配列を扱う際の記述方法について纏めてみます。・・・と言ってもGAS自体がJavaScriptベースなので、「JavaScriptにおける書き方」でも意味は同じだと思い … gasでスプレッドシートを操作する上で二次元配列を理解することはとても重要です。 二次元配列以前にそもそも配列って何?という方もいらっしゃると思います。配列や二次元配列については別記事で詳しく解説しますのでお楽しみに! 【2019/8/30追記】 そもそもなぜ重くなるかというと、APIを呼び出す回数がひとつ大きな問題となります。 スプレッドシートにおいて呼び出されるAPIとはSpreadsheetAppの、 getActiveSpreadsheet getSheetByName getLastRow getRange getValue setValue など、非常によく使われるものが並びます。 スプレッドシート上で大量のデータを処理しようとすると、これらのスクリプトが何度も何度も使用されるため、処理がどんどん重くなっていきます。 そこで、大量のデータをスプレッドシート上で処理するのではなく … 記事内でもリンク貼っていますが、以下記事で詳細お伝えしています。, http://tonari-it.com/gas-spreadsheet-find/, 列情報からの行の特定についは Why not register and get more from Qiita? 回りに教えていただける者が居らず自信が有りませんでしたが少し勇気をいただけました。重ねて御礼申し上げます。, Google Apps Scriptで100以上の便利関数が使える定番ライブラリUnderscore for GAS, Underscore for Google Apps Scriptは100を超える様々な便利関数が多数パッケージ化されている定番ライブラリです。今回はその特徴、導入方法、使い方などをお伝えします。, Google Apps Scriptでスプレッドシート内を検索して行番号を返す関数(高速版), Google Apps Scriptで「スプレッドシート内に特定の値が存在しているかどうかを判定したい、または取り出したい」ということがよくあります。頻度が高いので、汎用的に使える関数を作っていきます。, Google Apps Scriptで配列の検索をするindexOfメソッドとlastIndexOfメソッド, Google Apps Scriptでスプレッドシートのデータを配列に格納して操作をする方法をお伝えしています。今回は配列を検索するindexOfメソッド、lastIndexOfメソッドの使い方です。, 「初心者でもわかるGoogle Apps Scriptのクラス:をテーマにお送りしております。今回は、GASで自作のオブジェクトについてプロパティを追加するメソッドと削除するメソッドの作り方です。, Google Apps Scriptでダイアログを使ったcsvファイルアップローダーを作成する方法をお伝えするシリーズです。今回はGASのダイアログでファイルアップロードが失敗したらアラートを表示する方法です。, Googleスプレッドシートに搭載されたマクロ記録の使い方についてお伝えしています。今回はマクロ記録によって書き出されたスクリプトを編集する方法とともに、書き出されたコードがどのようなものかを見ていきます。, Google Apps Scriptでフォーム送信メールからデータを取得してスプレッドシートにまとめるツールを作成しています。今回はスプレッドシートの列データを配列として取得する方法についてお伝えします。, Google Apps Scriptでダイアログを使ったcsvファイルアップローダーを作成する方法をお伝えするシリーズです。今回は、GASのダイアログのデータをフォーム要素を渡すことでまとめてサーバー側に渡す方法です。, 初心者向けにGASとVue.jsによるWebアプリケーションの作り方についてお伝えしています。今回は、GASにVue.jsを導入する方法とその動作確認、そしてVue.jsの超基本を解説していきます。, Google Apps Scriptを使って80歳までの残り時間をChatworkに日々通知する, 当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。, マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプト, GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法. この記事はLinkbal Advent Calendar 2018の19日目の記事です。. データには間違いがあるかもしれませんのでご了承ください。 この記事はLinkbal Advent Calendar 2018の19日目の記事です。, GAS歴1週間ほどの水野(キンチキ)です。 はじめに. Help us understand the problem. 以前の記事で、Google Apps Scriptにおける配列の重要性についてご紹介しましたが、今回は行と列を格納する事のできる二次元配列についてご紹介します。 ※以前の記事についてはこちらをご … それから自分のやり方でもまあ大丈夫だったのですね。 What is going on with this article? つまり、H列に「通期」が含まれている行番号の一覧さえ取得できればOKですね。, こちらを実行すると、以下のように通期を含む行のデータだけ出力できています。