投稿

ラベル(GAS)が付いた投稿を表示しています

【GAS】多分、恐らく、全く無意味な関数を作ってしまった(INDIRECT関数凄い)

イメージ
GoogleスプレッドシートにはINDIRECTという関数がある。 これはとても便利な関数と何処かで読んだ事がある。 改めて利用例を色々見ると、関数を書き換えなくても動的に関数の動作を変えることが出来る関数というのが正しい理解であろうか。 この関数は便利そうである。 よく見かける利用例はこんなので、行数が不確定なデータの合計を取る必要がある場合どうするのかというもの。 =SUM(A1:A16) と、このように指定した場合、行数が変わったら関数を書き換えなければならない。 ここで、行数を調べるために=COUNTA(A:A)として行数を調べる。 で、=SUM("A1:A"&COUNTA(A:A))としたいがエラーになる。 これを解決するのがINDIRECT関数という説明で以下のようにする。 =SUM(INDIRECT( "A1:A"&COUNTA(A:A))) COUNTAでの増減対応例  これで行数が増えても減ってもA列をカウントした数までSUMの対象になる。 INDIRECT関数で文字や数値を関数に渡すことで、色々と動的に関数の挙動が変えられるわけだ。 でも、COUNTAだと間に空白行があったら、空白はカウントしないから範囲がずれてしまう。 事例には続きがあり、もっと複雑な関数の組み合わせで空白行があっても最終行を対応する事が出来る事例が掲載されていた。 だが、その事例を見た私は、こんな複雑で見づらい関数の組み合わせを使いたくないと思った。(MAX関数とMATCH関数を用いるものであったがここでは割愛する) であるから、シンプルに最終行を取得するユーザー関数を作ってしまったのである。 「作ってしまった」 だって多分恐らく全く無意味だから・・・。 とりあえず、作ってしまった無意味な関数を使う場合こうなる =TOMM(A:A) これで最終行が数値で取得できる。 空白行があっても問題はない なので、空白行があっても対応できる範囲が可変なSUM関数はこんな感じで使える。 =SUM(INDIRECT( "A1:A"&TOMM(A:A))) シンプル!、MATCH関数を組み合わせるような利用例と比べたらかなりシンプル!...

「翻訳しないをする」GAS LanguageApp.translate

イメージ
 機械翻訳を行なっていると、部分的に翻訳したく無い箇所がある事に気がつく。  私の場合、翻訳精度を上げるために固有名詞リストを作り、翻訳にかける前に固有名詞をシリアルコードに全置換して、LanguageApp.translateで翻訳後にシリアルコードを該当言語の固有名詞に全置換するスクリプトを組んでいたのだが、翻訳後にシリアルコード部分にスペースが混入したり、さらには数字が欠落することがあった。  コードがおかしくなると当然ながら置換に失敗してしまう。  数十回に一回の割合であったが、翻訳後にシリアルコードが残ってしまうのでは大問題であった。 例 ABCD0011 このようなコードがあったとする  以下の三行のような形で余分なスペースの混入や数字の欠落が見られた。 ABCD 0011 ABCD001 ABC D0011  このような変わってはいけない文字列は翻訳対象から除外するべきであろう。  しかし、翻訳対象から外す方法はLanguageApp.translateの説明を読んでもどこにも書いていない。 https://developers.google.com/apps-script/reference/language/language-app  翻訳対象から除外する方法としてトリプルブラケットで囲むという方法があると以前そちらの方面の人から聞いていたが、少なくともLanguageApp.translateでは効果がなかった。  様々な記号で囲んでテストしてみたが、翻訳対象から除外することは出来なかった。 もうほとんど諦め気分で検索を繰り返していた時、そんな時にhtmlのページ翻訳から翻訳対象を外す方法を目にした。 <span translate="no"> text... </span>  こうして翻訳対象から外したい文字列を囲むことでWeb上に公開したページに関して閲覧者がページ翻訳を行ったとしても指定箇所だけは翻訳されずに残るという事だ。  公開したWebページの話しなので、LanguageApp.translateには関係無い。そう思った。  しかし、何か解決策がないかとリファレンスを何度も見返していた。  よくよく見返すと使用方法は2種類記載がある。  1つめはこれ...

Googleスプレッドシート GASで翻訳関数を敢えて作る

イメージ
Googleスプレッドシート(Google sheets)は無料で使えるWebアプリ。 従来の表計算ソフト(Excel,LibreOffice Calc,etc)のようにローカル環境にインストールする必要がなくウェブブラウザがあれば利用できる。 また、従来の表計算ソフトには無いGoogleならではの関数や機能がたくさんあり、表計算ソフトの新しい使い方を提示している。 特にウェブ関連の関数はとても便利だと感じる。 importxml関数は文字通りxmlを指定してシートにデータを挿入する関数であるが、これを使うとWikipediaの記事をAPIで取得してシートに貼り付けるといった事が簡単に実現できる。 また、googletranslate関数はセルの内容を指定した言語に翻訳する関数で、こちらもとても便利。 A2に『ドラえもん』と入っていたとして、英語に翻訳したければこうする。 =googletranslate(A2,"ja","en") 『Doraemon』と表示された。 もうちょっと長い文章を翻訳させてみよう。 A2に『宇宙船サジタリウス』と入っているとしてimportxmlでwikipedia APIを呼び出して要約を取得する。 =IMPORTXML("https://ja.wikipedia.org/w/api.php?format=xml&action=query&srlimit=10&list=search&srsearch="&A2,"//p/@snippet") 『"『宇宙船サジタリウス』(うちゅうせんサジタリウス)は、1986年1月10日から1987年10月3日までテレビ朝日系列で、毎週金曜19:30 - 20:00(JST)に全77話が放送された、日本アニメーション制作の日本のオリジナルSFアニメである。 藤倉電線(現・フジクラ) →"』 この文章をgoogletranslate関数で翻訳すると以下のようになる。 『"""Spaceship Sagittarius"" (spacecraft Sagittarius) is a T...