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

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

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

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

Q&A

解決済

3回答

20840閲覧

GAS setFormula("=式")内に""を挿入したいがエスケープの仕方が分かりません

true

総合スコア440

Google Apps Script

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

0グッド

0クリップ

投稿2015/10/27 01:07

いつもありがとうございます。

標記のとおり、setFormula式内のダブルクオーテーションのエスケープについてハマっております。たとえば=IFERROR(評価式,"")のようにダブルクオーテーションが混じる式を挿入する機会は多いと思うのですが、そのままだとsetFormula式を覆うダブルクオーテーションと重複しているためかエラーになります。

で、普通に¥"¥"としてもだめでした。かといって''とシングルにすると今度は式が解析エラーを起こしてしまいました。

GAS独自のダブルクオーテーションのエスケープのやり方があるのでしょうか?

よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

自己解決

お騒がせしました。IFEEROR(評価,"")ではなく、単純にIFERROR(評価)とすればエラーのときは何も結果を吐かない(#ERRORや#VALUEや#N/Aなど)ことがわかったので、これでいこうと思います。

ご回答下さったみなさま、ありがとうございました。

例)シート2の1列目と2列目にidと対応するnameを適当に定義し、シート1の1列目の任意の行に任意のidを入れると対応するnameが2列目に入る。このとき存在しないidを入れると空白で(エラー表示なしで)返ってきてくれる。

function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var name = sheet.getName();
if (name == "シート1") {
var row = e.range.getRow();
var col = e.range.getColumn();
if (col == 1) {
sheet.getRange(row,2).setFormula("=IFERROR(INDEX('シート2'!B:B,MATCH(RC[-1],'シート2'!A:A,0)))");
}
}
}

投稿2015/10/27 07:39

true

総合スコア440

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

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

0

trueさんへ

エスケープシーケンスは「バックスラッシュ(\)」です。
フォントの関係等で「\」が「¥」表示になることもありますが、「"」をエスケープすれば問題なく数式をセットできます。
また、setFormula()のパラメータをシングルクォートで囲み、通常通りの数式を入力しても数式をセットできます。
※ 日本語入力モードで「¥」と入力すれば、変換候補に出てきます。

Javascript

1// 例)IF(ISBLANK(B1),"A","B") 2var ss = SpreadsheetApp.getActiveSpreadsheet(); 3ss.getRange('A1').setFormula("IF(ISBLANK(B1),¥"A¥",¥"B¥")");//保存時に警告 4ss.getRange('A2').setFormula("IF(ISBLANK(B1),\"A\",\"B\")");//問題なし 5ss.getRange('A3').setFormula('IF(ISBLANK(B1),\"A\",\"B\")');//問題なし 6ss.getRange('A4').setFormula('IF(ISBLANK(B1),"A","B")'); //問題なし

投稿2015/10/27 06:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

true

2015/10/27 07:43 編集

ありがとうございます。私の場合、エラー時に空白を返したいと思っていたのです。質問の仕方がイマイチだったようで申し訳ありませんでした。
guest

0

ここが参考になりますかね
http://dackdive.hateblo.jp/entry/2014/09/01/175126

投稿2015/10/27 03:56

trick

総合スコア366

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問