階層型料金割引を計算する
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
コーディング レベル: 初級
所要時間: 10 分
プロジェクト タイプ: カスタム関数
目標
- ソリューションの機能を理解します。
- ソリューション内で Apps Script サービスが何を行うかを理解します。
- スクリプトを設定します。
- スクリプトを実行します。
このソリューションについて
顧客に段階的な料金体系を提供している場合、このカスタム関数を使用すると、価格の割引額を簡単に計算できます。
組み込み関数 SUMPRODUCT
を使用して段階的料金計算を行うこともできますが、SUMPRODUCT
を使用するよりも、このソリューションのカスタム関数を使用する方が複雑ではなく、柔軟性も高くなります。

仕組み
階層型料金モデルとは、購入した数量に応じて商品やサービスの費用が下がるモデルです。
たとえば、0 ~ 500 ドルの範囲で 10% 割引になる階層と、501 ~ 1,000 ドルの範囲で 20% 割引になる階層の 2 つがあるとします。割引を計算する必要がある合計価格が $700 の場合、スクリプトは最初の $500 に 10% を掛け、残りの $200 に 20% を掛けて、合計割引額 $90 を算出します。
指定された合計金額について、スクリプトは階層別料金表で指定された階層をループ処理します。合計価格のうち、階層に該当する部分ごとに、その部分に階層に関連付けられたパーセント値を掛けます。結果は、各階層の計算の合計です。
Apps Script サービス
このソリューションでは、次のサービスを使用します。
前提条件
このサンプルを使用するには、次の前提条件を満たしている必要があります。
- Google アカウント(Google Workspace アカウントの場合、管理者の承認が必要となる可能性があります)。
- インターネットにアクセスできるウェブブラウザ。
スクリプトを設定する
下のボタンをクリックして、階層別料金設定のカスタム関数のスプレッドシートのコピーを作成します。このソリューションの Apps Script プロジェクトは、スプレッドシートに添付されています。
コピーを作成
スクリプトを実行する
- コピーしたスプレッドシートの 16 行目の表には、Software as a Service(SaaS)プロダクトの料金計算の例が示されています。
- 割引額を計算するには、セル
C20
に =tierPrice(C19,$B$3:$D$6)
と入力します。最終的な価格がセル C21
に更新されます。小数点にカンマを使用する地域にお住まいの場合は、代わりに =tierPrice(C19;$B$3:$D$6)
を入力する必要がある場合があります。
コードを確認する
このソリューションの Apps Script コードを確認するには、以下の [ソースコードを表示] をクリックします。
修正
カスタム関数は、必要に応じて何度でも編集できます。以下は、カスタム関数の結果を手動で更新するためのオプションの追加です。
キャッシュに保存されている結果を更新する
組み込み関数とは異なり、Google はパフォーマンスを最適化するためにカスタム関数をキャッシュに保存します。そのため、カスタム関数内で計算対象の値などを変更しても、すぐに更新が強制的に行われるとは限りません。関数結果を手動で更新する手順は次のとおりです。
- [挿入] > [チェックボックス] をクリックして、空のセルにチェックボックスを追加します。
- チェックボックスを含むセルをカスタム関数の追加パラメータとして追加します。たとえば、セル
D20
にチェックボックスを追加する場合は、セル C20
の tierPrice()
関数を =tierPrice(C19,$B$3:$D$6,D20)
に更新します。
- チェックボックスをオンまたはオフにして、カスタム関数の結果を更新します。
寄稿者
このサンプルは、Google デベロッパー エキスパートの協力を得て Google が管理しています。
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-08-31 UTC。
[null,null,["最終更新日 2025-08-31 UTC。"],[[["\u003cp\u003eThis Google Apps Script custom function simplifies tiered pricing calculations in Google Sheets, offering a more straightforward approach than using \u003ccode\u003eSUMPRODUCT\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eThe function calculates discounts by iterating through pricing tiers, applying the corresponding percentage discount to the portion of the total price falling within each tier.\u003c/p\u003e\n"],["\u003cp\u003eTo use the function, you need to provide the total price and a table specifying the pricing tiers, start and end values, and discount percentages.\u003c/p\u003e\n"],["\u003cp\u003eThe script utilizes the Spreadsheet service to access and process data within the sheet.\u003c/p\u003e\n"],["\u003cp\u003eYou can manually refresh the custom function's results by adding a checkbox and including its cell reference as an additional parameter in the function call.\u003c/p\u003e\n"]]],[],null,["# Calculate a tiered pricing discount\n\n**Coding level** : Beginner \n\n**Duration** : 10 minutes \n\n**Project type** : [Custom function](/apps-script/guides/sheets/functions)\n\nObjectives\n----------\n\n- Understand what the solution does.\n- Understand what the Apps Script services do within the solution.\n- Set up the script.\n- Run the script.\n\nAbout this solution\n-------------------\n\nIf you offer a tiered pricing system for your customers, this custom function\nmakes it easier to calculate the discount amounts for your prices.\n\nThough you could use the built-in function `SUMPRODUCT` to make a tiered pricing\ncalculation, using `SUMPRODUCT` is more complex and less flexible than this\nsolution's custom function.\n\n### How it works\n\nA tiered pricing model means that the cost of goods or services goes down\nbased on the quantity purchased.\n\nFor example, imagine you have two tiers, one that ranges from $0-$500 and is\ndiscounted by 10% and one that ranges from $501-$1,000 and is discounted by 20%.\nIf the total price you need to calculate a discount for is $700, the script\nmultiplies\nthe first $500 by 10% and the remaining $200 by 20%, for a total discount of\n$90.\n\nFor a given total price, the script loops through the specified tiers in the\ntier pricing table. For each portion of the total price that falls\nwithin a tier, that portion is multiplied by the tier's associated percent\nvalue. The result is the sum of each tier's calculation.\n\n### Apps Script services\n\nThis solution uses the following service:\n\n- [Spreadsheet service](/apps-script/reference/spreadsheet)--Takes the given value and calculates what portion of the value to multiply by each tier's percent discount.\n\nPrerequisites\n-------------\n\nTo use this sample, you need the following prerequisites:\n\n- A Google Account (Google Workspace accounts might require administrator approval).\n- A web browser with access to the internet.\n\nSet up the script\n-----------------\n\nClick the button below to make a copy of the **Tier pricing custom function**\nspreadsheet. The Apps Script project for\nthis solution is attached to the spreadsheet.\n\n[Make a copy](https://docs.google.com/spreadsheets/d/13X-3pz8P_sfAyNqUJrGe0HdgzKARIMxC6Y6xZDAF7M0/copy)\n\nRun the script\n--------------\n\n1. In your copied spreadsheet, the table at row 16 shows a sample price calculation for a Software as a Service (SaaS) product.\n2. To calculate the discount amount, in cell `C20`, enter `=tierPrice(C19,$B$3:$D$6)`. The final price updates in cell `C21`. If you're in a location that uses decimal commas, you might need to enter `=tierPrice(C19;$B$3:$D$6)` instead.\n\nReview the code\n---------------\n\nTo review the Apps Script code for this solution, click **View source code**\nbelow: \n\n#### View source code\n\n### Code.gs\n\n\u003cbr /\u003e\n\nsolutions/custom-functions/tier-pricing/Code.js \n[View on GitHub](https://github.com/googleworkspace/apps-script-samples/blob/main/solutions/custom-functions/tier-pricing/Code.js) \n\n```javascript\n// To learn how to use this script, refer to the documentation:\n// https://developers.google.com/apps-script/samples/custom-functions/tier-pricing\n\n/*\nCopyright 2022 Google LLC\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Calculates the tiered pricing discount. \n * \n * You must provide a value to calculate its discount. The value can be a string or a reference\n * to a cell that contains a string.\n * You must provide a data table range, for example, $B$4:$D$7, that includes the \n * tier start, end, and percent columns. If your table has headers, don't include\n * the headers in the range.\n * \n * @param {string} value The value to calculate the discount for, which can be a string or a \n * reference to a cell that contains a string.\n * @param {string} table The tier table data range using A1 notation.\n * @return number The total discount amount for the value.\n * @customfunction\n * \n */\nfunction tierPrice(value, table) {\n let total = 0;\n // Creates an array for each row of the table and loops through each array.\n for (let [start, end, percent] of table) {\n // Checks if the value is less than the starting value of the tier. If it is less, the loop stops.\n if (value \u003c start) {\n break;\n }\n // Calculates the portion of the value to be multiplied by the tier's percent value.\n let amount = Math.min(value, end) - start;\n // Multiplies the amount by the tier's percent value and adds the product to the total.\n total += amount * percent;\n }\n return total;\n}\n```\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nModifications\n-------------\n\nYou can edit the custom function as much as you'd like to fit your needs. Below\nis an optional addition to manually refresh custom function results. \n\n#### Refresh cached results\n\n\nUnlike built-in functions, Google caches custom functions to optimize\nperformance. Therefore, if you change something within your custom\nfunction, such as a value that's being calculated, it might not immediately\nforce an update. To refresh the function result manually, take the following\nsteps:\n\n1. Add a checkbox to an empty cell by clicking **Insert** \\\u003e **Checkbox**.\n2. Add the cell that has the checkbox as an extra parameter of the custom function. For example, if you add a checkbox to cell `D20`, update the `tierPrice()` function in cell `C20` to `=tierPrice(C19,$B$3:$D$6,D20)`.\n3. Check or uncheck the checkbox to refresh the custom function results.\n\nContributors\n------------\n\nThis sample is maintained by Google with the help of Google Developer Experts.\n\nNext steps\n----------\n\n- [Custom functions in Google Sheets](/apps-script/guides/sheets/functions)\n- [Extending Google Sheets](/apps-script/guides/sheets)"]]