গুগল পত্রক সূত্রে অস্থায়ী পরিবর্তনগুলি কীভাবে সংরক্ষণ করবেন?


19

আমি গুগল স্প্রেডশীটে এমন একটি সূত্র তৈরি করার চেষ্টা করছি যা দেখতে এইরকম দেখাচ্ছে:

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
@ ফলস, হুম, ভেরিয়েবলগুলি সূত্রের অংশ এবং পার্সেল। অস্থায়ী ভেরিয়েবল হিসাবে হ্যাকিং সেলগুলি একটি নোংরা সমাধানের মতো মনে হয় কারণ কোষগুলি ব্যবসায়ের ডেটা সঞ্চয় করার জন্য হয় , র্যাম নয়।
পেসারিয়ার

1
@ পুনটস, যতক্ষণ না এটি কোষে সংরক্ষণ করা হয় ততক্ষণ এটি কোথায় সঞ্চিত হয় তা বিবেচ্য নয়। ঘরগুলি ব্যবসায়ের ডেটা সংরক্ষণ করার জন্য বোঝানো হয় ।
পেসিয়ার

1
@ প্লান্টস, একটি স্ক্রিপ্ট সমাধান সম্ভবত পরবর্তী সেরা-বিকল্প হতে পারে। যতক্ষণ না কোনও ঘরে কোনও তথ্য উপস্থিত না হয় এটি একটি কার্যকর সমাধান able
পেসারিয়ার

উত্তর:


6

আমি প্রায়শই ব্যবহৃত গণনাগুলির জন্য ভেরিয়েবল হিসাবে ঘর ব্যবহার করে শেষ করি এবং প্রকৃতপক্ষে "নামযুক্ত রেঞ্জ" ব্যবহার করে তাদের নাম দিন। আপনি যে সূত্রটি বিকাশের চেষ্টা করছেন তার কথা ভাবা সহজ করে তোলে। আপনি যদি না চান তবে আপনি এই কক্ষগুলি লুকিয়ে রাখতে পারেন।


যতক্ষণ না আরও ভাল কেউ আসে ততক্ষণ এটিকে নির্বাচিত সমাধান হিসাবে গ্রহণ করবে।
পেসারিয়ার

4

সংক্ষিপ্ত উত্তর

এই সময়ে, গুগল শিটগুলিতে কোনও ঘর বা পরিসর রেফারেন্সের পরিবর্তে সূত্র দ্বারা সংজ্ঞায়িত কোনও ভেরিয়েবলের নাম নির্ধারণ করার বৈশিষ্ট্য নেই। এই ধরণের ভেরিয়েবলগুলির সাথে একটি সূত্র ব্যবহার করার বিকল্পটি হ'ল কাস্টম ফাংশন ব্যবহার করা।

গুগল শিটগুলিতে কাস্টম ফাংশন

কাস্টম ফাংশনগুলি গুগল অ্যাপস স্ক্রিপ্টস বাউন্ড প্রজেক্ট বা গুগল শীট অ্যাড-অনগুলিতে সংজ্ঞায়িত করা হয়। এগুলি কেবল মান ফেরত দিতে ব্যবহৃত হতে পারে, কোনও ইমেল প্রেরণের মতো কাজ স্বয়ংক্রিয় করতে নয় to

একটি কাস্টম ফাংশন একটি জাভাস্ক্রিপ্ট ফাংশনের মতো এবং জেএসডিওসি ব্যবহার করে স্ব -সম্পূর্ণরূপে বিল্ট-ইন ফাংশন যুক্ত করতে এবং পপআপ সূত্র সহায়কটি প্রদর্শন করতে। এছাড়াও একটি কাস্টম ত্রুটি বার্তা অন্তর্ভুক্ত করা যেতে পারে।

প্রশ্নে উপস্থাপিত ক্ষেত্রে, একটি ঘরে প্রদর্শিত সূত্রের কাঙ্ক্ষিত কাঠামোর নিম্নলিখিত কাঠামো থাকা উচিত

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() সূত্রটি যেখানে রাখা হয়েছে সেখানে সারি ইনপুট হিসাবে স্থির পরিবর্তে ব্যবহার করা যেতে পারে।

প্রশ্নের উপস্থাপিত সুস্পষ্ট সূত্রটি "অনুকরণ" করতে, অন্তর্নির্মিত সূত্রগুলি জাভাস্ক্রিপ্ট / গুগল অ্যাপস স্ক্রিপ্ট ফাংশন দ্বারা প্রতিস্থাপন করা উচিত।

তথ্যসূত্র


গুগল শিটের ফাংশন (জেএসের পরিবর্তে) ব্যবহার করে কাস্টম ফাংশনগুলি সংজ্ঞায়িত করা সম্ভব হবে? আমি এই দিকটিতে কিছুই পাইনি তাই আমি সন্দেহ করি।
22-15

@ সমালোচিত: এই মুহুর্তে এটি সম্ভব নয়। স্ট্যাকওভারফ্লো.com
রুবুন

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.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.