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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1252閲覧

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

mbcztpw

総合スコア30

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/03/03 09:37

AB
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}

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

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

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

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

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

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

YAmaGNZ

2023/03/03 10:57

変換データ用のシートを作ってそこから読み込めばいいのでは? そうすればメンテナンス性も悪くないでしょうし どの方法を取るにしても"一 二三"さんと"一二 三"さんがいた場合など考えなくてはいけないでしょうけど
guest

回答1

0

自己解決

YAmaGNZ様の提案のように
変換データ用のシートを作って読み込む方式にしました。
ご提案ありがとうございました。

投稿2023/03/06 12:13

mbcztpw

総合スコア30

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問