Google शीट फॉर्मूला में अस्थायी चर कैसे बचाएं?


19

मैं एक Google स्प्रेडशीट में एक सूत्र बनाने की कोशिश कर रहा हूं जो इस तरह दिखता है:

if (x < 0, x + 1, x)

इसका मतलब है कि अगर xतुलना में छोटा है 0, तो वापस x + 1लौटें x

हालाँकि, xअपने आप में एक अभिव्यक्ति है, उदाहरण के लिए A1 + B1। इसलिए मैं इसके साथ समाप्त हुआ:

if ((A1 + B1) < 0, (A1 + B1) + 1, (A1 + B1))

मैं (A1 + B1)एक अस्थायी चर में अभिव्यक्ति को कैसे बचा सकता हूं xजैसे कि मैं यह कर सकता हूं? :

x = (A1 + B1);
if (x < 0, x + 1, x);

मेरी स्प्रैडशीट में वर्तमान अभिव्यक्ति इस तरह दिखाई देती है:

if(
    timevalue(Sheet1!$D10)-timevalue(min(filter(Sheet1!$D$2:$D$99,Sheet1!$A$2:$A$99=A10,Sheet1!$E$2:$E$99=E10))))
    < 0,
    1 +
    timevalue(Sheet1!$D10)-timevalue(min(filter(Sheet1!$D$2:$D$99,Sheet1!$A$2:$A$99=A10,Sheet1!$E$2:$E$99=E10))))
    ,
    timevalue(Sheet1!$D10)-timevalue(min(filter(Sheet1!$D$2:$D$99,Sheet1!$A$2:$A$99=A10,Sheet1!$E$2:$E$99=E10))))
)

मैं इसे इस तरह छोटे और अधिक प्रबंधनीय दिखने की कोशिश कर रहा हूं:

x = timevalue(Sheet1!$D10) - timevalue(min(filter(Sheet1!$D$2:$D$99,Sheet1!$A$2:$A$99=A10,Sheet1!$E$2:$E$99=E10))));
if(
    x
    < 0,
    1 +
    x
    ,
    x
)

1
@pnuts, Hmm, वैरिएबल फॉर्मूलों का हिस्सा और पार्सल हैं। अस्थायी चरों के रूप में कोशिकाओं को हैक करना एक गंदे घोल की तरह लगता है क्योंकि कोशिकाएं व्यापार डेटा के भंडारण के लिए होती हैं , न कि राम के लिए।
17

1
@ पॉट्स, यह कोई फर्क नहीं पड़ता कि यह तब तक संग्रहीत है जब तक कि यह कोशिकाओं में संग्रहीत न हो। सेल व्यावसायिक डेटा संग्रहीत करने के लिए हैं ।
18

1
@pnuts, एक स्क्रिप्ट समाधान एक संभव अगला-सर्वश्रेष्ठ-विकल्प होगा। जब तक डेटा एक सेल में प्रकट नहीं होता है यह एक व्यवहार्य समाधान है।
पचेरियर

जवाबों:


6

मैं अक्सर उपयोग की जाने वाली संगणना के लिए चर के रूप में कोशिकाओं का उपयोग करता हूं, और वास्तव में "नामित पर्वतमाला" का उपयोग करके उन्हें नाम देता हूं। यह उस सूत्र के बारे में सोचना आसान बनाता है जिसे आप विकसित करने की कोशिश कर रहे हैं। आप उन कोशिकाओं को छिपा सकते हैं, यदि आप नहीं चाहते कि उन्हें देखा जाए।


इसे तब तक चयनित समाधान के रूप में लिया जाएगा जब तक कि एक बेहतर साथ न आए।
पचेरियर

4

संक्षिप्त जवाब

इस समय, Google पत्रक में सेल या श्रेणी संदर्भ के बजाय किसी सूत्र द्वारा परिभाषित चर को नाम निर्दिष्ट करने की सुविधा नहीं है। इस प्रकार के चर के साथ एक सूत्र का उपयोग करने के लिए वैकल्पिक कस्टम कार्यों का उपयोग करना है।

Google शीट में कस्टम कार्य

कस्टम कार्य Google Apps स्क्रिप्ट बाध्य प्रोजेक्ट्स या Google पत्रक ऐड-ऑन में परिभाषित किए गए हैं। उनका उपयोग केवल मूल्यों को वापस करने के लिए किया जा सकता है, न कि ईमेल भेजने जैसे कार्यों को स्वचालित करने के लिए।

एक कस्टम फ़ंक्शन एक जावास्क्रिप्ट फ़ंक्शन की तरह होता है और इसमें जेएसओसीओसी का उपयोग आटोक्लेम्पस की तरह बिल्ट-इन फ़ंक्शन सुविधाओं को जोड़ने और पॉपअप फॉर्मूला हेल्पर को प्रदर्शित करने के लिए किया जा सकता है। साथ ही एक कस्टम त्रुटि संदेश शामिल किया जा सकता है।

