{"id":20218,"date":"2025-10-27T11:39:31","date_gmt":"2025-10-27T02:39:31","guid":{"rendered":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/?p=20218"},"modified":"2025-10-27T11:39:31","modified_gmt":"2025-10-27T02:39:31","slug":"%e3%82%b9%e3%83%97%e3%83%ac%e3%83%83%e3%83%89%e3%82%b7%e3%83%bc%e3%83%88%e3%81%a7%e8%ab%8b%e6%b1%82%e6%9b%b8%e3%82%92%e5%8a%b9%e7%8e%87%e7%9a%84%e3%81%ab%e4%bd%9c%e6%88%90%e3%83%bb%e7%ae%a1%e7%90%86","status":"publish","type":"post","link":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/20218\/","title":{"rendered":"\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u8acb\u6c42\u66f8\u3092\u52b9\u7387\u7684\u306b\u4f5c\u6210\u30fb\u7ba1\u7406\u3059\u308b\u306b\u306f\uff1f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u30c7\u30b6\u30a4\u30f3\u6539\u5584\u3001\u5171\u6709\u65b9\u6cd5\u307e\u3067\u5fb9\u5e95\u89e3\u8aac"},"content":{"rendered":"<p>Google\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u4f7f\u3048\u3070\u3001\u9ad8\u4fa1\u306a\u5c02\u7528\u30bd\u30d5\u30c8\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u7121\u6599\u3067\u672c\u683c\u7684\u306a<a href=\"https:\/\/biz.moneyforward.com\/invoice\/\" data-internallinksmanager029f6b8e52c=\"459\" title=\"\u8acb\u6c42\u66f8\">\u8acb\u6c42\u66f8<\/a>\u3092\u4f5c\u6210\u30fb\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002\u81ea\u52d5\u8a08\u7b97\u3084\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u624b\u4f5c\u696d\u306b\u3088\u308b\u30df\u30b9\u3092\u6e1b\u3089\u3057\u3001\u8acb\u6c42\u696d\u52d9\u306b\u304b\u304b\u308b\u6642\u9593\u3092\u5927\u5e45\u306b\u77ed\u7e2e\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002\u8acb\u6c42\u66f8\u306e\u4f5c\u6210\u306b\u306f\u300c<a href=\"https:\/\/biz.moneyforward.com\/invoice\/basic\/48071\/\" data-internallinksmanager029f6b8e52c=\"569\" title=\"\u30a4\u30f3\u30dc\u30a4\u30b9\u5236\u5ea6\">\u30a4\u30f3\u30dc\u30a4\u30b9\u5236\u5ea6<\/a>\u300d\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u306e\u5fc5\u9808\u9805\u76ee\u3084\u3001\u9867\u5ba2\u60c5\u5831\u3092\u5b89\u5168\u306b\u6271\u3046\u305f\u3081\u306e\u6b63\u3057\u3044\u77e5\u8b58\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u57fa\u672c\u7684\u306a\u8acb\u6c42\u66f8\u306e\u4f5c\u308a\u65b9\u304b\u3089\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u6d3b\u7528\u3001\u5b89\u5168\u306a\u7ba1\u7406\u30fb\u5171\u6709\u65b9\u6cd5\u307e\u3067\u3001\u3059\u3050\u306b\u5b9f\u8df5\u3067\u304d\u308b\u77e5\u8b58\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<div id=\"post-below-intro\"><\/div><h2>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u8acb\u6c42\u66f8\u3092\u7c21\u5358\u306b\u4f5c\u308b\u65b9\u6cd5\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u8acb\u6c42\u66f8\u3092\u4f5c\u6210\u3059\u308b\u57fa\u672c\u7684\u306a\u65b9\u6cd5\u306f\u3001\u5fc5\u8981\u9805\u76ee\u306e\u914d\u7f6e\u3001\u8a08\u7b97\u5f0f\u306e\u8a2d\u5b9a\u3001\u66f8\u5f0f\u8a2d\u5b9a\u3001\u5370\u5237\u8a2d\u5b9a\u3068\u3044\u30464\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u69cb\u6210\u3055\u308c\u300130\u5206\u7a0b\u5ea6\u3067\u672c\u683c\u7684\u306a\u8acb\u6c42\u66f8\u3092\u5b8c\u6210\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u521d\u3081\u3066\u306e\u65b9\u3067\u3082\u3001\u6bb5\u968e\u7684\u306b\u9032\u3081\u308b\u3053\u3068\u3067\u78ba\u5b9f\u306b\u8acb\u6c42\u66f8\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>\u8acb\u6c42\u66f8\u306b\u5fc5\u8981\u306a\u57fa\u672c\u9805\u76ee<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u4f5c\u6210\u306f\u3001\u6cd5\u7684\u8981\u4ef6\u3092\u6e80\u305f\u3059\u5fc5\u8981\u9805\u76ee\u3092\u9069\u5207\u306b\u914d\u7f6e\u3059\u308b\u3053\u3068\u3067\u3059\u3002<\/b><\/span>\u307e\u305a\u3001A1\u30bb\u30eb\u304b\u3089\u9806\u756a\u306b\u4f1a\u793e\u60c5\u5831\u30a8\u30ea\u30a2\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u767a\u884c\u8005\uff08\u81ea\u793e\uff09\u306e\u4f1a\u793e\u540d\u3001\u4f4f\u6240\u3001\u96fb\u8a71\u756a\u53f7\u3001\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u4e0a\u90e8\u306b\u914d\u7f6e\u3057\u3001\u305d\u306e\u4e0b\u306b\u8acb\u6c42\u5148\u306e\u4f1a\u793e\u540d\u3068\u300c\u5fa1\u4e2d\u300d\u3092\u5927\u304d\u304f\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u8acb\u6c42\u66f8\u306e\u57fa\u672c\u60c5\u5831\u3068\u3057\u3066\u3001\u8acb\u6c42\u66f8\u756a\u53f7\u3001\u767a\u884c\u65e5\u3001\u652f\u6255\u671f\u9650\u3092\u53f3\u4e0a\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u5f8c\u304b\u3089\u691c\u7d22\u3084\u7ba1\u7406\u3092\u3059\u308b\u969b\u306b\u91cd\u8981\u306a\u8981\u7d20\u3068\u306a\u308b\u305f\u3081\u3001\u660e\u78ba\u306b\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u5927\u5207\u3067\u3059\u3002\u8acb\u6c42\u91d1\u984d\u306e\u5408\u8a08\u306f\u3001\u76ee\u7acb\u3064\u3088\u3046\u306b\u5927\u304d\u306a\u30d5\u30a9\u30f3\u30c8\u3067\u4e2d\u592e\u4ed8\u8fd1\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002<\/p>\n<p>\u660e\u7d30\u90e8\u5206\u306f\u8868\u5f62\u5f0f\u3067\u4f5c\u6210\u3057\u3001\u9805\u76ee\u540d\u3001\u6570\u91cf\u3001\u5358\u4fa1\u3001\u91d1\u984d\u306e\u5217\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u6700\u4e0b\u90e8\u306b\u306f\u5c0f\u8a08\u3001<a href=\"https:\/\/biz.moneyforward.com\/accounting\/basic\/52041\/\" data-internallinksmanager029f6b8e52c=\"572\" title=\"\u6d88\u8cbb\u7a0e\">\u6d88\u8cbb\u7a0e<\/a>\u3001\u5408\u8a08\u91d1\u984d\u3092\u914d\u7f6e\u3057\u3001\u632f\u8fbc\u5148\u60c5\u5831\u3084\u5099\u8003\u6b04\u3082\u5fd8\u308c\u305a\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<h3>\u81ea\u52d5\u8a08\u7b97\u5f0f\u306e\u8a2d\u5b9a\u3068\u5b9f\u88c5<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u52b9\u7387\u5316\u306e\u9375\u306f\u3001\u81ea\u52d5\u8a08\u7b97\u5f0f\u306e\u9069\u5207\u306a\u8a2d\u5b9a\u306b\u3042\u308a\u307e\u3059\u3002<\/b><\/span>\u307e\u305a\u3001\u5404\u660e\u7d30\u884c\u306e\u91d1\u984d\u8a08\u7b97\u304b\u3089\u59cb\u3081\u307e\u3059\u3002<\/p>\n<p>\u57fa\u672c\u7684\u306a\u8a08\u7b97\u5f0f\u306e\u8a2d\u5b9a\uff1a<\/p>\n<p>\u91d1\u984d = \u6570\u91cf \u00d7 \u5358\u4fa1<\/p>\n<p>=C10*D10\u00a0 \/\/ C10:\u6570\u91cf\u3001D10:\u5358\u4fa1<\/p>\n<p>\u5c0f\u8a08\u306e\u8a08\u7b97\uff1a<\/p>\n<p>=SUM(E10:E20)\u00a0 \/\/ E\u5217\u306e\u660e\u7d30\u91d1\u984d\u3092\u5408\u8a08<\/p>\n<p>\u6d88\u8cbb\u7a0e\u306e\u8a08\u7b97\uff0810%\u306e\u5834\u5408\uff09\uff1a<\/p>\n<p>=E21*0.1\u00a0 \/\/ E21:\u5c0f\u8a08<\/p>\n<p>\u307e\u305f\u306f<\/p>\n<p>=ROUND(E21*0.1, 0)\u00a0 \/\/ \u7aef\u6570\u3092\u56db\u6368\u4e94\u5165<\/p>\n<p>\u5408\u8a08\u91d1\u984d\u306e\u8a08\u7b97\uff1a<\/p>\n<p>=E21+E22\u00a0 \/\/ E21:\u5c0f\u8a08\u3001E22:\u6d88\u8cbb\u7a0e<\/p>\n<p>\u3088\u308a\u9ad8\u5ea6\u306a\u5b9f\u88c5\u3068\u3057\u3066\u3001\u7a0e\u7387\u3092\u5225\u30bb\u30eb\u306b\u8a2d\u5b9a\u3057\u3066\u53c2\u7167\u3059\u308b\u65b9\u6cd5\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u6d88\u8cbb\u7a0e\u7387\u30bb\u30eb\uff08F1\uff09: 10%<\/p>\n<p>\u6d88\u8cbb\u7a0e\u8a08\u7b97: =E21*$F$1\u00a0 \/\/ \u7d76\u5bfe\u53c2\u7167\u3067\u7a0e\u7387\u3092\u56fa\u5b9a<\/p>\n<h3>\u898b\u3084\u3059\u3044\u66f8\u5f0f\u8a2d\u5b9a\u306e\u9069\u7528<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u4fe1\u983c\u6027\u3068\u8aad\u307f\u3084\u3059\u3055\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u3001\u9069\u5207\u306a\u66f8\u5f0f\u8a2d\u5b9a\u3092\u9069\u7528\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u4f1a\u793e\u540d\u3068\u8acb\u6c42\u5148\u306f\u3001\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u309216\u301c18\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a\u3057\u3001\u592a\u5b57\u3067\u5f37\u8abf\u3057\u307e\u3059\u3002\u8acb\u6c42\u91d1\u984d\u306e\u5408\u8a08\u306f\u3001\u3055\u3089\u306b\u5927\u304d\u306a20\u301c24\u30dd\u30a4\u30f3\u30c8\u3067\u8868\u793a\u3057\u3001\u80cc\u666f\u8272\u3092\u8584\u3044\u9752\u3084\u9ec4\u8272\u306b\u3057\u3066\u76ee\u7acb\u305f\u305b\u307e\u3059\u3002<\/p>\n<p>\u660e\u7d30\u8868\u306e\u898b\u51fa\u3057\u884c\u306f\u3001\u80cc\u666f\u8272\u3092\u6fc3\u3044\u3081\u306e\u8272\uff08\u4f8b\uff1a\u6fc3\u3044\u9752\uff09\u306b\u3057\u3066\u3001\u6587\u5b57\u8272\u3092\u767d\u306b\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u90e8\u5206\u3068\u306e\u533a\u5225\u3092\u660e\u78ba\u306b\u3057\u307e\u3059\u3002\u7f6b\u7dda\u306f\u3001\u5916\u67a0\u3092\u592a\u7dda\u3001\u5185\u5074\u3092\u7d30\u7dda\u306b\u3057\u3066\u3001\u8996\u899a\u7684\u306a\u968e\u5c64\u3092\u4f5c\u308a\u307e\u3059\u3002<\/p>\n<p>\u6570\u5024\u306e\u8868\u793a\u5f62\u5f0f\u3082\u91cd\u8981\u3067\u3059\u3002<\/p>\n<p>\u91d1\u984d\u5217: \u00a5#,##0 \u5f62\u5f0f<\/p>\n<p>\u30d1\u30fc\u30bb\u30f3\u30c8: 0.0%<\/p>\n<p>\u65e5\u4ed8: yyyy\u5e74mm\u6708dd\u65e5<\/p>\n<h3>\u5370\u5237\u3068PDF\u51fa\u529b\u306e\u8a2d\u5b9a<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u3092\u5b9f\u969b\u306b\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u5370\u5237\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002<\/b><\/span>\u307e\u305a\u3001\u300c\u30d5\u30a1\u30a4\u30eb\u300d\u2192\u300c\u5370\u5237\u300d\u3092\u9078\u629e\u3057\u3001\u5370\u5237\u7bc4\u56f2\u3092\u8acb\u6c42\u66f8\u306e\u5fc5\u8981\u90e8\u5206\u306e\u307f\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u5370\u5237\u8a2d\u5b9a\u306e\u8981\u70b9<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u7528\u7d19\u30b5\u30a4\u30ba\uff1aA4\u7e26\u5411\u304d<\/li>\n<li>\u4f59\u767d\uff1a\u4e0a\u4e0b\u5de6\u53f3\u540415mm\u7a0b\u5ea6<\/li>\n<li>\u62e1\u5927\u7e2e\u5c0f\uff1a\u5e45\u306b\u5408\u308f\u305b\u308b<\/li>\n<li>\u30b0\u30ea\u30c3\u30c9\u7dda\uff1a\u975e\u8868\u793a<\/li>\n<li>\u30d8\u30c3\u30c0\u30fc\/\u30d5\u30c3\u30bf\u30fc\uff1a\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8a2d\u5b9a<\/li>\n<\/ul>\n<\/div>\n<p>PDF\u51fa\u529b\u6642\u306f\u3001\u300c\u30d5\u30a1\u30a4\u30eb\u300d\u2192\u300c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u300d\u2192\u300cPDF\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u3053\u306e\u969b\u3001\u73fe\u5728\u306e\u30b7\u30fc\u30c8\u306e\u307f\u3092\u9078\u629e\u3057\u3001\u4e0d\u8981\u306a\u30b7\u30fc\u30c8\u304c\u542b\u307e\u308c\u306a\u3044\u3088\u3046\u306b\u6ce8\u610f\u3057\u307e\u3059\u3002<\/p>\n<h3>\u8acb\u6c42\u66f8\u756a\u53f7\u306e\u81ea\u52d5\u63a1\u756a\u30b7\u30b9\u30c6\u30e0<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u52b9\u7387\u7684\u306a\u8acb\u6c42\u66f8\u7ba1\u7406\u306e\u305f\u3081\u3001\u81ea\u52d5\u63a1\u756a\u30b7\u30b9\u30c6\u30e0\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>function generateInvoiceNumber() {<\/p>\n<p>const sheet = SpreadsheetApp.getActiveSheet();<\/p>\n<p>const lastInvoiceCell = sheet.getRange(&#8220;B2&#8221;); \/\/ \u8acb\u6c42\u66f8\u756a\u53f7\u30bb\u30eb<\/p>\n<p>\/\/ \u73fe\u5728\u306e\u65e5\u4ed8\u3092\u53d6\u5f97<\/p>\n<p>const today = new Date();<\/p>\n<p>const year = today.getFullYear();<\/p>\n<p>const month = String(today.getMonth() + 1).padStart(2, &#8216;0&#8217;);<\/p>\n<p>\/\/ \u9023\u756a\u3092\u53d6\u5f97\uff08\u5225\u30b7\u30fc\u30c8\u3067\u7ba1\u7406\uff09<\/p>\n<p>const configSheet = SpreadsheetApp.getActiveSpreadsheet()<\/p>\n<p>.getSheetByName(&#8220;\u8a2d\u5b9a&#8221;);<\/p>\n<p>let currentNumber = configSheet.getRange(&#8220;B1&#8221;).getValue() || 0;<\/p>\n<p>currentNumber++;<\/p>\n<p>\/\/ \u8acb\u6c42\u66f8\u756a\u53f7\u3092\u751f\u6210\uff08\u4f8b\uff1a2024-04-001\uff09<\/p>\n<p>const invoiceNumber = `${year}-${month}-${String(currentNumber).padStart(3, &#8216;0&#8217;)}`;<\/p>\n<p>lastInvoiceCell.setValue(invoiceNumber);<\/p>\n<p>configSheet.getRange(&#8220;B1&#8221;).setValue(currentNumber);}<\/p>\n<h2>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u8acb\u6c42\u66f8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u6d3b\u7528\u3059\u308b\u306b\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u6d3b\u7528\u306e\u9078\u629e\u80a2\u3068\u3057\u3066\u3001\u516c\u5f0f\u306e\u6c4e\u7528\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u57fa\u306b\u3001\u81ea\u793e\u3067\u696d\u754c\u5225\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u308a\u3001Apps Script\u3067\u81ea\u52d5\u5316\u6a5f\u80fd\u3092\u4ed8\u4e0e\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002<\/b><\/span>\u5916\u90e8\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u914d\u5e03\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u53d6\u308a\u5165\u308c\u308b\u30b1\u30fc\u30b9\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4f5c\u6210\u6642\u9593\u3092\u5927\u5e45\u306b\u77ed\u7e2e\u3057\u3001\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u306a\u8acb\u6c42\u66f8\u3092\u7c21\u5358\u306b\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>Google\u516c\u5f0f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30ae\u30e3\u30e9\u30ea\u30fc\u306e\u6d3b\u7528<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>Google\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306b\u306f\u3001\u516c\u5f0f\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30ae\u30e3\u30e9\u30ea\u30fc\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/b><\/span>\u65b0\u898f\u4f5c\u6210\u6642\u306b\u300c\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30ae\u30e3\u30e9\u30ea\u30fc\u300d\u304b\u3089\u300c\u8acb\u6c42\u66f8\u300d\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u3059\u3050\u306b\u4f7f\u3048\u308b\u57fa\u672c\u7684\u306a\u8acb\u6c42\u66f8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u516c\u5f0f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u30b7\u30f3\u30d7\u30eb\u3067\u6c4e\u7528\u7684\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u65e5\u672c\u306e\u5546\u6163\u884c\u3084\u30a4\u30f3\u30dc\u30a4\u30b9\u5236\u5ea6\u306e\u5fc5\u9808\u9805\u76ee\uff08\u767b\u9332\u756a\u53f7\u3001\u7a0e\u7387\u533a\u5206\u5225\u306e\u5c0f\u8a08\u30fb\u7a0e\u984d\u3001\u8cb7\u624b\u540d \u7b49\uff09\u306b\u306f\u672a\u5bfe\u5fdc\u306e\u3053\u3068\u304c\u3042\u308b\u305f\u3081\u3001\u7528\u9014\u306b\u5408\u308f\u305b\u3066\u9805\u76ee\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u521d\u5fc3\u8005\u3067\u3082\u57fa\u790e\u69cb\u6210\u306e\u51fa\u767a\u70b9\u3068\u3057\u3066\u4f7f\u3044\u3084\u3059\u304f\u3001\u30ed\u30b4\u3084\u914d\u8272\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306f\u5bb9\u6613\u3067\u3059\u3002\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3082\u5bb9\u6613\u3067\u3001\u4f1a\u793e\u30ed\u30b4\u306e\u8ffd\u52a0\u3084\u8272\u306e\u5909\u66f4\u3082\u7c21\u5358\u306b\u884c\u3048\u307e\u3059\u3002<\/p>\n<p>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u958b\u3044\u305f\u3089\u3001\u307e\u305a\u300c\u30d5\u30a1\u30a4\u30eb\u300d\u2192\u300c\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\u300d\u3092\u9078\u629e\u3057\u3066\u3001\u81ea\u5206\u7528\u306e\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5143\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4fdd\u6301\u3057\u306a\u304c\u3089\u3001\u81ea\u7531\u306b\u7de8\u96c6\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h3>\u696d\u754c\u5225\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u696d\u754c\u306b\u3088\u3063\u3066\u8acb\u6c42\u66f8\u306b\u5fc5\u8981\u306a\u9805\u76ee\u306f\u7570\u306a\u308a\u307e\u3059\u3002<\/b><\/span>\u305d\u308c\u305e\u308c\u306e\u696d\u754c\u306b\u7279\u5316\u3057\u305f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u52b9\u7387\u7684\u306a\u8acb\u6c42\u696d\u52d9\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>IT\u30fbWeb\u5236\u4f5c\u696d\u754c\u5411\u3051\uff1a<\/p>\n<p>function createITInvoiceTemplate() {<\/p>\n<p>const sheet = SpreadsheetApp.getActiveSheet();<\/p>\n<p>\/\/ \u898b\u51fa\u3057<\/p>\n<p>sheet.getRange(&#8220;A10:E10&#8221;).setValues([[&#8220;\u9805\u76ee&#8221;,&#8221;\u4f5c\u696d\u5185\u5bb9&#8221;,&#8221;\u5de5\u6570(h)&#8221;,&#8221;\u5358\u4fa1&#8221;,&#8221;\u91d1\u984d&#8221;]]);<\/p>\n<p>\/\/ \u30c7\u30fc\u30bf\uff08\u6570\u5024\u3067\u4fdd\u6301\uff09<\/p>\n<p>const rows = [<\/p>\n<p>[&#8220;\u8981\u4ef6\u5b9a\u7fa9&#8221;,&#8221;&#8221;, 40, 10000, &#8220;=C11*D11&#8221;],<\/p>\n<p>[&#8220;\u30c7\u30b6\u30a4\u30f3\u4f5c\u6210&#8221;,&#8221;&#8221;, 80,\u00a0 8000, &#8220;=C12*D12&#8221;],<\/p>\n<p>[&#8220;\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0&#8221;,&#8221;&#8221;, 120, 7000, &#8220;=C13*D13&#8221;],<\/p>\n<p>[&#8220;\u30c6\u30b9\u30c8\u30fb\u691c\u8a3c&#8221;,&#8221;&#8221;, 40,\u00a0 6000, &#8220;=C14*D14&#8221;]];<\/p>\n<p>sheet.getRange(11,1,rows.length,rows[0].length).setValues(rows);<\/p>\n<p>\/\/ \u8868\u793a\u5f62\u5f0f\uff08\u65e5\u672c\u5186\/\u5343\u533a\u5207\u308a\u3001\u5de5\u6570\u306f\u6574\u6570\uff09<\/p>\n<p>sheet.getRange(&#8220;C11:C14&#8221;).setNumberFormat(&#8220;0&#8221;); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u5de5\u6570<\/p>\n<p>sheet.getRange(&#8220;D11:E14&#8221;).setNumberFormat(&#8216;[$\u00a5-ja-JP]#,##0&#8217;); \u00a0 \/\/ \u5358\u4fa1\u30fb\u91d1\u984d}<\/p>\n<p>\u203b \u30a4\u30f3\u30dc\u30a4\u30b9\u5bfe\u5fdc\u304c\u5fc5\u8981\u306a\u3089\u7a0e\u7387\u5217\uff08\u4f8b\uff1aF\u5217\uff09\u3092\u8ffd\u52a0\u3057\u3001\u7a0e\u7387\u5225\u5c0f\u8a08\/\u7a0e\u984d\u3092\u5225\u67a0\u3067\u7b97\u51fa\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u524d\u7a3f\u306eSUMIF\u4f8b\u3092\u53c2\u7167\uff09\u3002<\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u5efa\u8a2d\u696d\u5411\u3051\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u7279\u5fb4<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u5de5\u4e8b\u540d\u79f0\u6b04\u306e\u8ffd\u52a0<\/li>\n<li><a href=\"https:\/\/biz.moneyforward.com\/tax_return\/basic\/53246\/\" data-internallinksmanager029f6b8e52c=\"462\" title=\"\u6750\u6599\u8cbb\">\u6750\u6599\u8cbb<\/a>\u3068<a href=\"https:\/\/biz.moneyforward.com\/accounting\/basic\/45329\/\" data-internallinksmanager029f6b8e52c=\"480\" title=\"\u52b4\u52d9\u8cbb\">\u52b4\u52d9\u8cbb<\/a>\u306e\u5206\u96e2<\/li>\n<li>\u8af8\u7d4c\u8cbb\u306e\u8a73\u7d30\u9805\u76ee<\/li>\n<li>\u5de5\u671f\u306e\u8a18\u8f09\u6b04<\/li>\n<li>\u4fdd\u8a3c\u671f\u9593\u306e\u660e\u8a18<\/li>\n<\/ul>\n<\/div>\n<h3>\u591a\u8a00\u8a9e\u5bfe\u5fdc\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u30b0\u30ed\u30fc\u30d0\u30eb\u30d3\u30b8\u30cd\u30b9\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u3001\u591a\u8a00\u8a9e\u5207\u308a\u66ff\u3048\u53ef\u80fd\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u591a\u8a00\u8a9e\u5bfe\u5fdc\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n<p>function switchLanguage(lang) {<\/p>\n<p>const sheet = SpreadsheetApp.getActiveSheet();<\/p>\n<p>const translations = {<\/p>\n<p>ja:{invoice:&#8221;\u8acb\u6c42\u66f8&#8221;,date:&#8221;\u767a\u884c\u65e5&#8221;,due_date:&#8221;\u652f\u6255\u671f\u9650&#8221;,subtotal:&#8221;\u5c0f\u8a08&#8221;,tax:&#8221;\u6d88\u8cbb\u7a0e&#8221;,total:&#8221;\u5408\u8a08&#8221;, locale:&#8221;ja-JP&#8221;, currency:'[$\u00a5-ja-JP]#,##0&#8242;},<\/p>\n<p>en:{invoice:&#8221;INVOICE&#8221;,date:&#8221;Date&#8221;,due_date:&#8221;Due Date&#8221;,subtotal:&#8221;Subtotal&#8221;,tax:&#8221;Tax&#8221;,total:&#8221;Total&#8221;, locale:&#8221;en-US&#8221;, currency:&#8217;$#,##0&#8242;}};<\/p>\n<p>const t = translations[lang] || translations[&#8220;ja&#8221;]; \/\/ \u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af<\/p>\n<p>sheet.getRange(&#8220;A1&#8221;).setValue(t.invoice);<\/p>\n<p>sheet.getRange(&#8220;F3&#8221;).setValue(t.date);<\/p>\n<p>sheet.getRange(&#8220;F4&#8221;).setValue(t.due_date);<\/p>\n<p>\/\/ \u91d1\u984d\u5217\u306e\u8868\u793a\u5f62\u5f0f\/\u65e5\u4ed8\u5f62\u5f0f\u3082\u5207\u66ff<\/p>\n<p>sheet.getRange(&#8220;E11:E1000&#8221;).setNumberFormat(t.currency);<\/p>\n<p>sheet.getRange(&#8220;B4&#8221;).setNumberFormat(t.locale === &#8220;ja-JP&#8221; ? &#8220;yyyy\u5e74m\u6708d\u65e5&#8221; : &#8220;yyyy-mm-dd&#8221;);}<\/p>\n<p>\u203b \u30a4\u30f3\u30dc\u30a4\u30b9\u8981\u4ef6\uff08\u767b\u9332\u756a\u53f7\u3001\u7a0e\u7387\u5225\u5185\u8a33\u3001\u8cb7\u624b\u540d\u306a\u3069\uff09\u306f\u8a00\u8a9e\u5207\u66ff\u3067\u3082\u524a\u3089\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3>\u81ea\u52d5\u5316\u6a5f\u80fd\u4ed8\u304d\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u9ad8\u5ea6\u306a\u81ea\u52d5\u5316\u6a5f\u80fd\u3092\u7d44\u307f\u8fbc\u3093\u3060\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u3001\u8acb\u6c42\u696d\u52d9\u3092\u3055\u3089\u306b\u52b9\u7387\u5316\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u81ea\u52d5\u5316\u6a5f\u80fd\u306e\u5b9f\u88c5\u9805\u76ee<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u9867\u5ba2\u60c5\u5831\u306e\u81ea\u52d5\u5165\u529b\uff08\u9867\u5ba2\u30de\u30b9\u30bf\u30fc\u304b\u3089\u53d6\u5f97\uff09<\/li>\n<li>\u5546\u54c1\u30fb\u30b5\u30fc\u30d3\u30b9\u306e\u81ea\u52d5\u88dc\u5b8c<\/li>\n<li>\u7a0e\u7387\u306e\u81ea\u52d5\u66f4\u65b0<\/li>\n<li>\u652f\u6255\u671f\u9650\u306e\u81ea\u52d5\u8a08\u7b97<\/li>\n<li>\u8acb\u6c42\u66f8\u306e\u81ea\u52d5\u4fdd\u5b58\u3068\u30d0\u30c3\u30af\u30a2\u30c3\u30d7<\/li>\n<\/ul>\n<\/div>\n<p>\u9867\u5ba2\u60c5\u5831\u81ea\u52d5\u5165\u529b\u306e\u5b9f\u88c5\uff1a<\/p>\n<p>\/**<\/p>\n<p>* \u9867\u5ba2\u30b3\u30fc\u30c9(B5)\u304b\u3089\u9867\u5ba2\u30de\u30b9\u30bf\u30fc\u3092\u5f15\u304d\u5f53\u3066\u3066 B6:B8 \u306b\u4e00\u62ec\u53cd\u6620<\/p>\n<p>* \u524d\u63d0: \u9867\u5ba2\u30de\u30b9\u30bf\u30fc\u306f A\u5217=\u9867\u5ba2\u30b3\u30fc\u30c9\/B=\u4f1a\u793e\u540d\/C=\u4f4f\u6240\/D=\u62c5\u5f53\u8005 \u306e\u60f3\u5b9a<\/p>\n<p>* \u4f8b\u5916\/\u672a\u4e00\u81f4\/\u578b\u5dee\/\u7a7a\u767d\u306b\u5f37\u3044\u5b9f\u88c5<\/p>\n<p>*\/<\/p>\n<p>function autoFillCustomerInfo() {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const invoice = ss.getActiveSheet();<\/p>\n<p>const master = ss.getSheetByName(&#8220;\u9867\u5ba2\u30de\u30b9\u30bf\u30fc&#8221;);<\/p>\n<p>if (!master) {<\/p>\n<p>SpreadsheetApp.getUi().alert(&#8216;\u300c\u9867\u5ba2\u30de\u30b9\u30bf\u30fc\u300d\u30b7\u30fc\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002&#8217;);<\/p>\n<p>return;}<\/p>\n<p>const codeRaw = invoice.getRange(&#8220;B5&#8221;).getValue();<\/p>\n<p>const code = String(codeRaw).trim(); \u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u578b\u5dee\u30fb\u7a7a\u767d\u5438\u53ce<\/p>\n<p>if (!code) {<\/p>\n<p>SpreadsheetApp.getUi().alert(&#8216;\u9867\u5ba2\u30b3\u30fc\u30c9(B5)\u304c\u672a\u5165\u529b\u3067\u3059\u3002&#8217;);<\/p>\n<p>return;}<\/p>\n<p>const lastRow = master.getLastRow();<\/p>\n<p>if (lastRow &lt; 2) {<\/p>\n<p>SpreadsheetApp.getUi().alert(&#8216;\u9867\u5ba2\u30de\u30b9\u30bf\u30fc\u306b\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002&#8217;);<\/p>\n<p>return;}\u00a0\u00a0const values = master.getRange(2, 1, lastRow &#8211; 2 + 1, 4).getValues(); \/\/ A:D<\/p>\n<p>\/\/ \u9ad8\u901f\u691c\u7d22\u306e\u305f\u3081\u30de\u30c3\u30d7\u5316<\/p>\n<p>const map = new Map(values.map(r =&gt; [String(r[0]).trim(), r]));<\/p>\n<p>const hit = map.get(code);<\/p>\n<p>if (!hit) {<\/p>\n<p>\/\/ \u672a\u4e00\u81f4\u6642\u306f\u30af\u30ea\u30a2 &amp; \u901a\u77e5<\/p>\n<p>invoice.getRange(&#8220;B6:B8&#8221;).clearContent();<\/p>\n<p>SpreadsheetApp.getUi().alert(`\u9867\u5ba2\u30b3\u30fc\u30c9\u300c${code}\u300d\u306f\u9867\u5ba2\u30de\u30b9\u30bf\u30fc\u306b\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002`);<\/p>\n<p>return;}<\/p>\n<p>\/\/ \u307e\u3068\u3081\u3066\u66f8\u304d\u8fbc\u307f\uff08B6:\u4f1a\u793e\u540d, B7:\u4f4f\u6240, B8:\u62c5\u5f53\u8005\uff09<\/p>\n<p>invoice.getRange(&#8220;B6:B8&#8221;).setValues([[hit[1]],[hit[2]],[hit[3]]]);}<\/p>\n<p>\u203b \u4f75\u305b\u3066\u300c\u9867\u5ba2\u30b3\u30fc\u30c9\u300d\u5165\u529b\u30bb\u30eb(B5)\u306b\u30c7\u30fc\u30bf\u691c\u8a3c\uff08\u30ea\u30b9\u30c8\/\u4e00\u610f\uff09\u3092\u8a2d\u5b9a\u3057\u3001\u30de\u30b9\u30bf\u30fc\u5074A\u5217\u306b\u91cd\u8907\u30c1\u30a7\u30c3\u30af\u3092\u5c0e\u5165\u3059\u308b\u3068\u5b9f\u904b\u7528\u304c\u5b89\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<h3>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4fdd\u5b88\u3068\u66f4\u65b0<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u9577\u671f\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u4fdd\u5b88\u7ba1\u7406\u65b9\u6cd5\u3092\u78ba\u7acb\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u5b9f\u88c5\uff1a<\/p>\n<p>\/**<\/p>\n<p>* \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u65e5\u4ed8\u6642\u523b\u4ed8\u304d\u3067\u5b89\u5168\u306b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u3001\u5909\u66f4\u5c65\u6b74\u306b\u8ffd\u8a18<\/p>\n<p>* \u5fc5\u8981: BACKUP_FOLDER_ID \u3092\u5b9f\u969b\u306e\u30d5\u30a9\u30eb\u30c0ID\u306b\u5dee\u3057\u66ff\u3048<\/p>\n<p>*\/<\/p>\n<p>function saveTemplateVersion() {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const lock = LockService.getDocumentLock();<\/p>\n<p>lock.waitLock(30000); \/\/ \u7af6\u5408\u56de\u907f<\/p>\n<p>try {<\/p>\n<p>const FOLDER_ID = &#8216;&lt;&lt;\u5b9f\u969b\u306e\u30d5\u30a9\u30eb\u30c0ID&gt;&gt;&#8217;; \/\/ \u2190\u5dee\u3057\u66ff\u3048\u5fc5\u9808<\/p>\n<p>let folder;<\/p>\n<p>try {<\/p>\n<p>folder = DriveApp.getFolderById(FOLDER_ID);<\/p>\n<p>} catch (e) {<\/p>\n<p>throw new Error(&#8216;\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5148\u30d5\u30a9\u30eb\u30c0ID\u304c\u4e0d\u6b63\u3067\u3059\u3002&#8217;);}<\/p>\n<p>\/\/ \u65e5\u672c\u6642\u9593\u3067\u30d0\u30fc\u30b8\u30e7\u30f3\u540d\u751f\u6210<\/p>\n<p>const tz = ss.getSpreadsheetTimeZone() || &#8216;Asia\/Tokyo&#8217;;<\/p>\n<p>const ts = Utilities.formatDate(new Date(), tz, &#8216;yyyyMMdd_HHmmss&#8217;);<\/p>\n<p>const backupName = `\u8acb\u6c42\u66f8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8_v${ts}`;<\/p>\n<p>\/\/ \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u4f5c\u6210\uff08\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u5168\u4f53\uff09<\/p>\n<p>const copy = ss.makeCopy(backupName, folder);<\/p>\n<p>\/\/ \u5c65\u6b74\u30b7\u30fc\u30c8\u78ba\u4fdd\uff08\u306a\u3051\u308c\u3070\u4f5c\u6210\uff09<\/p>\n<p>let log = ss.getSheetByName(&#8216;\u5909\u66f4\u5c65\u6b74&#8217;);<\/p>\n<p>if (!log) {<\/p>\n<p>log = ss.insertSheet(&#8216;\u5909\u66f4\u5c65\u6b74&#8217;);<\/p>\n<p>log.appendRow([&#8216;\u65e5\u6642&#8217;,&#8217;\u30d0\u30fc\u30b8\u30e7\u30f3&#8217;,&#8217;\u30a4\u30d9\u30f3\u30c8&#8217;,&#8217;\u5b9f\u884c\u30e6\u30fc\u30b6\u30fc&#8217;,&#8217;\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d5\u30a1\u30a4\u30ebID&#8217;]);}<\/p>\n<p>const user = Session.getEffectiveUser() ? Session.getEffectiveUser().getEmail() : &#8221;;<\/p>\n<p>log.appendRow([new Date(), backupName, &#8216;\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u66f4\u65b0&#8217;, user, copy.getId()]);<\/p>\n<p>} finally {<\/p>\n<p>lock.releaseLock();}}<\/p>\n<p>\u203b 1\u65e5\u306b\u4e00\u5ea6\u3060\u3051\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u5236\u9650\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u540c\u540d\u5b58\u5728\u30c1\u30a7\u30c3\u30af\u3084\u6700\u7d42\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u65e5\u6642\u306e\u4fdd\u5b58\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h2>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u8acb\u6c42\u66f8\u306e\u30c7\u30b6\u30a4\u30f3\u3092\u6539\u5584\u3059\u308b\u65b9\u6cd5\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u30c7\u30b6\u30a4\u30f3\u6539\u5584\u306b\u306f\u3001\u30ab\u30e9\u30fc\u30b9\u30ad\u30fc\u30e0\u306e\u7d71\u4e00\u3001\u30d5\u30a9\u30f3\u30c8\u306e\u6700\u9069\u5316\u3001\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u6574\u7406\u3001\u30d6\u30e9\u30f3\u30c7\u30a3\u30f3\u30b0\u8981\u7d20\u306e\u8ffd\u52a0\u3001\u8996\u899a\u7684\u968e\u5c64\u306e\u78ba\u7acb\u3068\u3044\u30465\u3064\u306e\u8981\u7d20\u304c\u3042\u308a\u3001\u3053\u308c\u3089\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u306a\u5370\u8c61\u3092\u4e0e\u3048\u3089\u308c\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u512a\u308c\u305f\u30c7\u30b6\u30a4\u30f3\u306f\u3001\u8acb\u6c42\u66f8\u306e\u4fe1\u983c\u6027\u3092\u9ad8\u3081\u3001\u652f\u6255\u3044\u306e\u8fc5\u901f\u5316\u306b\u3082\u3064\u306a\u304c\u308a\u307e\u3059\u3002<\/p>\n<h3>\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u306a\u30ab\u30e9\u30fc\u30b9\u30ad\u30fc\u30e0\u306e\u9069\u7528<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u8272\u4f7f\u3044\u306f\u3001\u4f01\u696d\u306e\u30d6\u30e9\u30f3\u30c9\u30a4\u30e1\u30fc\u30b8\u3068\u4e00\u8cab\u6027\u3092\u4fdd\u3061\u306a\u304c\u3089\u3001\u8aad\u307f\u3084\u3059\u3055\u3092\u78ba\u4fdd\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/b><\/span><\/p>\n<p>\u52b9\u679c\u7684\u306a\u30ab\u30e9\u30fc\u30b9\u30ad\u30fc\u30e0\u306e\u4f8b\uff1a<\/p>\n<p>function applyProfessionalColorScheme() {<\/p>\n<p>const sheet = SpreadsheetApp.getActiveSheet();<\/p>\n<p>\/\/ \u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u914d\u616e\u3057\u305f\u914d\u8272\uff08\u767d\u6587\u5b57\u3068\u7d44\u307f\u5408\u308f\u305b\u3066\u3082\u8996\u8a8d\u6027\u3092\u78ba\u4fdd\uff09<\/p>\n<p>const colors = {<\/p>\n<p>primary: &#8216;#174EA6&#8217;,\u00a0 \u00a0 \u00a0 \/\/ \u6fc3\u3044\u9752\uff08\u767d\u6587\u5b57\u3068\u9ad8\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\uff09<\/p>\n<p>secondary: &#8216;#0F7A3E&#8217;,\u00a0 \u00a0 \/\/ \u6fc3\u3044\u7dd1\uff08\u767d\u6587\u5b57\u3068\u9ad8\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\uff09<\/p>\n<p>background: &#8216;#F3F6FB&#8217;, \u00a0 \/\/ \u6de1\u3044\u30b0\u30ec\u30fc\u9752<\/p>\n<p>text: &#8216;#202124&#8217;, \u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u6fc3\u7070<\/p>\n<p>border: &#8216;#B8C1CC&#8217;\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u67a0\u7dda};<\/p>\n<p>\/\/ \u30d8\u30c3\u30c0\u30fc<\/p>\n<p>sheet.getRange(&#8220;A1:H3&#8221;).setBackground(colors.primary)<\/p>\n<p>.setFontColor(&#8216;#FFFFFF&#8217;)<\/p>\n<p>.setFontWeight(&#8216;bold&#8217;);<\/p>\n<p>\/\/ \u660e\u7d30\u898b\u51fa\u3057<\/p>\n<p>sheet.getRange(&#8220;A9:E9&#8221;).setBackground(colors.background)<\/p>\n<p>.setFontColor(colors.text)<\/p>\n<p>.setBorder(true, true, true, true, null, null, colors.border, SpreadsheetApp.BorderStyle.SOLID_MEDIUM);<\/p>\n<p>\/\/ \u5408\u8a08\u6b04\uff08\u8272\uff0b\u592a\u5b57\uff0b\u592a\u67a0\u3067\u5f37\u8abf\uff09<\/p>\n<p>const totalRange = sheet.getRange(&#8220;D21:E23&#8221;);<\/p>\n<p>totalRange.setBackground(colors.secondary)<\/p>\n<p>.setFontColor(&#8216;#FFFFFF&#8217;)<\/p>\n<p>.setFontWeight(&#8216;bold&#8217;)<\/p>\n<p>.setBorder(true, true, true, true, null, null, &#8216;#666666&#8217;, SpreadsheetApp.BorderStyle.SOLID_THICK);<\/p>\n<p>\/\/ \u767d\u9ed2\u5370\u5237\u5bfe\u7b56\uff1a\u5408\u8a08\u91d1\u984d\u30bb\u30eb\u306b\u7db2\u639b\u3051\u3068\u592a\u67a0\uff08\u8272\u899a\u591a\u69d8\u6027\u306b\u3082\u914d\u616e\uff09<\/p>\n<p>sheet.getRange(&#8220;E23&#8221;).setFontSize(12).setFontWeight(&#8216;bold&#8217;);}<\/p>\n<p>\u203b \u91cd\u8981\u6570\u5024\u306f14pt\u4ee5\u4e0a\u3084\u592a\u5b57\u306b\u3057\u3001\u8272\u3060\u3051\u306b\u983c\u3089\u306a\u3044\u5f37\u8abf\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3>\u30d5\u30a9\u30f3\u30c8\u3068\u30bf\u30a4\u30dd\u30b0\u30e9\u30d5\u30a3\u306e\u6700\u9069\u5316<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8aad\u307f\u3084\u3059\u304f\u3001\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u306a\u5370\u8c61\u3092\u4e0e\u3048\u308b\u30d5\u30a9\u30f3\u30c8\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002<\/b><\/span><\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u30d5\u30a9\u30f3\u30c8\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li><strong>\u30d8\u30c3\u30c0\u30fc\uff0f\u898b\u51fa\u3057\uff1aNoto Sans JP<\/strong>\uff0816\u201318pt\u3001\u592a\u5b57\uff09<\/li>\n<li><strong>\u672c\u6587<\/strong>\uff1a<strong>Noto Sans JP<\/strong>\uff0810\u201311pt\u3001\u901a\u5e38\uff09<\/li>\n<li><strong>\u6570\u5024\u5217\uff1aRoboto Mono <\/strong>\u307e\u305f\u306f <strong>Courier New<\/strong>\uff08\u7b49\u5e45\u300110\u201311pt\uff09<\/li>\n<li><strong>\u6ce8\u8a18<\/strong>\uff1aNoto Sans JP\uff088\u20139pt\uff09<br \/>\n\u203b PDF\u51fa\u529b\u306e\u6587\u5b57\u5316\u3051\u9632\u6b62\u30fb\u591a\u7aef\u672b\u3067\u306e\u518d\u73fe\u6027\u3092\u512a\u5148\u3002<\/li>\n<\/ul>\n<\/div>\n<p>\u5b9f\u88c5\u4f8b\uff1a<\/p>\n<p>function optimizeTypography() {<\/p>\n<p>const sh = SpreadsheetApp.getActiveSheet();<\/p>\n<p>\/\/ \u30bf\u30a4\u30c8\u30eb\uff0f\u4f1a\u793e\u540d\uff0f\u8acb\u6c42\u66f8\u756a\u53f7<\/p>\n<p>sh.getRange(&#8220;A1&#8221;).setFontFamily(&#8220;Noto Sans JP&#8221;).setFontSize(22).setFontWeight(&#8220;bold&#8221;);<\/p>\n<p>sh.getRange(&#8220;G3:H3&#8221;).setFontFamily(&#8220;Noto Sans JP&#8221;).setFontSize(10).setFontWeight(&#8220;bold&#8221;); \/\/ \u8acb\u6c42\u66f8\u756a\u53f7\u7b49\u306e\u67a0<\/p>\n<p>\/\/ \u660e\u7d30\uff08\u672c\u6587\uff09<\/p>\n<p>sh.getRange(&#8220;A10:E10&#8221;).setFontFamily(&#8220;Noto Sans JP&#8221;).setFontSize(11).setFontWeight(&#8220;bold&#8221;); \/\/ \u898b\u51fa\u3057<\/p>\n<p>sh.getRange(&#8220;A11:E100&#8221;).setFontFamily(&#8220;Noto Sans JP&#8221;).setFontSize(10); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u884c<\/p>\n<p>\/\/ \u6570\u5024\u5217\u306f\u7b49\u5e45\uff0b\u8868\u793a\u5f62\u5f0f<\/p>\n<p>const unitCol = sh.getRange(&#8220;D11:D100&#8221;); \u00a0 \/\/ \u5358\u4fa1<\/p>\n<p>const amtCol\u00a0 = sh.getRange(&#8220;E11:E100&#8221;); \u00a0 \/\/ \u91d1\u984d<\/p>\n<p>unitCol.setFontFamily(&#8220;Roboto Mono&#8221;).setNumberFormat(&#8216;[$\u00a5-ja-JP]#,##0&#8217;);<\/p>\n<p>amtCol.setFontFamily(&#8220;Roboto Mono&#8221;).setNumberFormat(&#8216;[$\u00a5-ja-JP]#,##0&#8217;);<\/p>\n<p>\/\/ \u6ce8\u8a18<\/p>\n<p>sh.getRange(&#8220;A24:H26&#8221;).setFontFamily(&#8220;Noto Sans JP&#8221;).setFontSize(9).setFontColor(&#8220;#5f6368&#8221;);}<\/p>\n<p>\u203b \u5217\u69cb\u6210\u304c\u5909\u308f\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u898b\u51fa\u3057\u540d\u306e\u691c\u7d22\u3067\u5217\u3092\u7279\u5b9a\u3057\u3066\u304b\u3089\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u5f53\u3066\u308b\u3068\u5b89\u5168\u3067\u3059\u3002<\/p>\n<h3>\u30ec\u30a4\u30a2\u30a6\u30c8\u3068\u30b0\u30ea\u30c3\u30c9\u30b7\u30b9\u30c6\u30e0<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u6574\u7136\u3068\u3057\u305f\u30ec\u30a4\u30a2\u30a6\u30c8\u3067\u3001\u60c5\u5831\u306e\u968e\u5c64\u3092\u660e\u78ba\u306b\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u30b0\u30ea\u30c3\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\uff1a<\/p>\n<p>function setupGridLayout() {<\/p>\n<p>const sheet = SpreadsheetApp.getActiveSheet();<\/p>\n<p>\/\/ \u5217\u5e45\u306e\u8a2d\u5b9a\uff088\u5217\u30b0\u30ea\u30c3\u30c9\uff09<\/p>\n<p>const columnWidths = [120, 200, 80, 100, 100, 100, 100, 100];<\/p>\n<p>for (let i = 0; i &lt; columnWidths.length; i++) {<\/p>\n<p>sheet.setColumnWidth(i + 1, columnWidths[i]);}<\/p>\n<p>\/\/ \u30b7\u30fc\u30c8\u5185\u306e\u300c\u30b9\u30da\u30fc\u30b5\u30fc\u884c\u300d\u3092\u4f5c\u308b\u3060\u3051\uff08\u5370\u5237\u4f59\u767d\u306f\u5225\u8a2d\u5b9a\uff09<\/p>\n<p>sheet.setRowHeight(1, 10); \u00a0 \/\/ \u4e0a\u90e8\u30b9\u30da\u30fc\u30b9<\/p>\n<p>sheet.setRowHeight(25, 10);\u00a0 \/\/ \u4e0b\u90e8\u30b9\u30da\u30fc\u30b9<\/p>\n<p>\/\/ \u5370\u5237\u6642\u306e\u4f59\u767d\u306f \u30da\u30fc\u30b8\u8a2d\u5b9a\uff08\u30d5\u30a1\u30a4\u30eb \u2192 \u5370\u5237 \u2192 \u4f59\u767d\uff09\u3067\u8abf\u6574\u3059\u308b\u65e8\u3092\u672c\u6587\u306b\u660e\u8a18<\/p>\n<p>\/\/ \u30bb\u30af\u30b7\u30e7\u30f3\u9593\u306e\u30b9\u30da\u30fc\u30b9<\/p>\n<p>sheet.setRowHeight(8, 20);\u00a0 \/\/ \u30d8\u30c3\u30c0\u30fc\u3068\u660e\u7d30\u306e\u9593<\/p>\n<p>sheet.setRowHeight(20, 15); \/\/ \u660e\u7d30\u3068\u5408\u8a08\u306e\u9593}<\/p>\n<h3>\u30d6\u30e9\u30f3\u30c7\u30a3\u30f3\u30b0\u8981\u7d20\u306e\u8ffd\u52a0<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u4f01\u696d\u306e\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u8acb\u6c42\u66f8\u306b\u53cd\u6620\u3055\u305b\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u30ed\u30b4\u3068\u4f1a\u793e\u60c5\u5831\u306e\u914d\u7f6e\uff1a<\/p>\n<p>\/\/ \u30ed\u30b4\u753b\u50cf\u306e\u633f\u5165\uff08URL\u2192Blob\u306b\u3057\u3066\u304b\u3089\uff09<\/p>\n<p>const logoUrl = &#8216;https:\/\/example.com\/logo.png&#8217;;<\/p>\n<p>const blob = UrlFetchApp.fetch(logoUrl).getBlob();<\/p>\n<p>sheet.insertImage(blob, 1, 1); \/\/ \u52171\u30fb\u884c1\u306b\u914d\u7f6e<\/p>\n<p>\/\/ \u4f4d\u7f6e\u5fae\u8abf\u6574\u304c\u5fc5\u8981\u306a\u3089 OverGridImage API \u3092\u5229\u7528\uff08\u5fc5\u8981\u306b\u5fdc\u3058\u3066\uff09<\/p>\n<p>\/\/ const img = sheet.insertImage(blob, 1, 1);<\/p>\n<p>\/\/ img.setAnchorCell(sheet.getRange(&#8220;A1&#8221;)).setAnchorCellXOffset(6).setAnchorCellYOffset(6);<\/p>\n<p>\/\/ \u4f1a\u793e\u60c5\u5831\u306e\u30b9\u30bf\u30a4\u30ea\u30f3\u30b0<\/p>\n<p>const companyInfoRange = sheet.getRange(&#8220;F1:H3&#8221;).merge();<\/p>\n<p>companyInfoRange<\/p>\n<p>.setWrap(true)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u6298\u308a\u8fd4\u3057<\/p>\n<p>.setValue(&#8220;\u682a\u5f0f\u4f1a\u793e\u30b5\u30f3\u30d7\u30ebn\u3012100-0001n\u6771\u4eac\u90fd\u5343\u4ee3\u7530\u533a\u5343\u4ee3\u75301-1-1nTEL: 03-1234-5678&#8221;)<\/p>\n<p>.setHorizontalAlignment(&#8220;right&#8221;)<\/p>\n<p>.setVerticalAlignment(&#8220;top&#8221;);<\/p>\n<h3>\u8996\u899a\u7684\u306a\u60c5\u5831\u968e\u5c64\u306e\u78ba\u7acb<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u91cd\u8981\u306a\u60c5\u5831\u3092\u5f37\u8abf\u3057\u3001\u8aad\u307f\u624b\u306e\u8996\u7dda\u3092\u81ea\u7136\u306b\u8a98\u5c0e\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u60c5\u5831\u968e\u5c64\u306e\u5b9f\u88c5\u65b9\u6cd5\uff1a<\/p>\n<p>function establishVisualHierarchy() {<\/p>\n<p>const sheet = SpreadsheetApp.getActiveSheet();<\/p>\n<p>\/\/ \u30ec\u30d9\u30eb1\uff1a\u6700\u91cd\u8981\u60c5\u5831\uff08\u8acb\u6c42\u91d1\u984d\u5408\u8a08\uff09<\/p>\n<p>const totalRange = sheet.getRange(&#8220;E23&#8221;);<\/p>\n<p>totalRange.setFontSize(18);<\/p>\n<p>totalRange.setFontWeight(&#8220;bold&#8221;);<\/p>\n<p>totalRange.setBackground(&#8220;#fff3cd&#8221;);<\/p>\n<p>totalRange.setBorder(true, true, true, true, false, false,<\/p>\n<p>&#8220;#ffc107&#8221;, SpreadsheetApp.BorderStyle.SOLID_MEDIUM);<\/p>\n<p>\/\/ \u30ec\u30d9\u30eb2\uff1a\u91cd\u8981\u60c5\u5831\uff08\u5c0f\u8a08\u3001\u7a0e\u984d\uff09<\/p>\n<p>sheet.getRange(&#8220;D21:E22&#8221;).setFontSize(12);<\/p>\n<p>sheet.getRange(&#8220;D21:E22&#8221;).setBackground(&#8220;#e3f2fd&#8221;);<\/p>\n<p>\/\/ \u30ec\u30d9\u30eb3\uff1a\u901a\u5e38\u60c5\u5831\uff08\u660e\u7d30\uff09<\/p>\n<p>sheet.getRange(&#8220;A10:E19&#8221;).setFontSize(10);<\/p>\n<p>\/\/ \u30ec\u30d9\u30eb4\uff1a\u88dc\u8db3\u60c5\u5831\uff08\u5099\u8003\u3001\u6ce8\u8a18\uff09<\/p>\n<p>sheet.getRange(&#8220;A24:E26&#8221;).setFontSize(8);<\/p>\n<p>sheet.getRange(&#8220;A24:E26&#8221;).setFontColor(&#8220;#6c757d&#8221;);}<\/p>\n<h2>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u8acb\u6c42\u66f8\u3092\u52b9\u7387\u7684\u306b\u7ba1\u7406\u3059\u308b\u65b9\u6cd5\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u306b\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5316\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u7ba1\u7406\u3001\u81ea\u52d5\u96c6\u8a08\u3001\u691c\u7d22\u30b7\u30b9\u30c6\u30e0\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u4f53\u5236\u306e5\u3064\u306e\u8981\u7d20\u304c\u5fc5\u8981\u3067\u3001\u3053\u308c\u3089\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u8acb\u6c42\u696d\u52d9\u5168\u4f53\u3092\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u4f53\u7cfb\u7684\u306a\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308a\u3001\u8acb\u6c42\u6f0f\u308c\u3084\u9045\u5ef6\u3092\u9632\u304e\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ed\u30fc\u306e\u6539\u5584\u306b\u3082\u3064\u306a\u304c\u308a\u307e\u3059\u3002<\/p>\n<h3>\u8acb\u6c42\u66f8\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u69cb\u7bc9<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u3059\u3079\u3066\u306e\u8acb\u6c42\u66f8\u3092\u4e00\u5143\u7ba1\u7406\u3059\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u69cb\u9020\u306e\u8a2d\u8a08\uff1a<\/p>\n<p>function createInvoiceDatabase() {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const name = &#8220;\u8acb\u6c42\u66f8DB&#8221;;<\/p>\n<p>let db = ss.getSheetByName(name);<\/p>\n<p>if (!db) db = ss.insertSheet(name); else db.clear(); \/\/ \u65e2\u5b58\u306a\u3089\u521d\u671f\u5316<\/p>\n<p>const headers = [&#8220;\u8acb\u6c42\u66f8\u756a\u53f7&#8221;,&#8221;\u767a\u884c\u65e5&#8221;,&#8221;\u9867\u5ba2\u540d&#8221;,&#8221;\u8acb\u6c42\u91d1\u984d&#8221;,&#8221;\u652f\u6255\u671f\u9650&#8221;,<\/p>\n<p>&#8220;\u30b9\u30c6\u30fc\u30bf\u30b9&#8221;,&#8221;\u5165\u91d1\u65e5&#8221;,&#8221;\u5099\u8003&#8221;,&#8221;\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af&#8221;,&#8221;\u62c5\u5f53\u8005&#8221;,<\/p>\n<p>&#8220;\u66f4\u65b0\u65e5\u6642&#8221;,&#8221;\u30a2\u30e9\u30fc\u30c8&#8221;]; \/\/ \u2190 \u30a2\u30e9\u30fc\u30c8\u5217\u3092\u8ffd\u52a0\uff08\u671f\u9650\u8d85\u904e\u7b49\u3092\u8868\u793a\uff09<\/p>\n<p>db.getRange(1,1,1,headers.length).setValues([headers]).setFontWeight(&#8220;bold&#8221;);<\/p>\n<p>db.setFrozenRows(1);<\/p>\n<p>\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9\u691c\u8a3c\uff08\u30a2\u30e9\u30fc\u30c8\u306f\u5225\u5217\u3067\u6271\u3046\u306e\u3067\u300c\u671f\u9650\u8d85\u904e\u300d\u306f\u5165\u308c\u306a\u3044\uff09<\/p>\n<p>const statusRule = SpreadsheetApp.newDataValidation()<\/p>\n<p>.requireValueInList([&#8220;\u4f5c\u6210\u4e2d&#8221;,&#8221;\u9001\u4ed8\u6e08&#8221;,&#8221;\u5165\u91d1\u5f85\u3061&#8221;,&#8221;\u5165\u91d1\u78ba\u8a8d&#8221;,&#8221;\u5b8c\u4e86&#8221;])<\/p>\n<p>.setAllowInvalid(false).build();<\/p>\n<p>db.getRange(&#8220;F2:F&#8221;).setDataValidation(statusRule);<\/p>\n<p>\/\/ \u8868\u793a\u5f62\u5f0f<\/p>\n<p>db.getRange(&#8220;B2:B&#8221;).setNumberFormat(&#8220;yyyy\u5e74m\u6708d\u65e5&#8221;); \/\/ \u767a\u884c\u65e5<\/p>\n<p>db.getRange(&#8220;E2:E&#8221;).setNumberFormat(&#8220;yyyy\u5e74m\u6708d\u65e5&#8221;); \/\/ \u652f\u6255\u671f\u9650<\/p>\n<p>db.getRange(&#8220;G2:G&#8221;).setNumberFormat(&#8220;yyyy\u5e74m\u6708d\u65e5&#8221;); \/\/ \u5165\u91d1\u65e5<\/p>\n<p>db.getRange(&#8220;D2:D&#8221;).setNumberFormat(&#8216;[$\u00a5-ja-JP]#,##0&#8217;); \/\/ \u91d1\u984d<\/p>\n<p>db.getRange(&#8220;K2:K&#8221;).setNumberFormat(&#8220;yyyy-MM-dd HH:mm:ss&#8221;); \/\/ \u66f4\u65b0\u65e5\u6642<\/p>\n<p>\/\/ \u30d5\u30a3\u30eb\u30bf<\/p>\n<p>db.getRange(1,1,1000,headers.length).createFilter();}<\/p>\n<h3>\u30b9\u30c6\u30fc\u30bf\u30b9\u7ba1\u7406\u3068\u81ea\u52d5\u901a\u77e5<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u7ba1\u7406\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u81ea\u52d5\u901a\u77e5\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u30b9\u30c6\u30fc\u30bf\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\uff1a<\/p>\n<p>function updateInvoiceStatus() {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const sh = ss.getSheetByName(&#8220;\u8acb\u6c42\u66f8DB&#8221;);<\/p>\n<p>if (!sh) return;<\/p>\n<p>const last = sh.getLastRow();<\/p>\n<p>if (last &lt; 2) return;<\/p>\n<p>const tz = ss.getSpreadsheetTimeZone() || &#8216;Asia\/Tokyo&#8217;;<\/p>\n<p>const toDateOnly = d =&gt; {<\/p>\n<p>if (!(d instanceof Date)) return null;<\/p>\n<p>return new Date(Utilities.formatDate(d, tz, &#8216;yyyy-MM-dd&#8217;) + &#8216;T00:00:00&#8217;);};<\/p>\n<p>const rng = sh.getRange(2,1,last-1,12);<\/p>\n<p>const vals = rng.getValues();<\/p>\n<p>const bgs\u00a0 = rng.getBackgrounds();<\/p>\n<p>const COL_DUE = 5; \u00a0 \/\/ \u652f\u6255\u671f\u9650(E)<\/p>\n<p>const COL_STATUS = 6;\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9(F)<\/p>\n<p>const COL_ALERT = 12;\/\/ \u30a2\u30e9\u30fc\u30c8(L)<\/p>\n<p>const today = toDateOnly(new Date());<\/p>\n<p>for (let r = 0; r &lt; vals.length; r++) {<\/p>\n<p>const row = vals[r];<\/p>\n<p>const due = toDateOnly(row[COL_DUE-1]);<\/p>\n<p>const status = String(row[COL_STATUS-1] || &#8220;&#8221;);<\/p>\n<p>let alert = &#8220;&#8221;;<\/p>\n<p>\/\/ \u671f\u9650\u304c\u7a7a or \u5165\u91d1\u78ba\u8a8d\/\u5b8c\u4e86\u306f\u30b9\u30ad\u30c3\u30d7<\/p>\n<p>if (!due || [&#8220;\u5165\u91d1\u78ba\u8a8d&#8221;,&#8221;\u5b8c\u4e86&#8221;].includes(status)) {<\/p>\n<p>alert = &#8220;&#8221;;<\/p>\n<p>bgs[r][COL_ALERT-1] = &#8220;#ffffff&#8221;;<\/p>\n<p>} else {<\/p>\n<p>\/\/ 3\u65e5\u524d\u30fb\u671f\u9650\u8d85\u904e\u5224\u5b9a\uff08\u6642\u523b\u306e\u5f71\u97ff\u3092\u6392\u9664\uff09<\/p>\n<p>const threeBefore = new Date(due); threeBefore.setDate(due.getDate()-3);<\/p>\n<p>if (status === &#8220;\u5165\u91d1\u5f85\u3061&#8221; &amp;&amp; today &gt; due) {<\/p>\n<p>alert = &#8220;\u671f\u9650\u8d85\u904e&#8221;;<\/p>\n<p>bgs[r][COL_ALERT-1] = &#8220;#ffcccc&#8221;;<\/p>\n<p>sendAlertEmailSafe(row); \/\/ \u5b89\u5168\u306a\u901a\u77e5\u95a2\u6570\uff08\u4e0b\u8a18\uff09<\/p>\n<p>} else if (status === &#8220;\u5165\u91d1\u5f85\u3061&#8221; &amp;&amp; today &gt;= threeBefore &amp;&amp; today &lt;= due) {<\/p>\n<p>alert = &#8220;\u671f\u9650\u9593\u8fd1&#8221;;<\/p>\n<p>bgs[r][COL_ALERT-1] = &#8220;#fff2cc&#8221;;<\/p>\n<p>} else {<\/p>\n<p>alert = &#8220;&#8221;;<\/p>\n<p>bgs[r][COL_ALERT-1] = &#8220;#ffffff&#8221;; }}<\/p>\n<p>vals[r][COL_ALERT-1] = alert;<\/p>\n<p>\/\/ \u66f4\u65b0\u65e5\u6642<\/p>\n<p>vals[r][11-1] = new Date();}<\/p>\n<p>rng.setValues(vals);<\/p>\n<p>rng.setBackgrounds(bgs);}<\/p>\n<p>\/\/ \u30c0\u30df\u30fc\u306e\u5b89\u5168\u901a\u77e5\uff08\u74b0\u5883\u306b\u5408\u308f\u305b\u3066\u5b9f\u88c5\uff09<\/p>\n<p>function sendAlertEmailSafe(row) {<\/p>\n<p>\/\/ row\u914d\u5217\u304b\u3089\u5fc5\u8981\u60c5\u5831\u3092\u6574\u5f62\u3057\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u7b49\u3092\u884c\u3046<\/p>\n<p>\/\/ \u672c\u756a\u3067\u306f MailApp.sendEmail(&#8230;) \u3092\u5229\u7528\u3057\u3001\u9001\u4fe1\u5148\u306e\u53d6\u5f97\u30fb\u91cd\u8907\u9001\u4fe1\u9632\u6b62\u3092\u5b9f\u88c5\u3057\u3066\u304f\u3060\u3055\u3044\u3002}<\/p>\n<h3>\u58f2\u4e0a\u96c6\u8a08\u3068\u5206\u6790\u6a5f\u80fd<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u30c7\u30fc\u30bf\u304b\u3089\u58f2\u4e0a\u5206\u6790\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u6708\u6b21\u96c6\u8a08\u306e\u5b9f\u88c5<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u6708\u5225\u58f2\u4e0a\u63a8\u79fb<\/li>\n<li>\u9867\u5ba2\u5225\u58f2\u4e0a\u30e9\u30f3\u30ad\u30f3\u30b0<\/li>\n<li>\u5546\u54c1\u30fb\u30b5\u30fc\u30d3\u30b9\u5225\u96c6\u8a08<\/li>\n<li>\u5165\u91d1\u7387\u3068\u56de\u53ce\u671f\u9593\u5206\u6790<\/li>\n<li>\u524d\u5e74\u540c\u671f\u6bd4\u8f03<\/li>\n<\/ul>\n<\/div>\n<p>function generateMonthlySummary() {<\/p>\n<p>\/**<\/p>\n<p>* \u6708\u6b21\u58f2\u4e0a\u96c6\u8a08\uff08\u767a\u884c\u65e5\u30d9\u30fc\u30b9\uff0f\u5165\u91d1\u65e5\u30d9\u30fc\u30b9\u3092\u9078\u629e\u53ef\u80fd\uff09<\/p>\n<p>* options: { basis: &#8220;issue&#8221; | &#8220;cash&#8221; }\u00a0 \/\/ \u30c7\u30d5\u30a9\u306f &#8220;issue&#8221;<\/p>\n<p>* \u524d\u63d0: \u8acb\u6c42\u66f8DB\u306e\u5217: B=\u767a\u884c\u65e5, D=\u8acb\u6c42\u91d1\u984d, E=\u652f\u6255\u671f\u9650, G=\u5165\u91d1\u65e5, F=\u30b9\u30c6\u30fc\u30bf\u30b9<\/p>\n<p>*\/<\/p>\n<p>function generateMonthlySummary(options = { basis: &#8220;issue&#8221; }) {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const db = ss.getSheetByName(&#8220;\u8acb\u6c42\u66f8DB&#8221;);<\/p>\n<p>if (!db) { SpreadsheetApp.getUi().alert(&#8216;\u30b7\u30fc\u30c8\u300c\u8acb\u6c42\u66f8DB\u300d\u304c\u3042\u308a\u307e\u305b\u3093&#8217;); return; }<\/p>\n<p>const sumSh = ss.getSheetByName(&#8220;\u6708\u6b21\u96c6\u8a08&#8221;) || ss.insertSheet(&#8220;\u6708\u6b21\u96c6\u8a08&#8221;);<\/p>\n<p>sumSh.clear(); \/\/ \u65e2\u5b58\u51fa\u529b\u3092\u30af\u30ea\u30a2<\/p>\n<p>sumSh.getRange(1,1,1,3).setValues([[&#8220;\u6708&#8221;,&#8221;\u58f2\u4e0a\u5408\u8a08&#8221;,&#8221;\u4ef6\u6570&#8221;]]).setFontWeight(&#8220;bold&#8221;);<\/p>\n<p>sumSh.setFrozenRows(1);<\/p>\n<p>const last = db.getLastRow();<\/p>\n<p>if (last &lt; 2) return; \/\/ \u30c7\u30fc\u30bf\u306a\u3057\u306a\u3089\u7d42\u4e86\uff08\u30a8\u30e9\u30fc\u306b\u3057\u306a\u3044\uff09<\/p>\n<p>const tz = ss.getSpreadsheetTimeZone() || &#8216;Asia\/Tokyo&#8217;;<\/p>\n<p>const toYm = d =&gt; {<\/p>\n<p>if (!(d instanceof Date)) return null;<\/p>\n<p>const s = Utilities.formatDate(d, tz, &#8216;yyyy-MM&#8217;);<\/p>\n<p>return s;};<\/p>\n<p>const toNum = v =&gt; {<\/p>\n<p>if (typeof v === &#8216;number&#8217;) return v;<\/p>\n<p>if (v === null || v === &#8221;) return 0;<\/p>\n<p>return Number(String(v).replace(\/[^d.-]\/g,&#8221;)) || 0;};<\/p>\n<p>const vals = db.getRange(2,1,last-1,11).getValues();<\/p>\n<p>const COL_ISSUE=2, COL_AMOUNT=4, COL_CASH=7, COL_STATUS=6;<\/p>\n<p>const monthly = new Map(); \/\/ key: &#8216;yyyy-MM&#8217; -&gt; {sum, count}<\/p>\n<p>for (const row of vals) {<\/p>\n<p>const status = String(row[COL_STATUS-1] || &#8220;&#8221;);<\/p>\n<p>\/\/ \u4f8b\uff1a\u58f2\u4e0a\u96c6\u8a08\u306f\u300c\u5165\u91d1\u78ba\u8a8d\/\u5b8c\u4e86\u306e\u307f\u300d\u306a\u3069\u306e\u696d\u52d9\u30eb\u30fc\u30eb\u304c\u3042\u308c\u3070\u3053\u3053\u3067\u30d5\u30a3\u30eb\u30bf<\/p>\n<p>\/\/ if (![&#8220;\u5165\u91d1\u78ba\u8a8d&#8221;,&#8221;\u5b8c\u4e86&#8221;].includes(status)) continue;<\/p>\n<p>const baseDate = options.basis === &#8220;cash&#8221; ? row[COL_CASH-1] : row[COL_ISSUE-1];<\/p>\n<p>const ym = toYm(baseDate);<\/p>\n<p>if (!ym) continue;<\/p>\n<p>const amt = toNum(row[COL_AMOUNT-1]);<\/p>\n<p>const rec = monthly.get(ym) || {sum:0, count:0};<\/p>\n<p>rec.sum += amt;<\/p>\n<p>rec.count += 1;<\/p>\n<p>monthly.set(ym, rec);}<\/p>\n<p>if (monthly.size === 0) return; \/\/ \u51fa\u529b\u306a\u3057\u3067\u3082\u30a8\u30e9\u30fc\u306b\u3057\u306a\u3044<\/p>\n<p>\/\/ \u6708\u9806\u306b\u4e26\u3079\u3066\u51fa\u529b<\/p>\n<p>const out = Array.from(monthly.entries())<\/p>\n<p>.sort(([a],[b]) =&gt; a.localeCompare(b))<\/p>\n<p>.map(([ym, v]) =&gt; [ym, v.sum, v.count]);<\/p>\n<p>sumSh.getRange(2,1,out.length, out[0].length).setValues(out);<\/p>\n<p>sumSh.getRange(2,2,out.length,1).setNumberFormat(&#8216;[$\u00a5-ja-JP]#,##0&#8217;);}<\/p>\n<h3>\u691c\u7d22\u3068\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u6a5f\u80fd<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u3092\u7d20\u65e9\u304f\u691c\u7d22\u30fb\u62bd\u51fa\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>function searchInvoices(criteria = {}) {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const sh = ss.getSheetByName(&#8220;\u8acb\u6c42\u66f8DB&#8221;);<\/p>\n<p>if (!sh) return [];<\/p>\n<p>const last = sh.getLastRow();<\/p>\n<p>if (last &lt; 2) return [];<\/p>\n<p>const vals = sh.getRange(2,1,last-1,11).getValues();<\/p>\n<p>const tz = ss.getSpreadsheetTimeZone() || &#8216;Asia\/Tokyo&#8217;;<\/p>\n<p>const toDateOnly = d =&gt; {<\/p>\n<p>if (!(d instanceof Date)) return null;<\/p>\n<p>return new Date(Utilities.formatDate(d, tz, &#8216;yyyy-MM-dd&#8217;) + &#8216;T00:00:00&#8217;);};<\/p>\n<p>const start = criteria.startDate ? toDateOnly(criteria.startDate) : null;<\/p>\n<p>const end \u00a0 = criteria.endDate \u00a0 ? toDateOnly(criteria.endDate) \u00a0 : null;<\/p>\n<p>const cust\u00a0 = criteria.customerName ? String(criteria.customerName).toLowerCase() : null;<\/p>\n<p>const stat\u00a0 = criteria.status ? String(criteria.status) : null;<\/p>\n<p>const COL_CUST=3, COL_DATE=2, COL_STAT=6;<\/p>\n<p>const res = [];<\/p>\n<p>for (const row of vals) {<\/p>\n<p>let ok = true;<\/p>\n<p>\/\/ \u9867\u5ba2\u540d\uff08\u90e8\u5206\u4e00\u81f4\u30fb\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u7121\u8996\uff09<\/p>\n<p>const name = String(row[COL_CUST-1] || &#8220;&#8221;).toLowerCase();<\/p>\n<p>if (cust &amp;&amp; !name.includes(cust)) ok = false;<\/p>\n<p>\/\/ \u671f\u9593\uff08\u7247\u5074\u6307\u5b9a\u53ef\uff09<\/p>\n<p>const d = toDateOnly(row[COL_DATE-1]);<\/p>\n<p>if ((start &amp;&amp; (!d || d &lt; start)) || (end &amp;&amp; (!d || d &gt; end))) ok = false;<\/p>\n<p>\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9\uff08\u5b8c\u5168\u4e00\u81f4\uff09<\/p>\n<p>if (stat &amp;&amp; String(row[COL_STAT-1] || &#8220;&#8221;) !== stat) ok = false;<\/p>\n<p>if (ok) res.push(row);}<\/p>\n<p>return res; \/\/ \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u5316\u3057\u3066\u8fd4\u3059}<\/p>\n<h3>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u5fa9\u5143\u30b7\u30b9\u30c6\u30e0<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u5b9a\u671f\u7684\u306a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3067\u3001\u30c7\u30fc\u30bf\u306e\u5b89\u5168\u6027\u3092\u78ba\u4fdd\u3057\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>function createBackup() {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const lock = LockService.getDocumentLock();<\/p>\n<p>lock.waitLock(30000);<\/p>\n<p>try {<\/p>\n<p>const FOLDER_ID = &#8216;&lt;&lt;\u5b9f\u969b\u306e\u30d5\u30a9\u30eb\u30c0ID&gt;&gt;&#8217;; \/\/ \u2190\u5dee\u3057\u66ff\u3048\u5fc5\u9808<\/p>\n<p>let folder;<\/p>\n<p>try {<\/p>\n<p>folder = DriveApp.getFolderById(FOLDER_ID);<\/p>\n<p>} catch(e) {<\/p>\n<p>throw new Error(&#8216;\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5148\u30d5\u30a9\u30eb\u30c0ID\u304c\u4e0d\u6b63\u3067\u3059\u3002&#8217;);\u00a0}<\/p>\n<p>const tz = ss.getSpreadsheetTimeZone() || &#8216;Asia\/Tokyo&#8217;;<\/p>\n<p>const ts = Utilities.formatDate(new Date(), tz, &#8216;yyyyMMdd_HHmmss&#8217;);<\/p>\n<p>const name = `\u8acb\u6c42\u66f8\u30d0\u30c3\u30af\u30a2\u30c3\u30d7_${ts}`;<\/p>\n<p>const copyFile = ss.makeCopy(name, folder);<\/p>\n<p>\/\/ \u5c65\u6b74\u30b7\u30fc\u30c8<\/p>\n<p>let log = ss.getSheetByName(&#8220;\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5c65\u6b74&#8221;);<\/p>\n<p>if (!log) {<\/p>\n<p>log = ss.insertSheet(&#8220;\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5c65\u6b74&#8221;);<\/p>\n<p>log.appendRow([&#8220;\u65e5\u6642&#8221;,&#8221;\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u540d&#8221;,&#8221;URL&#8221;,&#8221;\u30e6\u30fc\u30b6\u30fc&#8221;,&#8221;\u30d5\u30a1\u30a4\u30ebID&#8221;]);}<\/p>\n<p>const user = Session.getEffectiveUser() ? Session.getEffectiveUser().getEmail() : &#8220;&#8221;;<\/p>\n<p>log.appendRow([new Date(), name, copyFile.getUrl(), user, copyFile.getId()]);<\/p>\n<p>\/\/ 30\u65e5\u8d85\u306e\u53e4\u3044\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u524a\u9664<\/p>\n<p>cleanOldBackups(folder, 30);<\/p>\n<p>} finally {<\/p>\n<p>lock.releaseLock();}}<\/p>\n<p>\/**<\/p>\n<p>* \u6307\u5b9a\u30d5\u30a9\u30eb\u30c0\u5185\u3067\u5f53\u8a72\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u306e\u53e4\u3044\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u524a\u9664<\/p>\n<p>* \u3057\u304d\u3044\u5024: days \u4ee5\u4e0a\u524d\u306e\u4f5c\u6210\u65e5\u6642<\/p>\n<p>*\/<\/p>\n<p>function cleanOldBackups(folder, days) {<\/p>\n<p>const now = new Date();<\/p>\n<p>const cutoff = new Date(now.getTime() &#8211; days*24*60*60*1000);<\/p>\n<p>const files = folder.getFiles();<\/p>\n<p>while (files.hasNext()) {<\/p>\n<p>const f = files.next();<\/p>\n<p>const name = f.getName();<\/p>\n<p>if (!name.startsWith(&#8216;\u8acb\u6c42\u66f8\u30d0\u30c3\u30af\u30a2\u30c3\u30d7_&#8217;)) continue;<\/p>\n<p>const created = f.getDateCreated();<\/p>\n<p>if (created &lt; cutoff) {<\/p>\n<p>try { f.setTrashed(true); } catch(e) {\/* \u6a29\u9650\u304c\u306a\u3051\u308c\u3070\u30b9\u30ad\u30c3\u30d7 *\/}}}}<\/p>\n<h2>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u8acb\u6c42\u66f8\u3092\u5b89\u5168\u306b\u5171\u6709\u3059\u308b\u65b9\u6cd5\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u5b89\u5168\u306a\u5171\u6709\u306b\u306f\u3001\u6700\u5c0f\u6a29\u9650\u306e\u4ed8\u4e0e\u3001\u30ea\u30f3\u30af\u5171\u6709\u306e\u7121\u52b9\u5316\/\u5236\u9650\u3001\u7de8\u96c6\u4e0d\u53ef\u306ePDF\u5316\u3001\u76e3\u67fb\u30ed\u30b0\uff08\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u3084\u5171\u6709\u306e\u8a18\u9332\uff09\u3001\u6a5f\u5bc6\u30c7\u30fc\u30bf\u306e\u6700\u5c0f\u5316\u3068\u4fdd\u8b77\uff08\u7bc4\u56f2\u4fdd\u8b77\u30fbCSE\u7b49\u306e\u63a1\u7528\uff09\u304c\u6709\u52b9\u3067\u3059\u3002<\/b><\/span>\u30d1\u30b9\u30ef\u30fc\u30c9\u4fdd\u8b77\u306fDrive\u306e\u6a19\u6e96\u6a5f\u80fd\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u6697\u53f7\u5316\u304c\u5fc5\u8981\u306a\u5834\u5408\u306fGoogle Workspace\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b5\u30a4\u30c9\u6697\u53f7\u5316\uff08\u5bfe\u5fdc\u30a8\u30c7\u30a3\u30b7\u30e7\u30f3\uff09\u3084\u5916\u90e8KMS\u306e\u5229\u7528\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30bb\u30ad\u30e5\u30a2\u306a\u5171\u6709\u4f53\u5236\u306b\u3088\u308a\u3001\u9867\u5ba2\u3068\u306e\u4fe1\u983c\u95a2\u4fc2\u3092\u7dad\u6301\u3057\u306a\u304c\u3089\u52b9\u7387\u7684\u306a\u8acb\u6c42\u696d\u52d9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>\u6a29\u9650\u30ec\u30d9\u30eb\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u8acb\u6c42\u66f8\u306e\u5171\u6709\u6642\u306f\u3001\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u6a29\u9650\u306e\u307f\u3092\u4ed8\u4e0e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/b><\/span><\/p>\n<p>\u6a29\u9650\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n<p>function setInvoicePermissions() {<\/p>\n<p>const fileId = &#8216;&lt;&lt;\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u30d5\u30a1\u30a4\u30ebID&gt;&gt;&#8217;;<\/p>\n<p>const file = DriveApp.getFileById(fileId);<\/p>\n<p>\/\/ \u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\uff1a\u307e\u305a\u516c\u958b\u5171\u6709\u3092\u7121\u52b9\u5316<\/p>\n<p>file.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE);<\/p>\n<p>\/\/ \u95b2\u89a7\u306e\u307f\uff08\u9867\u5ba2\uff09<\/p>\n<p>file.addViewer(&#8216;customer@example.com&#8217;);<\/p>\n<p>\/\/ \u7de8\u96c6\u53ef\uff08\u793e\u5185\uff09<\/p>\n<p>file.addEditor(&#8216;staff@company.com&#8217;);}<\/p>\n<p>\/\/ \u671f\u9650\u4ed8\u304d\u5171\u6709\uff08Drive \u9ad8\u5ea6\u306a\u30b5\u30fc\u30d3\u30b9\uff1aResources \u2192 Advanced Google services \u3067 Drive \u3092\u6709\u52b9\u5316\uff09<\/p>\n<p>function addViewerWithExpiration(email, fileId, days = 7) {<\/p>\n<p>const expires = new Date(Date.now() + days*24*60*60*1000).toISOString();<\/p>\n<p>Drive.Permissions.create(<\/p>\n<p>{ &#8216;type&#8217;:&#8217;user&#8217;, &#8216;role&#8217;:&#8217;reader&#8217;, &#8216;emailAddress&#8217;:email, &#8216;expirationTime&#8217;: expires },<\/p>\n<p>fileId,<\/p>\n<p>{ &#8216;sendNotificationEmail&#8217;: true });}<\/p>\n<p>\u203b \u9ad8\u5ea6\u306a\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u308f\u306a\u3044\u5834\u5408\u306f\u3001\u6642\u9593\u4e3b\u5c0e\u30c8\u30ea\u30ac\u30fc\u3067\u671f\u9650\u65e5\u306b file.removeViewer(email) \u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3>\u5171\u6709\u30ea\u30f3\u30af\u306e\u7ba1\u7406\u3068\u5236\u5fa1<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u5171\u6709\u30ea\u30f3\u30af\u3092\u9069\u5207\u306b\u7ba1\u7406\u3057\u3001\u4e0d\u6b63\u30a2\u30af\u30bb\u30b9\u3092\u9632\u304e\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u5171\u6709\u30ea\u30f3\u30af\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\uff1a<\/p>\n<p>function manageSharingLinks() {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const file = DriveApp.getFileById(ss.getId());<\/p>\n<p>\/\/ \u516c\u958b\u30ea\u30f3\u30af\u3092\u7121\u52b9\u5316<\/p>\n<p>if (file.getSharingAccess() === DriveApp.Access.ANYONE_WITH_LINK) {<\/p>\n<p>file.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE);}<\/p>\n<p>\/\/ \u53d6\u5f15\u5148\u304c\u793e\u5916\u306a\u3089\u300cPRIVATE + \u6307\u5b9a\u30e6\u30fc\u30b6\u30fc\u300d\u3067\u904b\u7528\u3002\uff08\u30c9\u30e1\u30a4\u30f3\u9650\u5b9a\u306f\u793e\u5185\u7528\uff09}<\/p>\n<p>\/\/ \u73fe\u5728\u306e\u5171\u6709\u8a2d\u5b9a\u3092\u53d6\u5f97<\/p>\n<p>const access = file.getSharingAccess();<\/p>\n<p>const permission = file.getSharingPermission();<\/p>\n<p>\/\/ \u30ea\u30f3\u30af\u3092\u77e5\u3063\u3066\u3044\u308b\u5168\u54e1\u304c\u95b2\u89a7\u53ef\u80fd\u306a\u8a2d\u5b9a\u3092\u7121\u52b9\u5316<\/p>\n<p>if (access === DriveApp.Access.ANYONE_WITH_LINK) {<\/p>\n<p>file.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE);}<\/p>\n<p>\/\/ \u7279\u5b9a\u306e\u30c9\u30e1\u30a4\u30f3\u306e\u307f\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306b\u8a2d\u5b9a<\/p>\n<p>file.setSharing(DriveApp.Access.DOMAIN_WITH_LINK, DriveApp.Permission.VIEW);}<\/p>\n<h3>PDF\u5909\u63db\u3067\u306e\u5b89\u5168\u306a\u5171\u6709<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u7de8\u96c6\u4e0d\u53ef\u80fd\u306aPDF\u5f62\u5f0f\u3067\u5171\u6709\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u306e\u6539\u3056\u3093\u3092\u9632\u304e\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>function shareAsPDF() {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const sheet = ss.getActiveSheet();<\/p>\n<p>const tz = ss.getSpreadsheetTimeZone() || &#8216;Asia\/Tokyo&#8217;;<\/p>\n<p>const dateStr = Utilities.formatDate(new Date(), tz, &#8216;yyyyMMdd&#8217;);<\/p>\n<p>const url = ss.getUrl().replace(\/\/edit.*$\/, &#8221;) +<\/p>\n<p>&#8216;\/export?exportFormat=pdf&amp;format=pdf&#8217; +<\/p>\n<p>&#8216;&amp;size=A4&amp;portrait=true&amp;fitw=true&#8217; +<\/p>\n<p>&#8216;&amp;sheetnames=false&amp;printtitle=false&amp;pagenumbers=false&amp;gridlines=false&amp;fzr=false&#8217; +<\/p>\n<p>&#8216;&amp;gid=&#8217; + sheet.getSheetId();<\/p>\n<p>const res = UrlFetchApp.fetch(url, { headers: { Authorization: &#8216;Bearer &#8216; + ScriptApp.getOAuthToken() }});<\/p>\n<p>const blob = res.getBlob().setName(`\u8acb\u6c42\u66f8_${dateStr}.pdf`);<\/p>\n<p>\/\/ \u9001\u4fe1\uff08\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u5b9b\u5148\u306e\u307f\uff09<\/p>\n<p>MailApp.sendEmail({<\/p>\n<p>to: &#8216;customer@example.com&#8217;,<\/p>\n<p>subject: &#8216;\u8acb\u6c42\u66f8\u306e\u3054\u9001\u4ed8&#8217;,<\/p>\n<p>body: &#8216;\u8acb\u6c42\u66f8\u3092PDF\u3067\u304a\u9001\u308a\u3057\u307e\u3059\u3002&#8217;,<\/p>\n<p>attachments: [blob]});<\/p>\n<p>\/\/ \u30aa\u30d7\u30b7\u30e7\u30f3\uff1a\u5b89\u5168\u306a\u4fdd\u7ba1\u30d5\u30a9\u30eb\u30c0\u3078\u683c\u7d0d\u3057\u3001\u30e9\u30d9\u30eb\uff08\u9867\u5ba2\u540d\/\u8acb\u6c42\u756a\u53f7\uff09\u3092\u30d5\u30a1\u30a4\u30eb\u540d\u306b\u4ed8\u4e0e<\/p>\n<p>\/\/ const folder = DriveApp.getFolderById(&#8216;&lt;&lt;\u5b89\u5168\u306a\u30d5\u30a9\u30eb\u30c0ID&gt;&gt;&#8217;);<\/p>\n<p>\/\/ folder.createFile(blob);}<\/p>\n<h3>\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u3068\u76e3\u67fb\u8a3c\u8de1<\/h3>\n<p>\u89a7\u76e3\u67fb\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001<\/p>\n<div class=\"summary-box\">\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u7ba1\u7406\u8005\u306f<strong>Google Workspace \u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u306e\u76e3\u67fb\u30ed\u30b0<\/strong>\u3092\u5229\u7528\uff08Enterprise \u4ee5\u4e0a\u7b49\u306e\u30a8\u30c7\u30a3\u30b7\u30e7\u30f3\u8981\u4ef6\u3042\u308a\uff09\u3002<\/li>\n<li>\u5916\u90e8\u5171\u6709\u306f\u201c<strong>PDF\u3092Apps Script\u306eWeb\u30a2\u30d7\u30ea\uff08\u8a8d\u8a3c\u5fc5\u9808\uff09\u304b\u3089\u914d\u4fe1\u201d<\/strong>\u3057\u3066<strong>\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u306b\u30e6\u30fc\u30b6\u30fc\/\u6642\u523b\u3092\u8a18\u9332<\/strong>\u3059\u308b\u8a2d\u8a08\u306b\u5207\u66ff\uff08IP\u306f\u53d6\u5f97\u4fdd\u8a3c\u306a\u3057\uff09\u3002<\/li>\n<li>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u5074\u3067\u306f**\u7de8\u96c6\u30a4\u30d9\u30f3\u30c8\uff08onEdit\/onChange\uff09**\u306e\u64cd\u4f5c\u8a18\u9332\u306e\u307f\u53ef\u80fd\u3002<br \/>\n\u306a\u304a\u3001\u4ee5\u4e0b\u306e\u7c21\u6613\u30ed\u30b0\u306f\u201c<strong>\u30b9\u30af\u30ea\u30d7\u30c8\u5b9f\u884c\u6642<\/strong>\u201d\u306e\u64cd\u4f5c\u8a18\u9332\u3068\u3057\u3066\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u95b2\u89a7\u306e\u4ee3\u66ff\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff09\u3002<\/li>\n<\/ul>\n<\/div>\n<p>function logAction(action = &#8216;\u64cd\u4f5c&#8217;) {<\/p>\n<p>const ss = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>const log = ss.getSheetByName(&#8220;\u30a2\u30af\u30bb\u30b9\u30ed\u30b0&#8221;) || ss.insertSheet(&#8220;\u30a2\u30af\u30bb\u30b9\u30ed\u30b0&#8221;);<\/p>\n<p>if (log.getLastRow() === 0) log.appendRow([&#8220;\u65e5\u6642&#8221;,&#8221;\u30e6\u30fc\u30b6\u30fc&#8221;,&#8221;\u30b7\u30fc\u30c8&#8221;,&#8221;\u64cd\u4f5c&#8221;]);<\/p>\n<p>const user = (Session.getEffectiveUser() &amp;&amp; Session.getEffectiveUser().getEmail()) || &#8220;&#8221;;<\/p>\n<p>log.appendRow([new Date(), user, ss.getActiveSheet().getName(), action]);}<\/p>\n<h3>\u30c7\u30fc\u30bf\u306e\u6697\u53f7\u5316\u3068\u4fdd\u8b77<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u6a5f\u5bc6\u30c7\u30fc\u30bf\u306f\u30b7\u30fc\u30c8\u306b\u4fdd\u5b58\u3057\u306a\u3044\u304c\u539f\u5247\u3002<\/b><\/span>\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u307f\u4fdd\u5b58\u3057\u3001<\/p>\n<div class=\"summary-box\">\n<ul class=\"summary-box__list summary-box__list\">\n<li><strong>\u30b7\u30fc\u30c8\/\u7bc4\u56f2\u4fdd\u8b77\u3068\u8868\u793a\u5236\u9650\uff08\u95b2\u89a7\u306e\u307f\uff09<\/strong><\/li>\n<li><strong>\u5171\u6709\u306e\u6700\u5c0f\u5316\u30fb\u76e3\u67fb\u30ed\u30b0\u6d3b\u7528<\/strong><\/li>\n<li>\uff08\u5bfe\u5fdc\u30a8\u30c7\u30a3\u30b7\u30e7\u30f3\u306a\u3089\uff09<strong>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b5\u30a4\u30c9\u6697\u53f7\u5316(CSE)<\/strong><\/li>\n<li>\u3069\u3046\u3057\u3066\u3082\u30a2\u30d7\u30ea\u5074\u3067\u6697\u53f7\u5316\u3059\u308b\u5834\u5408\u306f\u3001<strong>\u5916\u90e8KMS\u3067\u7ba1\u7406\u3059\u308b\u9375 + \u5f37\u56fa\u306a\u6697\u53f7\uff08AES-256\u7b49\uff09\u3092\u63a1\u7528\u3057\u3001\u9375\u306fApps Script\u5916<\/strong>\u306b\u4fdd\u6301<br \/>\n\u2014 \u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002Base64\u30de\u30b9\u30ad\u30f3\u30b0\u4f8b\uff08\u3042\u304f\u307e\u3067\u201c\u53ef\u8aad\u6027\u6291\u5236\u201d\u7528\u9014\uff09\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002<\/li>\n<\/ul>\n<\/div>\n<p>function maskSensitiveData(rangeA1) {<\/p>\n<p>const sh = SpreadsheetApp.getActiveSheet();<\/p>\n<p>const r = sh.getRange(rangeA1);<\/p>\n<p>const vals = r.getValues().map(row =&gt; row.map(v =&gt;<\/p>\n<p>(typeof v === &#8216;string&#8217; &amp;&amp; v) ? Utilities.base64Encode(v) : v));<\/p>\n<p>r.setValues(vals);}<\/p>\n<h2>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u8acb\u6c42\u66f8\u696d\u52d9\u3092\u5b8c\u5168\u81ea\u52d5\u5316\u3057\u3066\u7af6\u4e89\u529b\u3092\u9ad8\u3081\u308b<\/h2>\n<p>Google\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u6d3b\u7528\u3057\u305f\u8acb\u6c42\u66f8\u306e\u4f5c\u6210\u30fb\u7ba1\u7406\u30fb\u5171\u6709\u30b7\u30b9\u30c6\u30e0\u3092\u5b8c\u5168\u306b\u69cb\u7bc9\u3059\u308b\u3053\u3068\u3067\u3001\u8acb\u6c42\u696d\u52d9\u306e\u52b9\u7387\u304c\u98db\u8e8d\u7684\u306b\u5411\u4e0a\u3057\u307e\u3059\u3002\u57fa\u672c\u7684\u306a\u8acb\u6c42\u66f8\u4f5c\u6210\u304b\u3089\u59cb\u307e\u308a\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u6d3b\u7528\u3001\u30c7\u30b6\u30a4\u30f3\u306e\u6700\u9069\u5316\u3001\u4f53\u7cfb\u7684\u306a\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9\u3001\u30bb\u30ad\u30e5\u30a2\u306a\u5171\u6709\u65b9\u6cd5\u307e\u3067\u3001\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u7d71\u5408\u3059\u308b\u3053\u3068\u3067\u3001\u30df\u30b9\u306e\u306a\u3044\u8fc5\u901f\u306a\u8acb\u6c42\u696d\u52d9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u81ea\u52d5\u5316\u6a5f\u80fd\u3092\u6700\u5927\u9650\u306b\u6d3b\u7528\u3057\u3001\u5b9a\u671f\u7684\u306a\u30b7\u30b9\u30c6\u30e0\u306e\u6539\u5584\u3092\u7d9a\u3051\u308b\u3053\u3068\u3067\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ed\u30fc\u306e\u6539\u5584\u3068\u9867\u5ba2\u6e80\u8db3\u5ea6\u306e\u5411\u4e0a\u3092\u540c\u6642\u306b\u9054\u6210\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u306f\u57fa\u672c\u7684\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u59cb\u3081\u3066\u3001\u6bb5\u968e\u7684\u306b\u81ea\u52d5\u5316\u3092\u9032\u3081\u3066\u3044\u304f\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u4f7f\u3048\u3070\u3001\u9ad8\u4fa1\u306a\u5c02\u7528\u30bd\u30d5\u30c8\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u7121\u6599\u3067\u672c\u683c\u7684\u306a\u8acb\u6c42\u66f8\u3092\u4f5c\u6210\u30fb\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002\u81ea\u52d5\u8a08\u7b97\u3084\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u624b\u4f5c\u696d\u306b\u3088\u308b\u30df\u30b9\u3092\u6e1b\u3089\u3057\u3001\u8acb\u6c42\u696d\u52d9\u306b\u304b\u304b\u308b\u6642\u9593\u3092\u5927\u5e45\u306b\u77ed\u7e2e\u3059 [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[51],"tags":[],"class_list":["post-20218","post","type-post","status-publish","format-standard","hentry","category-excel"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/posts\/20218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/comments?post=20218"}],"version-history":[{"count":8,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/posts\/20218\/revisions"}],"predecessor-version":[{"id":20570,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/posts\/20218\/revisions\/20570"}],"wp:attachment":[{"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/media?parent=20218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/categories?post=20218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/tags?post=20218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}