クイックノート

ちょっとした発見・アイデアから知識の発掘を

【GAS】ふりがなで漢字をソートする

表ソフトで名前の順に並べたいとき、
漢字の名前をそのままソートすると、
下の図のように狙い通りの順番になってくれません。

f:id:u874072e:20191024151231p:plain:h200
漢字順の並び

「やすだ」さんは「や」行なので、
一番後ろにきてほしいのですが、
同じ「安」の漢字の「安倍」さんと並んでソートされます。

ふりがなのデータもあれば、
ふりがなでソートすれば良いのですが、
データがない場合に手動で入力していくのは骨が折れます。

そこで、スクリプトを組んで、
Google スプレッドシートにふりがなソートの機能を追加してみましょう。

準備

漢字のふりがなを生成するために、
gooラボで提供されている「ひらがな化API」を利用します。

APIの利用には、
1. GitHubのアカウント作成
1. gooラボAPI利用登録
が必要です。

また登録完了時に表示されるアプリケーションIDを記録しておきましょう。

スクリプトの作成

ふりがなソートを行いたいスプレッドシートから、
スクリプトエディタを開き、
スクリプトを記述していきます。

大まかな流れとしては、
1. gooラボAPIを利用してふりがなを生成
1. ふりがな順にソート
1. 生成したふりがなを削除
を自動的に実行することで、
ふりがなソートを実現します。

API を呼び出す関数

APIを利用してふりがなを取得する関数を定義します。

output_type"hiragana""katakana"を指定することで、
sentenceで与えた文字列を平仮名またはカタカナに変換します。

GOO_API_IDにはAPI利用登録時のアプリケーションIDを指定します。

GOO_API_ID = "**********************"

var goo_hiragana = function(output_type, sentence) {
  if(sentence == "") return ""
  var endpoint = "https://labs.goo.ne.jp/api/hiragana";  
  var payload = {                                        
    "app_id": GOO_API_ID,               
    "sentence": sentence,                                
    "output_type": output_type                           
  };
  var options = {
    "method": "post",
    "payload": payload
  };

  var res = UrlFetchApp.fetch(endpoint, options);   
  var json = JSON.parse(res.getContentText());
  return json.converted;
};

ふりがなを生成する関数

下の関数ではcolで指定した列の各セルについて、
ふりがなを生成して、最後尾の列に記入します。

function gen_hurigana(sheet,col){
  var nrow = sheet.getLastRow()
  var ncol = sheet.getLastColumn()
  var X = sheet.getRange(1,col,nrow).getValues()
  for(var i = 0;i<nrow;i++){
    
    X[i][0] = goo_hiragana("hiragana",X[i][0])
  }
  sheet.getRange(1,ncol+1,nrow).setValues(X)
}

ふりがなソートの実行

gen_huriganaを利用して、
ふりがなを生成した後、
ふりがなでソートして、
最後に利用したふりがなを削除します。

これでふりがなソートの完成です。

function myFunction() {  
  var ss = SpreadsheetApp.getActive()
  var s = ss.getActiveSheet()
  
  gen_hurigana(s,s.getActiveRange().getColumn())
  s.sort(s.getLastColumn())
  s.getRange(1, s.getLastColumn(),s.getLastRow()).clear()
  
}

メニューの追加

ソートの度にmyFunctionスクリプトエディタを開くのは面倒なので、
スプレッドシートのメニューにふりがなソートを追加しておきます。

スプレッドシートを開いた時に呼び出されるonOpen関数内で、
メニューの追加を行います。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu('ユーザー機能');
  menu.addItem('ふりがなソート', 'myFunction');
  menu.addToUi();
}

利用方法

ソートの基準となる列にカーソルを合わせて、
上部のメニューから「ユーザー機能」→「ふりがなソート」
を選択します。

f:id:u874072e:20191024145210p:plain
ふりがなソートをメニューに追加

すると、下の図のようにソートが実行されました。
「あべ」「うえはら」「ささき」・・・
と正しく名前の順にソートされていることがわかります。

f:id:u874072e:20191024153913p:plain:h200
ふりがなソートの結果

まとめ

スプレッドシート内の漢字の列を
ふりがな順でソートするスクリプトを紹介しました。

標準機能としてあってもおかしくないような機能ですが、
ないものは自分で作るしかないですね。

プライバシーポリシー