प्रश्न में प्रस्तुत मामले में, सेल में दिखाए जाने वाले सूत्र की वांछित संरचना में निम्नलिखित संरचना होनी चाहिए

if(x < 0, 1 + x, x)

जहां xएक कस्टम फ़ंक्शन हो सकता है।

निम्नलिखित कस्टम फ़ंक्शन का एक सरल उदाहरण है जो JSDOC का उपयोग करता है

/**
* Returns the cell value of the specified row in column A of Sheet1.
* @param {number}   row_number   Input the row number.
* @return The cell value of the specified row in column A of Sheet1.       
* @customfunction
*/
function z(row_number) {
  if(typeof(row_number) != 'number') 
    throw new Error("A row number is required");
  return SpreadsheetApp
           .getActiveSheet()
           .getRange("Sheet1!A"+row_number)
           .getValue();
}

प्रश्न में निर्दिष्ट संरचना के साथ उपरोक्त कस्टम फ़ंक्शन का उपयोग करने वाला सूत्र निम्न तरीके से दिखेगा

=if(z(10) < 0, 1 + z(10), z(10))

row() एक निरंतरता के बजाय उस इनपुट के रूप में उपयोग किया जा सकता है जहां सूत्र को पंक्ति में रखा गया है।

प्रश्न में प्रस्तुत स्पष्ट सूत्र को "अनुकरण" करने के लिए, अंतर्निहित सूत्र को जावास्क्रिप्ट / Google स्क्रिप्ट स्क्रिप्ट फ़ंक्शन द्वारा प्रतिस्थापित किया जाना चाहिए।

संदर्भ


क्या Google शीट के कार्यों (JS के बजाय) का उपयोग करके कस्टम फ़ंक्शन को परिभाषित करना संभव होगा? मुझे इस दिशा में कुछ नहीं मिला इसलिए मुझे इसमें संदेह है।
anderstood

@anderstood: इस समय यह संभव नहीं है। देखें stackoverflow.com/questions/3686061/…
Ruben

3

मैं इस पर कुछ प्रयास कर रहा हूं (मैं मानता हूं कि यह एक बहुत ही उपयोगी सुविधा होगी, विशेष रूप से लंबे फॉर्मूले के लिए। यहां मैंने अभी तक जो लिखा है, वह है:

//array to store variables
var variables = [];

//Wrap a formula with "D_VAR0()" for later use
function D_VAR0(formula) {
  variables.push(formula);
}

//Write "VAR0" to access the 0th element of variables[] (which could be a long formula)
function VAR0() {
  return variables[0];
}

सैद्धांतिक रूप से, यह एक जटिल सेल सूत्र को सरल बनाने के लिए उपयोगी होगा जैसे:

=IF((A2+B2)/B3<16, (A2+B2)/B3, ((A2+B2)/B3)*45)

इस मामले में:

=IF(D_VAR0((A2+B2)/B3)<16, VAR0, VAR0*45)

अतिरिक्त D_VAR#'sऔर VAR#'sकई परिवर्तनशील घोषणाओं और आवश्यकतानुसार कॉल की अनुमति के लिए स्क्रिप्ट में लिखा जा सकता है।

हालांकि, ऐसा लगता है कि D_VAR0लिपटे हुए चर को चर [] सरणी में ठीक से संग्रहीत नहीं करता है।

यदि मैं मैन्युअल रूप से सरणी में एक तत्व दर्ज करता हूं, तो VAR0 इसे एक्सेस करने और इसे सक्रिय सेल में वापस करने में सक्षम है। उदाहरण के लिए:

var variables = ["test"];

//results in the active cell being set to "test"
function VAR0() {
     return variables[0];
}

यह मुझे दो सवालों के साथ छोड़ देता है। यदि निम्नलिखित संभव हैं, तो मुझे लगता है कि कस्टम फ़ंक्शन के माध्यम से अस्थायी चर घोषित करना और कॉल करना संभव है:

  1. यदि कस्टम फ़ंक्शंस सरणी तत्वों तक पहुँच सकते हैं, तो क्या वे तत्वों को एक सरणी में संग्रहीत कर सकते हैं ? यदि हां, तो कैसे?

  2. यदि कस्टम फ़ंक्शंस तत्वों को एक सरणी में संग्रहीत कर सकते हैं, तो क्या वे एक ही सेल में एक ही सन्निहित सूत्र के भीतर सुलभ हैं? या क्या यह संभव है कि एक ही संग्रहीत चर को एक अलग सेल में एक्सेस किया जाए? उदाहरण:

Cell A1 = D_VAR0(sum(3,5))

Cell D4 = VAR0() //would this return 8 in cell D4? It hasn't worked in my testing.

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.