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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

2回答

2280閲覧

Google スプレッドシート セルに演算子を書いて計算できませんか?

DrvPCO

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/09/14 06:38

セルに演算子を書いて計算ができないものでしょうか。
例:
A1  B1  C1   D1  E1  F1
6   ÷   3   +  3  5

F1にA1 & B1 & C1 & D1 & E1 としても
6÷3+3と表示されるだけです。
計算を行ってF1が5になるようにすることは出来るのでしょうか。
ご存じでしたらお知らせください。

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

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

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

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

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

guest

回答2

0

加減乗除だけでよければ、if関数を使うのが手っ取り早いのではないでしょうか。

A,C列に数値、B列に演算子が書かれているとして、一応全角半角の違いに配慮して、以下のような式をC列に置くというのはどうでしょうか。

=IF(or(B1="+", B1="+"), A1+C1, if(or(B1="-", B1="ー"), A1-C1, if(B1="÷", A1/C1, if(B1="×", A1*C1))))

投稿2020/09/14 14:26

KojiDoi

総合スコア13671

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

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

DrvPCO

2020/09/15 04:49

ありがとうございます。その手は考えつきませんでした。計算の要素数が固定されている場合は楽に設定できますね。
guest

0

ベストアンサー

標準では、そういう関数は無いみたいですね。
スクリプトを使って独自の関数を定義する必要がありそうです。


①スプレッドシートのメニューから 「ツール」→「スクリプト エディタ」
①


②スクリプトエディタに以下のコードを入力し、「保存」

function evaluate(formula) { return eval(formula); }

②


③任意のセルに、独自定義した関数を記述

=evaluate(A1&B1&C1)

③

投稿2020/09/14 08:52

alg

総合スコア2019

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

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

draq

2020/09/14 11:23 編集

細かいツッコミですが、質問で例示されている ÷ は JavaScript では無効な演算子なので、/ に置換する必要がありますね。× も同様。
alg

2020/09/15 08:59 編集

補足、ありがとうございます。 そうですね、÷×+-など、"evalで解釈できないが人間にとっては解釈してほしい文字" はevalで解釈できるよう置き換えたいかもしれませんね。
sawa

2020/09/15 11:32 編集

質問からは脱線して申し訳ないですが、evalはjavascriptでは危険みたいな情報を見たことがあるのですが、gasでは気にしなくて大丈夫なもんでしょうか?よろしければ教えてください。
alg

2020/09/16 01:27

興味深い質問、ありがとうございます。 JavaScriptにおけるevalの危険性は、利用者が意図していないコードが実行される可能性がある、という点にあると思います。 GASの場合も、利用者が意図していないコードが実行される可能性はあると思われます。 ただ、ブラウザで動作する生のJavaScriptとGASのスクリプトは、背後にあるオブジェクトが少し異なるようです(詳しくは理解していないのですが、少し触った感じでは)。 例えば、`window.alert()` などは回答内の `evaluate` 関数では解釈できないようでした(セルに "#ERROR!" と表示される)。 「GASのevalでは、危険な関数はある程度無効化されている」ということなのかもしれませんね。 GASの公式ドキュメントを軽く見た限りではevalに関する記述を見つけられなかったので、裏付けがとれていないのが心苦しいですが。
alg

2020/09/16 01:30

今回のような「計算がしたい」という用途であれば、私の回答内の `evaluate` 関数内で不要な文字を排除したほうが良いのかもしれません。 例えば、0~9の半角数字と+-*/と小数点、あたり以外の文字が含まれていたらevalにかけずエラーとする、など。
sawa

2020/09/16 05:31 編集

>algさん ご回答いただき、ありがとうございました。危険性の意味、少し理解できました。 GAS,とくにスプレッドシートの自作関数として利用する場合は、それほど危険性が無さそうですね。 >質問者 DrvPCOさん 横から失礼いたしました。algさんの回答に draqさんが指摘されてる部分(置換)を return eval(formula.replace("÷","/").replace("×","*").replace("+","+")); こんな感じで書き換えてあげると 質問の式も希望の動作になると思います。試してみてください。 &で繋ぐの面倒なら セルに入れる式は =evaluate(CONCATENATE(A1:C1)) といった書き方でも動きます。
DrvPCO

2020/09/16 08:09

algさん、ありがとうございます。私がやりたいことが出来ました。 そしてdraqさんsawaさんご議論いただきまして感謝します。 皆さんのおかげで、考えの幅ができたと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問