スプレッドシートの複数のセルにある文字列を、まとめて別シートの変換表に基づき置き換え、すぐ横のセルにまとめて出力する仕組みを作りたいと思います。
https://qiita.com/mkiken/items/926ce3a0293cbcd6c404
この記事を参考にしながら、スプレッドシートに「変換表」というタブ名で
||A|B|
|:--:|--:|
|1|あ|ア|
|2|い|イ|
|3|う|ウ|
|4|え|エ|
|5|お|オ|
というシートを作り、もうひとつ「変換前後」というタブ名で、
||A|B|
|:--:|--:|
|1|う||
|2|お||
|3|え||
|4|あ||
|5|い||
というシートを作りました。
JS
1spreadsheet = null; 2sheetMap = []; 3function translate(){ 4 var sheet = _getSheetByName('変換前後'); 5 var rangeFrom = sheet.getRange(1,1,5,1); 6 7 var sheetTable = _getSheetByName("変換表"); 8 // 変換表を全て取得 9 var tableValues = sheetTable.getRange(2,1,sheetTable.getLastRow(),2).getValues(); 10 11 var fromStr = rangeFrom.getValues().join(); //joinで文字列化 12 13 //split-joinで照合する処理 14 for (var i in tableValues) { 15 fromStr = fromStr.split(tableValues[i][0]).join(tableValues[i][1]); 16 } 17 //Logger.log(fromStr); //オ,ウ,キ,エ,ク 18 //配列化する 19 fromStr = fromStr.split(','); //splitで配列化 20 Logger.log(fromStr); // [オ, ウ, キ, エ, ク] 21 22 var rengeTo = sheet.getRange(1,2,5,1); 23 rengeTo.setValue(fromStr) 24} 25 26//第2関数 27function _getSpreadSheet(){ 28 if ( ! spreadsheet) { 29 spreadsheet = SpreadsheetApp.getActive(); 30 } 31 32 return spreadsheet; 33} 34 35//第3関数 36function _getSheetByName(name){ 37 if ( ! sheetMap[name]) { 38 sheetMap[name] = _getSpreadSheet().getSheetByName(name); 39 } 40 41 return sheetMap[name]; 42} 43
これで試したところ、「変換前後」シートのB1-B5のレンジに「fromStr」の先頭の「オ」の文字列が全てのセルに入ってしまいます。
B1-B5の縦の列のセルひとつ一つに、配列「fromStr」の一つ一つのデータが入ることが理想です。
ご教唆頂ければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/25 03:44