アプリ版:「スタンプのみでお礼する」機能のリリースについて

スクリプトはネットで調べて超初歩から独学と雰囲気でどうにかしております。

効率のいいスクリプトを書ける方に質問です。

====================
var sheet = SpreadsheetApp.getActiveSheet();
var v = sheet.getRange('a:a').getValues();
for( var i=0; i<v.length; i++ ){
for( var j=0; j< v[i].length; j++ ){
v[i][j] = v[i][j].replace("東京都", "東京");
====================

上記のような置換用のスクリプトを複数の語を処理するため

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
var sheet = SpreadsheetApp.getActiveSheet();
var v = sheet.getRange('a:a').getValues();
for( var i=0; i<v.length; i++ ){
for( var j=0; j< v[i].length; j++ ){
v[i][j] = v[i][j].replace("東京都", "東京");
}
}
sheet.getRange('a:a').setValues(v);
var sheet = SpreadsheetApp.getActiveSheet();
var v = sheet.getRange('a:a').getValues();
for( var i=0; i<v.length; i++ ){
for( var j=0; j< v[i].length; j++ ){
v[i][j] = v[i][j].replace("大阪府", "大阪");
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

のようにただただ何回も記載して縦長なスクリプトを書きました。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
var sheet = SpreadsheetApp.getActiveSheet();
var v = sheet.getRange('a:a').getValues();
for( var i=0; i<v.length; i++ ){
for( var j=0; j< v[i].length; j++ ){
v[i][j] = v[i][j].replace("東京都", "東京");("大阪府", "大阪");("京都府", "京都");("福岡県", "福岡")・・・・・・・・・
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
のようにひとつの命令文の中に複数入れられませんでしょうか?

自力でやった結果ダメでしたので、詳しい方にお聞きしたいです。

A 回答 (1件)

こんにちは



書いてないのでわかりませんが、Apps Scriptでしょうか?
とは言っても、私はApps Scriptを知っているわけではないのですが…

現状(?)の
 >v[i][j] = v[i][j].replace("東京都", "東京");
が動作しているのであれば、単純に繰り返して記述するのが確実でしょう。
 v[i][j] = v[i][j].replace("東京都", "東京");
 v[i][j] = v[i][j].replace("大阪府", "大阪");
 v[i][j] = v[i][j].replace("京都府", "京都");
   ・・・・・・・

想像するところ、replaceメソッドを連続して記述しても、同様になるものと思います。
v[i][j] = v[i][j].replace("東京都", "東京").replace("大阪府", "大阪").replace("京都府", "京都")・・・
のような要領です。


…とは言え、対象の数が多くなるとこのような記法では面倒になってくると思われます。
交換データ群をあらかじめ配列等に収めておいて、その数だけループするような処理にしておくほうが一般的かもしれません。

例えば、
 var exchangeData = [
  ["東京都", "東京"],
  ["大阪府", "大阪"],
  ["京都府", "京都"],
  ["福岡県", "福岡"],
   ・・・・・・・
 ];
としておいて、ループ部分では
 var tmp = v[i][j];
 for(var k=0, ed; ed=exchangeDate[k++];) tmp = tmp.replace(ed{[0], ed[1]);
 v[i][j] = tmp;
のような感じでしょうか?


※ご質問内容には直接関係ありませんが、 置換の対象が都道府県名だけに限定されているのなら、必ずしも"東京都"と"東京"のように置換前、置換後の両方の語句を用意しておかなくてもよさそうに思います。
都道府県名(例:"東京都")だけあれば、そこから都、道、府、県を除けば良いだけなので・・・
そのように考えれば、
 var exchangeData = ["東京都","大阪府","京都府","福岡県",・・・・];
のように単純にすることも可能になるでしょう。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!