スプレッドシートについての質問です。
・やりたいこと
シート1のA列には文章、シート2のA列とB列には苗字とIDが載っています。
シート1のA列の文章内に、シート2のA列の苗字があれば合致するIDをシート1のB列に表示させたいです。
いわば、VLOOKUP関数のようなことをしたいです。
・問題点
最初は関数で行おうとしたのですが、検索対象の文章はSlackなど外部ツールから自動で書き込まれる作りにしてあるため、関数が効かない状態です。(調べたところ関数を効かせるのは無理のようです)
・試したこと
色々似たようなことをしようとしているサイトを調べたがよく理解できず。
やりたいことに似た質問が見つからなかった。
配列を使うものと配列を使わないものの情報があり混乱してしまった。
コードは思いついたところまでなので、未完成なものなのですが
ご教授よろしくお願いいたします。
GAS
1var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); 2var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート2"); 3var range = sheet1.getRange("B2:C54); 4//苗字、IDシートの検索対象範囲 5var data = range.getValues(); 6var lastRow = sheet1.getDataRange().getLastRow(); 7 8for (var k = 0; k<=lastRow; k++) 9{ 10 if(sheet1.getRange(k,3).getValue() == data) 11 { 12 13 sheet1.getRange(k,2).setValue(data) 14 } 15 16}
配列を使うやり方がわからなかったので、関数を分けて以下のようにしてみましたが結局解決できませんでした。
GAS
1 var IDsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("IDだよ"); 2 var range = IDsheet.getRange('A2:C42'); 3//苗字とIDが載っているシートと範囲 4 var data = range.getValues(); 5 var kakikomisaki = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("名前"); 6//検索対象の本文とIDを書き込む先のシート 7 8 var lastRow2 = kakikomisaki.getDataRange().getLastRow(); 9 var num; 10 11 12function myFunction() { 13 14 for (var k = 1; k <lastRow2; k++) 15 { 16 var getText = kakikomisaki.getRange(k,3).getValues(); 17 18 ind(getText); 19 20 21 slackid = IDsheet.getRange(num,3).getValues(); 22 kakikomisaki.getRange(k,4).setValue(slackid); 23 } 24 25 26 } 27 28function ind(getText) 29{ 30 for (var k = 1; k<=data.length; k++) 31 { 32 var idd = IDsheet.getRange(k,2).getValues(); 33 34 var result = getText.indexOf(k,2); 35 36 if (result != -1) 37 { 38 k = num; 39 return num; 40 } 41 } 42}
回答2件
あなたの回答
tips
プレビュー