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

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

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

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

Q&A

解決済

1回答

677閲覧

複数の検索条件に応じて一致した文章を抽出する検索シートを作りたいです

koroaisu

総合スコア8

Google Apps Script

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

0グッド

0クリップ

投稿2019/08/13 10:58

前提・実現したいこと

GASを使って、テンプレ文章の検索シートを作りたいです。
まずスプレッドシートには2ページがあって、一つは「テンプレート検索用_new」(テンプレを検索するためのシート)もう一つは「テンプレ庫」(テンプレを格納しているシート)となります。
「テンプレ庫」では、A列に大分類、B列に中分類、C列に小分類を記入しており、それを使って検索をかける仕組みにしたいです。
「テンプレート検索用_new」では、C列に大分類のデータの入力規則リストがあり、それに応じて、D列及びE列は自動的に入力規則リストを作成します。
トリガーを使用して、検索リストが編集されるたびに特定のセールに検索条件と一致した文章を記入したいです。
テンプレではヘッダーやフッター、本文などに分けられているので、複数の文章を抽出し、順次に記入できれば幸いです。

発生している問題

テンプレ庫の分類に応じて、GASを使ったチェックリストの作成まではできていますが、肝心の所、大分類、中分類、小分類を使って一致した文章を抽出する方法が分かりませんので、質問させていただきました。

該当のソースコード

GAS

1var SS = SpreadsheetApp.getActiveSpreadsheet(), 2 SSsheet = SS.getActiveSheet(), 3 targetsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("テンプレート検索用_new"), 4 targetsheetname = targetsheet.getSheetName(), 5 CheckDataList = SS.getSheetByName('テンプレ庫'), 6 myCell = SSsheet.getActiveCell(); 7 8function procedure() { 9 if(myCell.getColumn()==3){ 10 SetChecklistAccordingByBigClass(); 11 12 } 13 else if(myCell.getColumn()==4) { 14 15 SetChecklistAccordingByMidClass(); 16 17 } 18 19 } 20function SetChecklistAccordingByBigClass(){ 21 22if(SSsheet.getSheetName() == targetsheetname) { 23 24 var BigRowNum = myCell.getRow(), 25 BigClass_selected = myCell.getValue(), 26 BigClassValues = CheckDataList.getRange("A:A").getValues(), 27 MidClassValues1 = CheckDataList.getRange("B:B").getValues(); 28 29 var MatchDataList1 = new Array(); 30 for (var i = 0; i<BigClassValues.length; i++){ 31 if(BigClassValues[i] == BigClass_selected){ 32 if(MidClassValues1[i]!="") { 33 34 MatchDataList1.push(MidClassValues1[i]); 35 } 36 else{ 37 var MatchDataList1=0 38 } 39} 40 41} 42 43if(MatchDataList1 != 0){ 44var MidClassCheckBoxList = SpreadsheetApp.newDataValidation().requireValueInList(MatchDataList1,true).build(); //プルダウン形式の選択肢をmatchListにした入力規則を構築 45SSsheet.getRange(BigRowNum, 4).setDataValidation(MidClassCheckBoxList); 46} 47} 48 49} 50 51function SetChecklistAccordingByMidClass(){ 52 53if(SSsheet.getSheetName() == targetsheetname) { 54 55 var MidRowNum = myCell.getRow(), 56 MidClass_selected = myCell.getValue(), 57 MidClassValues2 = CheckDataList.getRange("B:B").getValues(), 58 SmallClassValues = CheckDataList.getRange("C:C").getValues(); 59 60 var MatchDataList2 = new Array(); 61 for (var i = 0; i<MidClassValues2.length; i++){ 62 if(MidClassValues2[i] == MidClass_selected){ 63 if(SmallClassValues[i]!="") { 64 65 MatchDataList2.push(SmallClassValues[i]); 66 } 67 else{ 68 var MatchDataList2=0 69 } 70} 71 72} 73 74if(MatchDataList2 != 0){ 75var SmallClassCheckBoxList = SpreadsheetApp.newDataValidation().requireValueInList(MatchDataList2,true).build(); //プルダウン形式の選択肢をmatchListにした入力規則を構築 76SSsheet.getRange(MidRowNum, 5).setDataValidation(SmallClassCheckBoxList); 77} 78} 79 80}

補足

関数procedureの方に、PickArticleの関数を最後に執行させ、「テンプレート検索用_new」に選択された内容を抽出して、「テンプレ庫」の方に比較し、一致した文章を配列として保存し、併せて記入したいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

myCell.getColumn()==5のときに、
var BigClass_selected = SSsheet.getRange(myCell.getRow(),3).getValue();
var MidClass_selected = SSsheet.getRange(myCell.getRow(),4).getValue();
var SmallClass_selected = SSsheet.getRange(myCell.getRow(),5).getValue();
として
for (var i = 0; i<BigClassValues.length; i++){
if(BigClassValues[i] == BigClass_selected&&MidClassValues[i] == MidClass_selected&&SmallClassValues[i] == SmallClass_selected){
BigClassValues[i]とMidClassValues[i]とSmallClassValues[i]を配列に格納して指定場所にsetValues
}
で良いんじゃないでしょうか?

投稿2019/08/14 01:42

hiroshi0240

総合スコア640

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

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

koroaisu

2019/08/16 14:51

ご回答、ありがとうございます。 可能であれば、シートを編集時にfunction procedureを起動し、自動的に文章を更新する形を取りたいです。 ご回答を参考とし、自分なりに研究してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問