質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

14101閲覧

GoogleスプレッドシートからGASで文字列を検索する方法を教えてください

SASAKI_APPL

総合スコア100

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/05/09 13:24

Googleフォームの回答のスプレッドシートをGASでメールに送信するものを作っています。

質問
最終行の特定の列の文字列を同じ列から検索して、
条件分岐で、
すでに同じ列から文字列があったらそこの行番号を取得して、
一致しなかった場合は最終行の行版行を取得する方法を教えてください。

GASからスプレッドシートの内容を検索するのに、何を使ったら良いか分からず困っています。

具体的なコードを教えてくださるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

SheetRange に対して文字列検索する API は用意されていなかったと思います。
なので、Range.getValues() でメモリ上に文字列をごそっと持ってきて、あとは JavaScript の標準的な機能を使って検索することになると思います。
たとえば、こんな感じでしょうか(未検証)。

javascript

1var row = (function(records, targetColumnIndex, target, len) { 2 len = records.length; 3 target = records[len - 1][targetColumnIndex]; 4 for (var rowIndex = 0; rowIndex < len; rowIndex++) { 5 if (records[rowIndex][targetColunnIndex] === target) return rowIndex + 1; 6 } 7 return len; 8})(SpreadsheetApp.getActiveSheet().getDataRange().getValues(), 4);

投稿2016/05/09 14:04

unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SASAKI_APPL

2016/05/12 15:21

うまくできませんね... どうしたら良いのでしょうか...
unau

2016/05/13 22:51

ご自身が試されたコード、そしてそれがどのようにうまくいかなかったのか、を質問に追記していただければ、具体的なアドバイスができると思います。
SASAKI_APPL

2016/05/14 09:03

教えていただいたコードを入れ、body+rowでやってみましたが、このコードを入れるとメール自体が送られなくなります。
unau

2016/05/14 13:44

再度コメント致します。ご自身が試されたコードを質問に追記していただきたく存じます。 私の提示したコードはメールに絡む部分はありませんので、それをどのように取り込まれたのかがわからなければ、それがどう影響してメールが送られなくなったのか判断できません。
guest

0

自己解決

自分の知識不足で、二次元配列をあまり理解できなかったので一つ一つ取得したらできました。
回答してくださった方、ありがとうございます。

JavaScript

1var sheet = SpreadsheetApp.getActiveSheet(); 2 var lastRow = sheet.getLastRow(); 3 4 var searchRow = "C"; //検索対象の列 5 var BAR = sheet.getRange( lastRow, 3 ).getValue(); 6 7 var targetString = BAR; 8 9 var value2 = (-1); 10 11 var name = sheet.getRange( lastRow, 2 ).getValue(); 12 13 var range7 = sheet.getRange( lastRow+value2, 4 ).getValue(); 14 var range3 = sheet.getRange( lastRow, 4 ); 15 16 range3.setValue(range7+1); 17 var tt = sheet.getRange( lastRow, 4 ).getValue(); 18 var num_setSel = 1; 19 var BARr = sheet.getRange( lastRow, 3 ); 20 var rgb = BARr.getBackground(); 21 22 23 switch (rgb) { 24 case '#ff0000': 25 26 for ( i = lastRow+value2 ; i > 2 ; i-- ){ //2〜最終行までループ 27 28 var tmp = sheet.getRange(searchRow + i ).getValue(); 29 var ttm = sheet.getRange(searchRow + i );//セルの範囲を取得 30 if( targetString == tmp ){ 31 32 var tt = ttm.offset(0, 1).getValue(); 33 34 35 36 var range2 = sheet.getRange( lastRow, 4 ); 37 38 range2.setValue(range7);// Oh, API... 39 40 } 41 } 42 43 break;}

投稿2016/06/27 12:17

SASAKI_APPL

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問