Googleドキュメントのスプレッドシートで、=EVAL(A1)
のようなものを探しています。A1は_"=1+2"
_に設定されています。
MS ExcelにはEVALUATE()
関数があることを知りました(適切に使用するのは少し難しいようです)。しかし、Googleドキュメントでは同様のものが見つかりませんでした。
関数リスト も検索しましたが、役に立ちませんでした...
いいえ、GoogleスプレッドシートにはExcelのEVALUATE()
に相当するものはありません。
この記事の背後には長い歴史があります。たとえば this old post を参照してください。
(質問に示されているように)単純な数学にのみ興味がある場合は、 カスタム関数 を使用して簡単に計算できます。
_function doMath( formula ) {
// Strip leading "=" if there
if (formula.charAt(0) === '=') formula = formula.substring(1);
return eval(formula)
}
_
たとえば、A1では、=doMath(A1)
を別のセルに配置すると、_3
_になります。
前述のように 以前は ですが、Googleスプレッドシートには組み込みのEVALUATE関数はありませんが、Googleスプレッドシートを拡張してこの関数を追加することができます。幸いなことに、いくつかのSocialCalcファイルを使用して、これを簡単にすることができます。
Googleスプレッドシート 進捗状況を共有しています。この時点で、必要だと思われるSocialCalcファイルといくつかの関数、およびいくつかのテストケースを追加しました。
[〜#〜]メモ[〜#〜]:
リンクされたファイルのEVALUATE関数は、カスタム関数として使用できます。
A1:_'=1+2
_(アポストロフィを使用して、数式をGoogleスプレッドシートで文字列として扱うようにしてください。
B1式:
_=EVALUATE(A1)
_
B1表示値:
_3
_
=VLOOKUP(2,A1:B3,2)
のような数式を「評価」するには、現時点では「高度な」パラメータを使用する必要があります。次の例を参照してください。
B1:'=VLOOKUP(2,A1:B3,2)
C1式:
_=EVALUATE(B1,"data","A1:B3")
_
C1表示値:
_B
_
_/**
*
* Evaluates a string formula
*
* @param {"=1+1"} formula Formula string
* @param {"Tests"} sheetName Target sheet.
* @param {"A1"} coord Target cell.
*
* @customfunction
*
*/
function EVALUATE(formula,sheetName,coord){
// SocialCalc Sheet object
var scSheet = new SocialCalc.Sheet();
if(sheetName && coord){
// Pass values from a Google sheet to a SocialCalc sheet
GS_TO_SC(scSheet,coord,sheetName);
}
var parseinfo = SocialCalc.Formula.ParseFormulaIntoTokens(formula.substring(1));
var value = SocialCalc.Formula.evaluate_parsed_formula(parseinfo,scSheet,1); // parse formula, allowing range return
if(value.type != 'e'){
return value.value;
} else {
return value.error;
}
}
/**
*
* Pass the Google spreadsheet values of the specified range
* to a SocialCalc sheet
*
* See Cell Class on socialcalc-3 for details
*
*/
function GS_TO_SC(scSheet,coord,sheetName){
var ss = SpreadsheetApp.getActiveSpreadsheet();
if(sheetName){
var sheet = ss.getSheetByName(sheetName);
var range = sheet.getRange(coord);
} else {
var range = ss.getRange(coord);
}
var rows = range.getNumRows();
var columns = range.getNumColumns();
var cell,A1Notation,dtype,value,vtype;
// Double loop to pass cells in range to SocialCalc sheet
for(var row = 1; row <= rows; row++){
for(var column = 1; column <= columns; column++){
cell = range.getCell(row,column);
A1Notation = cell.getA1Notation();
value = cell.getValue();
if(cell.isBlank()){
dtype = 'b';
vtype = 'b';
} else {
switch(typeof value){
case 'string':
dtype = 't';
vtype = 't';
break;
case 'date':
case 'number':
dtype = 'v'
vtype = 'n';
break;
}
}
scSheet.cells[A1Notation] = {
datavalue: value,
datatype: dtype,
valuetype: vtype
}
}
}
}
_
https://github.com/DanBricklin/socialcalc/blob/master/formula1.js
https://github.com/DanBricklin/socialcalc/blob/master/socialcalcconstants.js
https://github.com/DanBricklin/socialcalc/blob/master/socialcalc-3.js
数式をコピーして貼り付けます:
「jQuery.sheet」から必要な数式をコピーして貼り付けることができます。へ移動:
https://github.com/Spreadsheets/WickedGrid
すべて「オープンソース」のように見える
問題を修正しない
また、「スクリプトで標準のスプレッドシート関数を使用できるようにする」の問題は「修正されない」とマークされています https://code.google.com/p/google-apps-script-issues/issues/detail? id = 26
EthercalcEthercalcと呼ばれるGoogleのようなオープンソーススプレッドシートがあります
GUIコード: https://github.com/audreyt/ethercalc
数式: https://github.com/marcelklehr/socialcalc
デモ-砂嵐について: https://apps.sandstorm.io/app/a0n6hwm32zjsrzes8gnjg734dh6jwt7x83xdgytspe761pe2asw
これは古い記事です。私はただ疑問に思っています、なぜ誰も提案しませんでした:
myCell.getValue();
これにより、myCellの数式の結果(例では3)が得られます。
(数式ではなく)結果をセルに書き込む場合は、次のように使用できます。
function fixFormula(myCell) {
myCell.setValue(myCell.getValue());
}
Googleスプレッドシートで数式を評価するための簡単なハック:
数式が評価されます! :)
単純な数学(A1: "(1 + 2)* 9/3"など)を評価する場合は、クエリを使用できます。
=query(,"Select "&A1&" label "&A1&" ''",0)
`+が前に付いていない式の列を変換します。
92/120
67/85
等.