GASでスプレッドシート上の氏名を姓と名に分ける(姓と名の間にスペースを入れる)

A B
1 氏名 処理後
2 林徳太郎 林 徳太郎
3 木田明 木田 明
4 小森田三郎 小森田 三郎

スプレッドシート上の氏名の姓と名の間にスペースを入れるため下記プログラムを作成しました。
(氏名は姓・名ともに文字数がまちまちなため、氏名の何文字目でスペースを入れる、ということができません。)
name配列とrename配列の添え字が一致していることで、氏名を変換することができます。
しかし、氏名が多くなり、name配列で”木田明”が抜けていた場合は
正しく変換されません。("木田明"はそのまま、"小森田三郎"が"木田 明"になる)

GAS

1function rename(){ 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var st = ss.getSheetByName("シート1); 4 var name = ["林徳太郎","木田明","小森田三郎"]; 5 var rename = ["林 徳太郎","木田 明","小森田 三郎"]; 6 var copyRange=st.getRange(2,1,3,1).getValues(); 7 // 氏名の姓と名の間に半角空白を挿入 8 for (var i=0; i<copyRange.length; i++){ 9 for (var j=0; j<rename.length; j++){ 10 if (copyRange[i][0]==name[j]){ 11 copyRange[i][0] = rename[j]; 12 } 13 } 14 } 15 st.getRange(2,2,3,1).setValues(copyRange); 16}

連想配列を使うと、変換前の氏名と変換後の氏名の対応関係を間違えづらくなります。

GAS

1function rename1(){ 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var st = ss.getSheetByName("シート1"); 4 const name_rename = new Map([["林徳太郎","林 徳太郎"],["木田明","木田 明"],["小森田三郎","小森田 三郎"]]); 5 var copyRange=st.getRange(2,1,3,1).getValues(); 6 // 氏名の姓と名の間に半角空白を挿入 7 for (var i=0; i<copyRange.length; i++){ 8 for(const [key, value] of name_rename){ 9 if (copyRange[i][0]==key){ 10 copyRange[i][0] = value; 11 } 12 } 13 } 14 st.getRange(2,2,3,1).setValues(copyRange); 15}

より短くする方法やより分かりやすい方法、
このような場合の一般的な方法などありましたら教えていただけないでしょうか。
よろしくお願いします。

コメントを投稿

0 コメント