{"id":21092,"date":"2025-12-02T10:34:39","date_gmt":"2025-12-02T01:34:39","guid":{"rendered":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/?p=21092"},"modified":"2026-03-18T16:04:00","modified_gmt":"2026-03-18T07:04:00","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%82%92%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%a8%e3%81%97%e3%81%a6%e6%b4%bb%e7%94%a8%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/21092\/","title":{"rendered":"\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u6d3b\u7528\u3059\u308b\u306b\u306f\uff1f\u8a2d\u8a08\u304b\u3089\u904b\u7528\u307e\u3067\u5b8c\u5168\u30ac\u30a4\u30c9"},"content":{"rendered":"<p>Google\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\uff08Google Sheets\uff09\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u69cb\u7bc9\u30fb\u904b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30b9\u30c8\u3092\u6291\u3048\u306a\u304c\u3089\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001\u6b63\u898f\u5316\u3055\u308c\u305f\u30c6\u30fc\u30d6\u30eb\u8a2d\u8a08\u304b\u3089\u3001QUERY\u95a2\u6570\u3084VLOOKUP\u3092\u6d3b\u7528\u3057\u305f\u30c7\u30fc\u30bf\u64cd\u4f5c\u3001Google Apps Script\uff08GAS\uff09\u306b\u3088\u308b\u81ea\u52d5\u5316\u3001\u5916\u90e8\u9023\u643a\u307e\u3067\u3001\u5b9f\u52d9\u3067\u5373\u5ea7\u306b\u6d3b\u7528\u3067\u304d\u308b\u5305\u62ec\u7684\u306a\u624b\u6cd5\u3092\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<p>\u9069\u5207\u306a\u8a2d\u8a08\u3068\u904b\u7528\u306b\u3088\u308a\u3001\u5c0f\u898f\u6a21\u304b\u3089\u4e2d\u898f\u6a21\u306e\u30d3\u30b8\u30cd\u30b9\u306b\u6700\u9069\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n<div id=\"post-below-intro\"><\/div><h2>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3059\u308b\u624b\u9806\u3068\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u6d3b\u7528\u3059\u308b\u306b\u306f\u3001\u307e\u305a\u30c7\u30fc\u30bf\u306e\u69cb\u9020\u3092\u8a2d\u8a08\u3057\u3001\u9069\u5207\u306a\u30b7\u30fc\u30c8\u69cb\u6210\u3068\u30c6\u30fc\u30d6\u30eb\u5f62\u5f0f\u3067\u30c7\u30fc\u30bf\u3092\u6574\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/b><\/span> \u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6982\u5ff5\u3092\u5fdc\u7528\u3057\u306a\u304c\u3089\u3001\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u7279\u6709\u306e\u6a5f\u80fd\u3092\u6d3b\u304b\u3057\u305f\u8a2d\u8a08\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n<p>SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u307b\u3069\u306e\u9ad8\u5ea6\u306a\u6a5f\u80fd\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u30011,000\u4e07\u30bb\u30eb\u307e\u3067\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3048\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u5171\u540c\u7de8\u96c6\u3001\u81ea\u52d5\u4fdd\u5b58\u3001\u7248\u306e\u5c65\u6b74\uff08\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\uff09\u306a\u3069\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u7279\u306b\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u77e5\u8b58\u304c\u9650\u5b9a\u7684\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u3082\u3001\u95a2\u6570\u3084\u30d5\u30a3\u30eb\u30bf\u30fc\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\u304c\u53ef\u80fd\u3067\u3059\u3002\u521d\u671f\u6295\u8cc7\u306a\u3057\u3067\u59cb\u3081\u3089\u308c\u308b\u305f\u3081\u3001\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u3084\u5c0f\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u9078\u629e\u80a2\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<h3>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u306e\u57fa\u672c\u539f\u5247\u3068\u6b63\u898f\u5316<\/h3>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u52b9\u679c\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u69cb\u7bc9\u306e\u305f\u3081\u306e\u8a2d\u8a08\u539f\u5247<\/strong><\/span><\/div>\n<ol class=\"summary-box__list summary-box__list--number\">\n<li><strong>\u7b2c\u4e00\u6b63\u898f\u5316<\/strong>\uff1a\u7e70\u308a\u8fd4\u3057\u30c7\u30fc\u30bf\u3092\u6392\u9664\u3057\u3001\u5404\u30bb\u30eb\u306b\u5358\u4e00\u306e\u5024\u306e\u307f\u3092\u683c\u7d0d<\/li>\n<li><strong>\u7b2c\u4e8c\u6b63\u898f\u5316<\/strong>\uff1a\u90e8\u5206\u7684\u306a\u4f9d\u5b58\u95a2\u4fc2\u3092\u6392\u9664\u3057\u3001\u4e3b\u30ad\u30fc\u306b\u5b8c\u5168\u306b\u4f9d\u5b58\u3059\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u4f5c\u6210<\/li>\n<li><strong>\u7b2c\u4e09\u6b63\u898f\u5316<\/strong>\uff1a\u63a8\u79fb\u7684\u4f9d\u5b58\u3092\u6392\u9664\u3057\u3001\u30c7\u30fc\u30bf\u306e\u91cd\u8907\u3092\u6700\u5c0f\u5316<\/li>\n<\/ol>\n<\/div>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u4f8b\u3048\u3070\u3001\u9867\u5ba2\u7ba1\u7406\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3059\u308b\u5834\u5408<\/strong><\/span><\/div>\n<ol class=\"summary-box__list summary-box__list--number\">\n<li>\u9867\u5ba2\u30de\u30b9\u30bf\u30fc\u30b7\u30fc\u30c8\uff08\u9867\u5ba2ID\u3001\u540d\u524d\u3001\u9023\u7d61\u5148\uff09<\/li>\n<li>\u6ce8\u6587\u5c65\u6b74\u30b7\u30fc\u30c8\uff08\u6ce8\u6587ID\u3001\u9867\u5ba2ID\u3001\u5546\u54c1ID\u3001\u65e5\u4ed8\u3001\u6570\u91cf\uff09<\/li>\n<li>\u5546\u54c1\u30de\u30b9\u30bf\u30fc\u30b7\u30fc\u30c8\uff08\u5546\u54c1ID\u3001\u5546\u54c1\u540d\u3001\u5358\u4fa1\u3001\u5728\u5eab\u6570\uff09<\/li>\n<\/ol>\n<\/div>\n<p><span style=\"background-color: #ffff99;\"><b>\u3053\u306e\u3088\u3046\u306b\u8907\u6570\u306e\u30b7\u30fc\u30c8\u306b\u5206\u5272\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u3092\u4fdd\u3061\u306a\u304c\u3089\u3001\u52b9\u7387\u7684\u306a\u7ba1\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/b><\/span><\/p>\n<h3>\u30de\u30b9\u30bf\u30fc\u30c6\u30fc\u30d6\u30eb\u306e\u4f5c\u6210\u3068\u547d\u540d\u898f\u5247<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u30de\u30b9\u30bf\u30fc\u30c6\u30fc\u30d6\u30eb\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u57fa\u76e4\u3068\u306a\u308b\u91cd\u8981\u306a\u8981\u7d20\u3067\u3001\u4e00\u8cab\u6027\u306e\u3042\u308b\u547d\u540d\u898f\u5247\u3068\u69cb\u9020\u8a2d\u8a08\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002<\/b><\/span> \u5404\u30c6\u30fc\u30d6\u30eb\u306b\u306f\u5fc5\u305a\u4e3b\u30ad\u30fc\uff08\u30e6\u30cb\u30fc\u30afID\uff09\u3092\u8a2d\u5b9a\u3057\u3001\u30c7\u30fc\u30bf\u306e\u4e00\u610f\u6027\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002<\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u30de\u30b9\u30bf\u30fc\u30c6\u30fc\u30d6\u30eb\u4f5c\u6210\u306e\u624b\u9806<\/strong><\/span><\/div>\n<ol class=\"summary-box__list summary-box__list--number\">\n<li>\u30b7\u30fc\u30c8\u540d\u3092\u300cM_\u9867\u5ba2\u300d\u300cM_\u5546\u54c1\u300d\u306a\u3069\u3001\u7528\u9014\u304c\u660e\u78ba\u306a\u540d\u524d\u306b\u8a2d\u5b9a<\/li>\n<li>1\u884c\u76ee\u306b\u30d8\u30c3\u30c0\u30fc\uff08\u5217\u540d\uff09\u3092\u914d\u7f6e<\/li>\n<li>A\u5217\u306b\u4e3b\u30ad\u30fc\uff08ID\uff09\u3092\u914d\u7f6e\uff08\u81ea\u52d5\u63a1\u756a\u63a8\u5968\uff09<\/li>\n<li>\u30c7\u30fc\u30bf\u578b\u3092\u7d71\u4e00\uff08\u65e5\u4ed8\u3001\u6570\u5024\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u660e\u78ba\u306b\u533a\u5225\uff09<\/li>\n<li>\u30c7\u30fc\u30bf\u306e\u5165\u529b\u898f\u5247\u3092\u8a2d\u5b9a\u3057\u3066\u5165\u529b\u30df\u30b9\u3092\u9632\u6b62<\/li>\n<\/ol>\n<\/div>\n<p><strong>\u4e0d\u5909ID\u306e\u4ed8\u4e0e\u306f\u300c\u521d\u56de\u306e\u307f\u56fa\u5b9a\u300d\u65b9\u5f0f\u306b\u5909\u66f4<\/strong>\u3057\u307e\u3059\u3002<\/p>\n<p>\u63a8\u5968\u306f Apps Script \u306b\u3088\u308b\u4ed8\u4e0e\uff1a<\/p>\n<p>\/\/ A\u5217\uff08ID\uff09\u304c\u7a7a\u3067\u3001\u304b\u3064B\u5217\u306b\u5024\u304c\u5165\u3063\u305f\u884c\u306b\u4e00\u5ea6\u3060\u3051ID\u3092\u63a1\u756a<\/p>\n<p>function onEdit(e){<\/p>\n<p>if (!e || !e.range) return;<\/p>\n<p>const sh = e.range.getSheet();<\/p>\n<p>const r = e.range.getRow(), c = e.range.getColumn();<\/p>\n<p>if (c !== 2 || r === 1) return; \/\/ B\u5217\u5165\u529b\u6642\u3001\u30d8\u30c3\u30c0\u30fc\u9664\u5916<\/p>\n<p>const idCell = sh.getRange(r, 1); \/\/ A\u5217<\/p>\n<p>if (idCell.getValue() === &#8220;&#8221; &amp;&amp; e.range.getValue() !== &#8220;&#8221;) {<\/p>\n<p>const tz = Session.getScriptTimeZone();<\/p>\n<p>const stamp = Utilities.formatDate(new Date(), tz, &#8220;yyyyMMddHHmmss&#8221;);<\/p>\n<p>idCell.setValue(`CUST-${stamp}-${r}`); \/\/ \u4f8b\uff1a\u63a5\u982d\u8f9e+\u6642\u523b+\u884c\u3067\u30e6\u30cb\u30fc\u30af\u5316\u00a0}}<\/p>\n<p>\u203b \u95a2\u6570\u3060\u3051\u3067\u7121\u7406\u306b\u63a1\u756a\u3059\u308b\u5834\u5408\u306f\u4e0d\u5909\u6027\u3092\u4fdd\u8a3c\u3067\u304d\u307e\u305b\u3093\uff08\u63a8\u5968\u305b\u305a\uff09\u3002\u3069\u3046\u3057\u3066\u3082\u5f0f\u3067\u884c\u3046\u3068\u304d\u306f\u63a1\u756a\u5f8c\u306b\u5024\u8cbc\u308a\u4ed8\u3051\u3067\u56fa\u5b9a\u3059\u308b\u904b\u7528\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u30c6\u30fc\u30d6\u30eb\u306e\u69cb\u7bc9\u3068\u95a2\u9023\u4ed8\u3051<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u30c6\u30fc\u30d6\u30eb\u306f\u3001\u65e5\u3005\u306e\u53d6\u5f15\u3084\u6d3b\u52d5\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306e\u52d5\u7684\u306a\u30c6\u30fc\u30d6\u30eb\u3067\u3059\u3002<\/b><\/span>\u3053\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u30de\u30b9\u30bf\u30fc\u30c6\u30fc\u30d6\u30eb\uff08\u9867\u5ba2\u3001\u5546\u54c1\u3001\u90e8\u9580\u306a\u3069\u3001\u5909\u52d5\u306e\u5c11\u306a\u3044\u9759\u7684\u306a\u60c5\u5831\u3092\u6301\u3064\u30c6\u30fc\u30d6\u30eb\uff09\u3068\u9069\u5207\u306b\u95a2\u9023\u4ed8\u3051\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u3092\u4fdd\u3061\u3064\u3064\u3001\u8a73\u7d30\u306a\u5206\u6790\uff08\u58f2\u4e0a\u5206\u6790\u3001\u5728\u5eab\u7ba1\u7406\u306a\u3069\uff09\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h4>1. \u52b9\u7387\u7684\u306a\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u30c6\u30fc\u30d6\u30eb\u306e\u8a2d\u8a08<\/h4>\n<p>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u8a18\u9332\u306b\u304a\u3044\u3066\u306f\u3001\u30c7\u30fc\u30bf\u304c\u5165\u529b\u3055\u308c\u305f\u6642\u70b9\u306e\u60c5\u5831\u3092\u4fdd\u6301\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n<p>\u53d6\u5f15\u304c\u5b8c\u4e86\u3057\u305f\u65e5\u6642\u3092\u8a18\u9332\u3059\u308b\u5834\u5408\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u610f\u56f3\u305b\u305a\u518d\u8a08\u7b97\u3084\u7de8\u96c6\u306b\u3088\u3063\u3066\u65e5\u4ed8\u304c\u5909\u308f\u3063\u3066\u3057\u307e\u3046\u306e\u3092\u9632\u3050\u305f\u3081\u3001\u300c\u4e00\u5ea6\u3060\u3051\u56fa\u5b9a\u3059\u308b\u65b9\u5f0f\u300d\u3092\u63a1\u7528\u3057\u307e\u3059\u3002<\/p>\n<p><strong>\u4f8b\uff1a<\/strong>B\u5217\u306b\u5024\u304c\u5165\u3063\u305f\u3089C\u5217\u306b\u305d\u306e\u6642\u70b9\u306e\u65e5\u4ed8\u30fb\u6642\u523b\u3092\u8a18\u9332\u3057\u3001\u305d\u306e\u5f8c\u306f\u5909\u66f4\u3055\u308c\u306a\u3044\u3088\u3046\u56fa\u5b9a<\/p>\n<p><strong>\u5b9f\u88c5\u4f8b\uff08\u53cd\u5fa9\u8a08\u7b97\u3092\u5229\u7528\uff09\uff1a<\/strong><\/p>\n<p>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u53cd\u5fa9\u8a08\u7b97\u3092\u6709\u52b9\u306b\u3059\u308b<\/p>\n<p>\u300c\u30d5\u30a1\u30a4\u30eb\u300d\u2192\u300c\u8a2d\u5b9a\u300d\u2192\u300c\u8a08\u7b97\u300d\u2192\u300c\u53cd\u5fa9\u8a08\u7b97\u300d\u3067\u300c\u6700\u5927\u56de\u6570=1\u300d\u306a\u3069\u306b\u8a2d\u5b9a\u3002<\/p>\n<p>\u6570\u5f0f\uff08C2\u30bb\u30eb\uff09<\/p>\n<p>=IF(B2&lt;&gt;&#8221;&#8221;, IF(C2=&#8221;&#8221;, NOW(), C2), &#8220;&#8221;)<\/p>\n<p><strong>\u5b9f\u88c5\u4f8b\uff08\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5229\u7528\uff09\uff1a<\/strong><\/p>\n<p>Google Apps Script\u306e\u306e onEdit(e) \u30c8\u30ea\u30ac\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3001B\u5217\u304c\u7de8\u96c6\u3055\u308c\u305f\u969b\u306b\u3001\u5bfe\u5fdc\u3059\u308bC\u5217\u306b setValue(new Date()) \u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u3001\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u56fa\u5b9a\u8a18\u9332\u3057\u307e\u3059\u3002<\/p>\n<h4>2. \u5916\u90e8\u30ad\u30fc\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u5165\u529b\u691c\u8a3c<\/h4>\n<p>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u30c6\u30fc\u30d6\u30eb\u306b\u3001\u30de\u30b9\u30bf\u30fc\u30c6\u30fc\u30d6\u30eb\u306b\u5b58\u5728\u3059\u308bID\u306e\u307f\u3092\u5165\u529b\u3055\u305b\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u3092\u5c0e\u5165\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u300c\u30c7\u30fc\u30bf\u306e\u5165\u529b\u898f\u5247\u300d\u3092\u4f7f\u3063\u3066\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n<p>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u8868\u306e\u300c\u9867\u5ba2ID\u300d\u5217\u306b\u3001\u30de\u30b9\u30bf\u30fc\u9867\u5ba2\u8868\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u6709\u52b9\u306aID\u306e\u307f\u3092\u5165\u529b\u53ef\u80fd\u306b\u3059\u308b\u3002<\/p>\n<p>\u300c\u30c7\u30fc\u30bf\u306e\u5165\u529b\u898f\u5247\u300d\u2192\u300c\u30ab\u30b9\u30bf\u30e0\u6570\u5f0f\u300d<\/p>\n<p>\u30ab\u30b9\u30bf\u30e0\u6570\u5f0f \u306b\u6b21\u3092\u8a2d\u5b9a\uff08\u4f8b\uff1a\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u8868\u306e B2:B \u306b\u9867\u5ba2ID\u3092\u5165\u529b\u3059\u308b\u5834\u5408\uff1a<\/p>\n<p>=COUNTIF(M_\u9867\u5ba2!$A:$A, B2) &gt;= 1<\/p>\n<p>\u53c2\u7167\u7bc4\u56f2\u306f $\u4ed8\u304d\uff08\u7d76\u5bfe\uff09\u3001\u5224\u5b9a\u30bb\u30eb\u306f\u76f8\u5bfe\u53c2\u7167\uff08B2\uff09\u306b\u3057\u307e\u3059\u3002<\/p>\n<p>\u4f75\u305b\u3066 \u30d7\u30eb\u30c0\u30a6\u30f3\uff08\u7bc4\u56f2\u304b\u3089\u30ea\u30b9\u30c8\uff09 \u3092\u9867\u5ba2ID\u5217\u306b\u8a2d\u5b9a\u3059\u308b\u3068\u5165\u529b\u30df\u30b9\u3092\u3055\u3089\u306b\u6291\u6b62\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u4e3b\u30ad\u30fc\u306e\u4e00\u610f\u6027\u306f\u30de\u30b9\u30bf\u30fc\u5074\u3067\u5225\u9014\u691c\u8a3c\uff08\u4f8b\uff1a=COUNTIF($A:$A,A2)=1 \u3092\u691c\u8a3c\u30eb\u30fc\u30eb\u306b\uff09\u3002<\/p>\n<h2>QUERY\u95a2\u6570\u3092\u4f7f\u3063\u305f\u9ad8\u5ea6\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\u3068\u691c\u7d22\u65b9\u6cd5\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>QUERY\u95a2\u6570\u306f\u3001SQL\u98a8\u306e\u69cb\u6587\u3067\u30c7\u30fc\u30bf\u3092\u62bd\u51fa\u30fb\u96c6\u8a08\u3067\u304d\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3001\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/b><\/span> SELECT\u3001WHERE\u3001GROUP BY\u3001ORDER BY\u306a\u3069\u306e\u53e5\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u672c\u683c\u7684\u306a\u30c7\u30fc\u30bf\u5206\u6790\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n<p>QUERY\u95a2\u6570\u306e\u57fa\u672c\u69cb\u6587\uff1a<\/p>\n<p>=QUERY(\u30c7\u30fc\u30bf\u7bc4\u56f2, &#8220;SQL\u30af\u30a8\u30ea&#8221;, \u30d8\u30c3\u30c0\u30fc\u884c\u6570)<\/p>\n<p>\u3053\u306e\u95a2\u6570\u306b\u3088\u308a\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u77e5\u8b58\u304c\u306a\u304f\u3066\u3082\u3001SQL\u30e9\u30a4\u30af\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u8907\u6570\u6761\u4ef6\u3067\u306e\u7d5e\u308a\u8fbc\u307f\u3001\u96c6\u8a08\u3001\u30bd\u30fc\u30c8\u306a\u3069\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7684\u306a\u64cd\u4f5c\u306e\u591a\u304f\u3092\u30ab\u30d0\u30fc\u3057\u3066\u3044\u307e\u3059\u3002\u8907\u6570\u8868\u306e\u7d50\u5408\uff08JOIN\uff09\u306f\u975e\u5bfe\u5fdc\u306e\u305f\u3081\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066 \u914d\u5217\u30ea\u30c6\u30e9\u30eb\u3067\u4e8b\u524d\u306b\u7d50\u5408\u3057\u3066 1 \u3064\u306e\u7bc4\u56f2\u3092\u4f5c\u308b\u304b\u3001VLOOKUP\uff0fINDEX-MATCH\uff08XLOOKUP\uff09 \u3067\u53c2\u7167\u5217\u3092\u5f15\u304d\u5f53\u3066\u3066\u304b\u3089 QUERY \u3092\u9069\u7528\u3057\u307e\u3059\u3002<\/p>\n<p><strong>\u4f8b<\/strong>\uff08\u6a2a\u7d50\u5408\u3057\u3066\u304b\u3089\u96c6\u8a08\uff09\uff1a<\/p>\n<p>=QUERY({\u9867\u5ba2!A:C, \u6ce8\u6587!A:D}, &#8220;select Col1, sum(Col7) where Col1 is not null group by Col1&#8221;, 1)<\/p>\n<h3>SELECT\u53e5\u3068WHERE\u53e5\u306b\u3088\u308b\u6761\u4ef6\u62bd\u51fa<\/h3>\n<p>\u57fa\u672c\u7684\u306a\u30c7\u30fc\u30bf\u62bd\u51fa\u306e\u4f8b\uff1a<\/p>\n<p>=QUERY(A:F, &#8220;SELECT A, B, C WHERE D &gt; 1000 AND E = &#8216;\u5b8c\u4e86'&#8221;, 1)<\/p>\n<p>\u3053\u306e\u5f0f\u3067\u306f\u3001D\u5217\u304c1000\u3088\u308a\u5927\u304d\u304f\u3001\u304b\u3064E\u5217\u304c\u300c\u5b8c\u4e86\u300d\u306e\u30ec\u30b3\u30fc\u30c9\u304b\u3089\u3001A\u3001B\u3001C\u5217\u3092\u62bd\u51fa\u3057\u307e\u3059\u3002<\/p>\n<p>\u8907\u6570\u6761\u4ef6\u306e\u7d44\u307f\u5408\u308f\u305b\u4f8b\uff1a<\/p>\n<p>=QUERY(\u58f2\u4e0a\u30c7\u30fc\u30bf!A:G,<\/p>\n<p>&#8220;SELECT B, SUM(F)<\/p>\n<p>WHERE C &gt;= date &#8216;2024-01-01&#8217;<\/p>\n<p>AND C &lt;= date &#8216;2024-12-31&#8217;<\/p>\n<p>AND D CONTAINS &#8216;\u6771\u4eac&#8217;<\/p>\n<p>GROUP BY B<\/p>\n<p>ORDER BY SUM(F) DESC&#8221;, 1)<\/p>\n<h3>GROUP BY\u3068PIVOT\u53e5\u306b\u3088\u308b\u96c6\u8a08\u5206\u6790<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>GROUP BY\u53e5\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u7279\u5b9a\u306e\u5217\u3067\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3001\u96c6\u8a08\u95a2\u6570\uff08SUM\u3001AVG\u3001COUNT\u7b49\uff09\u3068\u7d44\u307f\u5408\u308f\u305b\u305f\u5206\u6790\u304c\u53ef\u80fd\u3067\u3059\u3002 <\/b><\/span>\u3055\u3089\u306bPIVOT\u53e5\u306b\u3088\u308a\u3001\u30af\u30ed\u30b9\u96c6\u8a08\u8868\u3082\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u6708\u5225\u58f2\u4e0a\u96c6\u8a08\u306e\u4f8b\uff1a<\/p>\n<p>=QUERY(A:D,<\/p>\n<p>&#8220;SELECT MONTH(A)+1, SUM(D)<\/p>\n<p>WHERE YEAR(A) = 2024<\/p>\n<p>GROUP BY MONTH(A)+1<\/p>\n<p>LABEL MONTH(A)+1 &#8216;\u6708&#8217;, SUM(D) &#8216;\u58f2\u4e0a'&#8221;, 1)<\/p>\n<p>\u30d4\u30dc\u30c3\u30c8\u30c6\u30fc\u30d6\u30eb\u306e\u4f5c\u6210\uff1a<\/p>\n<p>=QUERY(A:D, &#8220;SELECT B, SUM(D) GROUP BY B PIVOT C&#8221;, 1)<\/p>\n<p>\u3053\u306e\u5f0f\u306b\u3088\u308a\u3001B\u5217\u3067\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3001C\u5217\u306e\u5024\u3092\u5217\u3068\u3057\u3066\u5c55\u958b\u3057\u305f\u96c6\u8a08\u8868\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002<\/p>\n<h3>\u8907\u6570\u30b7\u30fc\u30c8\u306e\u30c7\u30fc\u30bf\u7d50\u5408\u3068JOIN\u64cd\u4f5c<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3067\u306f\u76f4\u63a5\u7684\u306aJOIN\u53e5\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c\u3001VLOOKUP\u3001INDEX\/MATCH\u3001\u307e\u305f\u306fIMPORTRANGE\u3068\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30c6\u30fc\u30d6\u30eb\u7d50\u5408\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/b><\/span><\/p>\n<p>\u4eee\u60f3\u7684\u306a LEFT JOIN \u306e\u5b9f\u88c5\uff1a<\/p>\n<p>=ARRAYFORMULA(<\/p>\n<p>IF(A2:A=&#8221;&#8221;,&#8221;&#8221;,<\/p>\n<p>{A2:A, B2:B,<\/p>\n<p>VLOOKUP(A2:A, M_\u9867\u5ba2!A:C, 2, FALSE),<\/p>\n<p>VLOOKUP(A2:A, M_\u9867\u5ba2!A:C, 3, FALSE)}))<\/p>\n<h3>\u52d5\u7684\u30af\u30a8\u30ea\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u5316\u3055\u308c\u305f\u691c\u7d22<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u30bb\u30eb\u53c2\u7167\u3092\u4f7f\u7528\u3057\u305f\u52d5\u7684\u306a\u30af\u30a8\u30ea\u69cb\u7bc9\u306b\u3088\u308a\u3001\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u306b\u57fa\u3065\u304f\u67d4\u8edf\u306a\u691c\u7d22\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/b><\/span><\/p>\n<p><strong>\uff08D\u5217\u304c\u65e5\u4ed8\u578b\u306e\u60f3\u5b9a\uff0f\u30d8\u30c3\u30c0\u30fc1\u884c\uff09<\/strong><\/p>\n<p>=QUERY(A:F,<\/p>\n<p>&#8220;select * where &#8221;<\/p>\n<p>&amp; &#8220;B contains &#8216;&#8221; &amp; SUBSTITUTE(G1,&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;) &amp; &#8220;&#8216; &#8221;<\/p>\n<p>&amp; IF(LEN(H1),&#8221; and D &gt;= date &#8216;&#8221; &amp; TEXT(H1,&#8221;yyyy-mm-dd&#8221;) &amp; &#8220;&#8216;&#8221;,&#8221;&#8221;)<\/p>\n<p>&amp; IF(LEN(I1),&#8221; and D &lt;= date &#8216;&#8221; &amp; TEXT(I1,&#8221;yyyy-mm-dd&#8221;) &amp; &#8220;&#8216;&#8221;,&#8221;&#8221;),\u00a01)<\/p>\n<p><strong>\uff08D\u5217\u304c\u6570\u5024\u578b\u306e\u60f3\u5b9a\uff09<\/strong><\/p>\n<p>=QUERY(A:F,<\/p>\n<p>&#8220;select * where &#8221;<\/p>\n<p>&amp; &#8220;B contains &#8216;&#8221; &amp; SUBSTITUTE(G1,&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;) &amp; &#8220;&#8216; &#8221;<\/p>\n<p>&amp; IF(LEN(H1),&#8221; and D &gt;= &#8221; &amp; H1,&#8221;&#8221;)<\/p>\n<p>&amp; IF(LEN(I1),&#8221; and D &lt;= &#8221; &amp; I1,&#8221;&#8221;),\u00a0\u00a01)<\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u30dd\u30a4\u30f3\u30c8<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u6587\u5b57\u5217\u6761\u4ef6\u306f SUBSTITUTE(G1,&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;) \u3067\u30a8\u30b9\u30b1\u30fc\u30d7\u3002<\/li>\n<li>\u5165\u529b\u304c\u7a7a\u306a\u3089\u6761\u4ef6\u6587\u3092\u9023\u7d50\u3057\u306a\u3044 IF(LEN(&#8230;), &#8221; and &#8230;&#8221;, &#8220;&#8221;) \u3067\u9811\u5065\u5316\u3002<\/li>\n<li>\u30ed\u30b1\u30fc\u30eb\u4f9d\u5b58\u306e\u533a\u5207\u308a\uff08\u5c0f\u6570\u70b9\/\u6841\u533a\u5207\u308a\uff09\u3092\u907f\u3051\u308b\u305f\u3081\u3001\u6570\u5024\u306f\u751f\u30bb\u30eb\u53c2\u7167\u306e\u307e\u307e\u9023\u7d50\u3059\u308b\u306e\u304c\u5b89\u5168\u3002<\/li>\n<\/ul>\n<\/div>\n<h2>\u30c7\u30fc\u30bf\u306e\u5165\u529b\u30d5\u30a9\u30fc\u30e0\u3068\u691c\u8a3c\u6a5f\u80fd\u306e\u5b9f\u88c5\u65b9\u6cd5\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u54c1\u8cea\u3092\u4fdd\u3064\u305f\u3081\u306b\u306f\u3001\u9069\u5207\u306a\u5165\u529b\u30d5\u30a9\u30fc\u30e0\u3068\u691c\u8a3c\u6a5f\u80fd\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002<\/b><\/span> Google\u30d5\u30a9\u30fc\u30e0\u3068\u306e\u9023\u643a\u3084\u3001\u30c7\u30fc\u30bf\u306e\u5165\u529b\u898f\u5247\u306b\u3088\u308a\u3001\u30a8\u30e9\u30fc\u306e\u5c11\u306a\u3044\u30c7\u30fc\u30bf\u5165\u529b\u74b0\u5883\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u30c7\u30fc\u30bf\u5165\u529b\u306e\u6a19\u6e96\u5316\u306b\u3088\u308a\u3001\u5f8c\u7d9a\u306e\u5206\u6790\u3084\u30ec\u30dd\u30fc\u30c8\u4f5c\u6210\u304c\u52b9\u7387\u5316\u3055\u308c\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5168\u4f53\u306e\u4fe1\u983c\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3068\u3001\u5805\u7262\u306a\u691c\u8a3c\u6a5f\u80fd\u306e\u30d0\u30e9\u30f3\u30b9\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n<h3>Google\u30d5\u30a9\u30fc\u30e0\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u5165\u529b\u30b7\u30b9\u30c6\u30e0<\/h3>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>Google\u30d5\u30a9\u30fc\u30e0\u3092\u5165\u529b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3068\u3057\u3066\u6d3b\u7528\u3059\u308b\u624b\u9806<\/strong><\/span><\/div>\n<ol class=\"summary-box__list summary-box__list--number\">\n<li>Google\u30d5\u30a9\u30fc\u30e0\u3092\u65b0\u898f\u4f5c\u6210<\/li>\n<li>\u5fc5\u8981\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8ffd\u52a0\uff08\u30c6\u30ad\u30b9\u30c8\u3001\u9078\u629e\u5f0f\u3001\u65e5\u4ed8\u7b49\uff09<\/li>\n<li>\u56de\u7b54\u3092\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306b\u63a5\u7d9a<\/li>\n<li>\u81ea\u52d5\u7684\u306b\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u4ed8\u304d\u3067\u30c7\u30fc\u30bf\u304c\u84c4\u7a4d<\/li>\n<li>Apps Script\u3067\u5f8c\u51e6\u7406\u3092\u81ea\u52d5\u5316<\/li>\n<\/ol>\n<\/div>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u30d5\u30a9\u30fc\u30e0\u306e\u5229\u70b9<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u5165\u529b\u753b\u9762\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u5bb9\u6613<\/li>\n<li>\u30e2\u30d0\u30a4\u30eb\u5bfe\u5fdc\u3067\u5916\u51fa\u5148\u304b\u3089\u3082\u5165\u529b\u53ef\u80fd<\/li>\n<li>\u5fc5\u9808\u9805\u76ee\u3084\u5f62\u5f0f\u30c1\u30a7\u30c3\u30af\u306e\u81ea\u52d5\u5316<\/li>\n<li>\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6a5f\u80fd\u306e\u6d3b\u7528<\/li>\n<\/ul>\n<\/div>\n<h3>\u30c7\u30fc\u30bf\u5165\u529b\u898f\u5247\u306b\u3088\u308b\u54c1\u8cea\u7ba1\u7406<\/h3>\n<p>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u30c7\u30fc\u30bf\u5165\u529b\u898f\u5247\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u305f\u691c\u8a3c\uff1a<\/p>\n<p><strong>\u30ea\u30b9\u30c8\u9078\u629e\u5f0f\u306e\u5b9f\u88c5\uff1a<\/strong>\u30c7\u30fc\u30bf \u2192 \u30c7\u30fc\u30bf\u306e\u5165\u529b\u898f\u5247 \u2192 \u30ea\u30b9\u30c8\u3092\u7bc4\u56f2\u304b\u3089 \u2192 \u30de\u30b9\u30bf\u30fc\u30b7\u30fc\u30c8\u306e\u8a72\u5f53\u5217\u3092\u6307\u5b9a<\/p>\n<p><strong>\u6570\u5024\u7bc4\u56f2\u306e\u5236\u9650\uff080\u301c1,000,000\u3092\u8a31\u53ef\uff09<\/strong><\/p>\n<p>=AND(A2&gt;=0, A2&lt;=1000000)<\/p>\n<p><strong>\u65e5\u4ed8\u306e\u59a5\u5f53\u6027\u30c1\u30a7\u30c3\u30af\uff08\u904e\u53bb30\u65e5\u4ee5\u5185\uff0f\u7a7a\u6b04\u53ef\uff09<\/strong><\/p>\n<p>=OR(A2=&#8221;&#8221;, AND(ISDATE(A2), A2&gt;=TODAY()-30))<\/p>\n<p><strong>\u91cd\u8907\u30c1\u30a7\u30c3\u30af\uff08\u7a7a\u6b04\u306f\u8a31\u53ef\u30fb\u5024\u306f\u4e00\u610f\uff09<\/strong><\/p>\n<p>=OR(A2=&#8221;&#8221;, COUNTIF($A$2:$A, A2)=1)<\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u30dd\u30a4\u30f3\u30c8<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u53c2\u7167\u7bc4\u56f2\u306f $A$2:$A \u306e\u3088\u3046\u306b\u7d76\u5bfe\u53c2\u7167\u3001\u5224\u5b9a\u30bb\u30eb\u306f \u76f8\u5bfe\u53c2\u7167\uff08A2\uff09\u3002<\/li>\n<li>\u7a7a\u6b04\u3092\u7981\u6b62\u3057\u305f\u3044\u5834\u5408\u306f OR(A2=&#8221;&#8221;, \u2026) \u3092\u5916\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ul>\n<\/div>\n<h3>\u6761\u4ef6\u4ed8\u304d\u66f8\u5f0f\u306b\u3088\u308b\u8996\u899a\u7684\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u6761\u4ef6\u4ed8\u304d\u66f8\u5f0f\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u306e\u72b6\u614b\u3092\u8272\u5206\u3051\u3057\u3066\u8868\u793a\u3057\u3001\u7570\u5e38\u5024\u3084\u91cd\u8981\u30c7\u30fc\u30bf\u3092\u5373\u5ea7\u306b\u8b58\u5225\u3067\u304d\u307e\u3059\u3002<\/b><\/span> \u8996\u899a\u7684\u306a\u7ba1\u7406\u306b\u3088\u308a\u3001\u30c7\u30fc\u30bf\u54c1\u8cea\u306e\u7dad\u6301\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u5b9f\u88c5\u4f8b<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>\u671f\u9650\u8d85\u904e\u30c7\u30fc\u30bf\u3092\u8d64\u8272\u3067\u5f37\u8abf<\/li>\n<li>\u5728\u5eab\u5207\u308c\u5546\u54c1\u3092\u9ec4\u8272\u3067\u8b66\u544a<\/li>\n<li>\u58f2\u4e0a\u76ee\u6a19\u9054\u6210\u3092\u7dd1\u8272\u3067\u8868\u793a<\/li>\n<li>\u91cd\u8907\u30c7\u30fc\u30bf\u3092\u30b0\u30ec\u30fc\u30a2\u30a6\u30c8<\/li>\n<\/ul>\n<\/div>\n<p>\u30ab\u30b9\u30bf\u30e0\u6570\u5f0f\u306b\u3088\u308b\u9ad8\u5ea6\u306a\u6761\u4ef6\u8a2d\u5b9a\uff1a<\/p>\n<p>=AND($E2=&#8221;\u672a\u51e6\u7406&#8221;, TODAY()-$D2&gt;7)<\/p>\n<p>\u3053\u306e\u5f0f\u306b\u3088\u308a\u30017\u65e5\u4ee5\u4e0a\u672a\u51e6\u7406\u306e\u30ec\u30b3\u30fc\u30c9\u304c\u81ea\u52d5\u7684\u306b\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u307e\u3059\u3002<\/p>\n<h3>\u30ab\u30b9\u30bf\u30e0\u5165\u529b\u753b\u9762\u306e\u4f5c\u6210\uff08\u30b5\u30a4\u30c9\u30d0\u30fc\u30fb\u30c0\u30a4\u30a2\u30ed\u30b0\uff09<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>Google Apps Script\u3092\u4f7f\u7528\u3057\u3066\u3001\u5c02\u7528\u306e\u5165\u529b\u753b\u9762\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/b><\/span>HTML\u3068JavaScript\u3067\u69cb\u7bc9\u3057\u305f\u30ab\u30b9\u30bf\u30e0UI\u306b\u3088\u308a\u3001\u3088\u308a\u6d17\u7df4\u3055\u308c\u305f\u5165\u529b\u4f53\u9a13\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u57fa\u672c\u7684\u306a\u5165\u529b\u30d5\u30a9\u30fc\u30e0\u306eGAS\u30b3\u30fc\u30c9\uff1a<\/p>\n<p>javascript<\/p>\n<p>function showInputDialog() {<\/p>\n<p>var html = HtmlService.createHtmlOutputFromFile(&#8216;InputForm&#8217;)<\/p>\n<p>.setWidth(400)<\/p>\n<p>.setHeight(300);<\/p>\n<p>SpreadsheetApp.getUi()<\/p>\n<p>.showModalDialog(html, &#8216;\u30c7\u30fc\u30bf\u5165\u529b\u30d5\u30a9\u30fc\u30e0&#8217;);}<\/p>\n<p>function saveData(formData) {<\/p>\n<p>var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(&#8216;\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9&#8217;);<\/p>\n<p>sheet.appendRow([new Date(), formData.name, formData.email, formData.amount]);<\/p>\n<p>return &#8220;\u4fdd\u5b58\u5b8c\u4e86&#8221;;}<\/p>\n<h2>Google Apps Script\u306b\u3088\u308b\u81ea\u52d5\u5316\u3068API\u9023\u643a\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>GAS\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u81ea\u52d5\u5316\u3001\u5916\u90e8\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u9023\u643a\u3001\u5b9a\u671f\u7684\u306a\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u30bf\u30b9\u30af\u306e\u5b9f\u884c\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/b><\/span> \u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u3088\u308a\u3001\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u9650\u754c\u3092\u5927\u304d\u304f\u62e1\u5f35\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u81ea\u52d5\u5316\u306b\u3088\u308a\u3001\u624b\u4f5c\u696d\u306b\u3088\u308b\u30a8\u30e9\u30fc\u3092\u524a\u6e1b\u3057\u3001\u696d\u52d9\u52b9\u7387\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30c8\u30ea\u30ac\u30fc\u6a5f\u80fd\u3068\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u300124\u6642\u9593365\u65e5\u7a3c\u50cd\u3059\u308b\u81ea\u52d5\u51e6\u7406\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>\u5b9a\u671f\u5b9f\u884c\u30c8\u30ea\u30ac\u30fc\u306b\u3088\u308b\u30c7\u30fc\u30bf\u66f4\u65b0<\/h3>\n<p>\u6642\u9593\u4e3b\u5c0e\u578b\u30c8\u30ea\u30ac\u30fc\u306e\u8a2d\u5b9a\u306b\u3088\u308a\u3001\u5b9a\u671f\u7684\u306a\u30c7\u30fc\u30bf\u51e6\u7406\u3092\u81ea\u52d5\u5316\uff1a<\/p>\n<p>javascript<\/p>\n<p>function setupTriggers() {<\/p>\n<p>\/\/ \u65e2\u5b58\u306e\u540c\u540d\u30cf\u30f3\u30c9\u30e9\u306e\u30c8\u30ea\u30ac\u30fc\u3092\u524a\u9664\u3057\u3066\u91cd\u8907\u9632\u6b62<\/p>\n<p>const names = new Set([&#8216;dailyDataUpdate&#8217;,&#8217;hourlySync&#8217;]);<\/p>\n<p>ScriptApp.getProjectTriggers().forEach(t =&gt; {<\/p>\n<p>if (names.has(t.getHandlerFunction())) ScriptApp.deleteTrigger(t);});<\/p>\n<p>\/\/ \u6bce\u65e5 09:00 \u5b9f\u884c\uff08\u78ba\u5b9a\u6642\u523b\uff09<\/p>\n<p>ScriptApp.newTrigger(&#8216;dailyDataUpdate&#8217;)<\/p>\n<p>.timeBased().atHour(9).everyDays(1).create();<\/p>\n<p>\/\/ \u6bce\u664200\u5206\u8fd1\u8fba\uff08\u53b3\u5bc6\u4fdd\u8a3c\u306f\u4e0d\u53ef\uff09<\/p>\n<p>ScriptApp.newTrigger(&#8216;hourlySync&#8217;)<\/p>\n<p>.timeBased().everyHours(1).nearMinute(0).create();}<\/p>\n<p>function dailyDataUpdate() {<\/p>\n<p>\/\/ \u30c7\u30fc\u30bf\u30af\u30ec\u30f3\u30b8\u30f3\u30b0<\/p>\n<p>cleanupDuplicates();<\/p>\n<p>\/\/ \u96c6\u8a08\u30ec\u30dd\u30fc\u30c8\u751f\u6210<\/p>\n<p>generateDailyReport();<\/p>\n<p>\/\/ \u30e1\u30fc\u30eb\u901a\u77e5<\/p>\n<p>sendNotification();}<\/p>\n<h3>\u5916\u90e8API\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30c7\u30fc\u30bf\u540c\u671f<\/h3>\n<p>REST API\u3092\u901a\u3058\u3066\u5916\u90e8\u30b7\u30b9\u30c6\u30e0\u3068\u30c7\u30fc\u30bf\u3092\u540c\u671f\uff1a<\/p>\n<p>javascript<\/p>\n<p>function syncWithExternalAPI() {<\/p>\n<p>const ss = SpreadsheetApp.getActive(); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u53f0\u5e33\u3092\u56fa\u5b9a<\/p>\n<p>const sheet = ss.getSheetByName(&#8216;\u5916\u90e8\u30c7\u30fc\u30bf&#8217;);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u660e\u793a\u7684\u306b\u5bfe\u8c61\u30b7\u30fc\u30c8<\/p>\n<p>if (!sheet) throw new Error(&#8216;\u30b7\u30fc\u30c8\u300c\u5916\u90e8\u30c7\u30fc\u30bf\u300d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093&#8217;);<\/p>\n<p>const token = PropertiesService.getScriptProperties().getProperty(&#8216;API_TOKEN&#8217;);<\/p>\n<p>if (!token) throw new Error(&#8216;API_TOKEN \u304c\u672a\u8a2d\u5b9a\u3067\u3059\uff08\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u4fdd\u5b58\uff09&#8217;);<\/p>\n<p>const baseUrl = &#8216;https:\/\/api.example.com\/data&#8217;;<\/p>\n<p>let url = baseUrl; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ ?page=2 \u7b49\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u60f3\u5b9a<\/p>\n<p>const headers = { Authorization: &#8216;Bearer &#8216; + token };<\/p>\n<p>\/\/ \u65e2\u5b58ID\u3092\u96c6\u5408\u3067\u4fdd\u6301\u3057\u3066\u51aa\u7b49\u306b<\/p>\n<p>const idCol = 1;\u00a0 \u00a0\/\/ A\u5217=ID<\/p>\n<p>const lastRow = sheet.getLastRow();<\/p>\n<p>const existing = new Set(<\/p>\n<p>lastRow &gt; 1 ? sheet.getRange(2, idCol, lastRow &#8211; 1, 1).getValues().map(r =&gt; String(r[0])) : []\u00a0);<\/p>\n<p>const rowsToAppend = [];<\/p>\n<p>const now = new Date();<\/p>\n<p>while (url) {<\/p>\n<p>const json = fetchJson_(url, { headers }); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u5931\u6557\u6642\u306f\u518d\u8a66\u884c<\/p>\n<p>const data = json.items || json.data || [];<\/p>\n<p>data.forEach(rec =&gt; {<\/p>\n<p>const id = String(rec.id);<\/p>\n<p>if (!existing.has(id)) {<\/p>\n<p>rowsToAppend.push([ id, rec.name || &#8221;, rec.value || &#8221;, now ]);<\/p>\n<p>existing.add(id); }});<\/p>\n<p>url = json.next || null; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ next\u30ea\u30f3\u30af\u304c\u7121\u3051\u308c\u3070\u7d42\u4e86<\/p>\n<p>\/\/ \u30ec\u30fc\u30c8\u5236\u9650\u306b\u914d\u616e\uff08\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8abf\u6574\uff09<\/p>\n<p>Utilities.sleep(200);}<\/p>\n<p>if (rowsToAppend.length) {<\/p>\n<p>const startRow = sheet.getLastRow() + 1;<\/p>\n<p>sheet.getRange(startRow, 1, rowsToAppend.length, rowsToAppend[0].length).setValues(rowsToAppend);<\/p>\n<p>sheet.getRange(startRow, 4, rowsToAppend.length, 1).setNumberFormat(&#8220;yyyy\/MM\/dd HH:mm:ss&#8221;);}}<\/p>\n<p>\/\/ \u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\u4ed8\u304d\u306e JSON \u53d6\u5f97<\/p>\n<p>function fetchJson_(url, options, maxRetry) {<\/p>\n<p>const opt = Object.assign({ muteHttpExceptions: true, followRedirects: true }, options || {});<\/p>\n<p>const tries = maxRetry || 5;<\/p>\n<p>for (let i = 0; i &lt; tries; i++) {<\/p>\n<p>const res = UrlFetchApp.fetch(url, opt);<\/p>\n<p>const code = res.getResponseCode();<\/p>\n<p>if (code &gt;= 200 &amp;&amp; code &lt; 300) return JSON.parse(res.getContentText());<\/p>\n<p>\/\/ 429\/5xx \u306f\u30d0\u30c3\u30af\u30aa\u30d5<\/p>\n<p>if (code === 429 || (code &gt;= 500 &amp;&amp; code &lt; 600)) Utilities.sleep(Math.pow(2, i) * 500 + Math.random()*500);<\/p>\n<p>else throw new Error(`HTTP ${code}: ${res.getContentText()}`);\u00a0}<\/p>\n<p>throw new Error(&#8216;\u30ea\u30c8\u30e9\u30a4\u4e0a\u9650\u306b\u9054\u3057\u307e\u3057\u305f: &#8216; + url);}<\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\/\u904b\u7528\u30e1\u30e2<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>API_TOKEN \u306f <strong>\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3<\/strong>\u306b\u4fdd\u5b58\uff08\u7de8\u96c6: \u30a8\u30c7\u30a3\u30bf\u2192\u300c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u300d\u2192\u300c\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u300d\uff09\u3002<\/li>\n<li>\u5fc5\u8981\u306b\u5fdc\u3058\u3066<strong> ETag \/ If-None-Match<\/strong> \u3067\u5dee\u5206\u53d6\u5f97\u3001<strong>updated_at<\/strong> \u3067\u306e\u5897\u5206\u540c\u671f\u3092\u5b9f\u88c5\u3002<\/li>\n<li>\u5927\u91cf\u30c7\u30fc\u30bf\u306f<strong>\u9010\u6b21 appendRow \u7981\u6b62\u3001\u30d0\u30c3\u30c1<\/strong> setValues \u3092\u5fb9\u5e95\u3002<\/li>\n<li>\u66f8\u304d\u8fbc\u307f\u524d\u306b<strong>\u30b7\u30fc\u30c8\u4fdd\u8b77\u30fb\u30c7\u30fc\u30bf\u691c\u8a3c<\/strong>\u3067\u54c1\u8cea\u62c5\u4fdd\u3002<\/li>\n<\/ul>\n<\/div>\n<h3>\u30ab\u30b9\u30bf\u30e0\u95a2\u6570\u306e\u4f5c\u6210\u3068\u6d3b\u7528<\/h3>\n<p>\u696d\u52d9\u56fa\u6709\u306e\u30ed\u30b8\u30c3\u30af\u3092\u30ab\u30b9\u30bf\u30e0\u95a2\u6570\u3068\u3057\u3066\u5b9f\u88c5\uff1a<\/p>\n<p>javascript<\/p>\n<p>\/**<\/p>\n<p>* <a href=\"https:\/\/biz.moneyforward.com\/accounting\/basic\/52041\/\" data-internallinksmanager029f6b8e52c=\"572\" title=\"\u6d88\u8cbb\u7a0e\">\u6d88\u8cbb\u7a0e<\/a>\u8fbc\u307f\u4fa1\u683c\u3092\u8a08\u7b97<\/p>\n<p>* @param {number} price \u7a0e\u629c\u4fa1\u683c<\/p>\n<p>* @param {number} taxRate \u7a0e\u7387\uff08\u7701\u7565\u6642\u306f0.1\uff09<\/p>\n<p>* @return {number} \u7a0e\u8fbc\u4fa1\u683c<\/p>\n<p>* @customfunction<\/p>\n<p>*\/<\/p>\n<p>\/**<\/p>\n<p>* \u6d88\u8cbb\u7a0e\u8fbc\u307f\u4fa1\u683c\u3092\u8a08\u7b97\uff08\u7aef\u6570\u51e6\u7406\u3092\u9078\u629e\u53ef\uff09<\/p>\n<p>* @param {number} price \u7a0e\u629c\u4fa1\u683c<\/p>\n<p>* @param {number=} taxRate \u7a0e\u7387\uff08\u7701\u7565\u6642 0.10\uff09<\/p>\n<p>* @param {string=} rounding \u7aef\u6570\u51e6\u7406: &#8220;floor&#8221;|&#8221;ceil&#8221;|&#8221;round&#8221;\uff08\u7701\u7565\u6642 &#8220;round&#8221;\uff09<\/p>\n<p>* @return {number} \u7a0e\u8fbc\u4fa1\u683c<\/p>\n<p>* @customfunction<\/p>\n<p>*\/<\/p>\n<p>function TAX_INCLUDED(price, taxRate, rounding) {<\/p>\n<p>const t = (typeof taxRate === &#8216;number&#8217;) ? taxRate : 0.10;<\/p>\n<p>const r = (rounding || &#8216;round&#8217;).toLowerCase();<\/p>\n<p>const v = price * (1 + t);<\/p>\n<p>switch (r) {<\/p>\n<p>case &#8216;floor&#8217;: return Math.floor(v);<\/p>\n<p>case &#8216;ceil&#8217; : return Math.ceil(v);<\/p>\n<p>default \u00a0 \u00a0 : return Math.round(v);}}<\/p>\n<p>\/**<\/p>\n<p>* \u55b6\u696d\u65e5\u3092\u8a08\u7b97<\/p>\n<p>* @param {Date} startDate \u958b\u59cb\u65e5<\/p>\n<p>* @param {number} days \u55b6\u696d\u65e5\u6570<\/p>\n<p>* @return {Date} \u7d42\u4e86\u65e5<\/p>\n<p>* @customfunction<\/p>\n<p>*\/<\/p>\n<p>\/**<\/p>\n<p>* \u55b6\u696d\u65e5\u3092\u8a08\u7b97\uff08\u795d\u65e5\u30fb\u9031\u672b\u30d1\u30bf\u30fc\u30f3\u30fb\u8ca0\u306e\u55b6\u696d\u65e5\u306b\u5bfe\u5fdc\uff09<\/p>\n<p>* @param {Date} startDate \u958b\u59cb\u65e5<\/p>\n<p>* @param {number} days \u52a0\u7b97\u3059\u308b\u55b6\u696d\u65e5\u6570\uff08\u8ca0\u6570\u3067\u904e\u53bb\u65b9\u5411\uff09<\/p>\n<p>* @param {Range|Array.&lt;Date&gt;=} holidays \u795d\u65e5\uff08\u53ef\u5909\u9577\u30fb\u4efb\u610f\uff09<\/p>\n<p>* @param {Array.&lt;number&gt;=} weekends \u9031\u672b\u306e\u66dc\u65e5\u914d\u5217\uff080=\u65e5 &#8230; 6=\u571f\u3002\u7701\u7565\u6642 [0,6]\uff09<\/p>\n<p>* @return {Date} \u7d42\u4e86\u65e5\uff08\u6642\u523b 00:00 \u56fa\u5b9a\uff09<\/p>\n<p>* @customfunction<\/p>\n<p>*\/<\/p>\n<p>function WORKDAY_CUSTOM(startDate, days, holidays, weekends) {<\/p>\n<p>const wk = Array.isArray(weekends) &amp;&amp; weekends.length ? weekends.map(Number) : [0, 6];<\/p>\n<p>const isWeekend = (d) =&gt; wk.includes(d.getDay());<\/p>\n<p>\/\/ \u795d\u65e5\u30bb\u30c3\u30c8\uff082D Range, 1D Array, \u5358\u5024\u306b\u5bfe\u5fdc\uff09<\/p>\n<p>const holSet = new Set();<\/p>\n<p>if (holidays) {<\/p>\n<p>const vals = (typeof holidays.getValues === &#8216;function&#8217;) ? holidays.getValues() : holidays;<\/p>\n<p>const flat = Array.isArray(vals[0]) ? vals.flat() : [].concat(vals);<\/p>\n<p>flat.forEach(v =&gt; {<\/p>\n<p>if (v) {<\/p>\n<p>const dt = new Date(v);<\/p>\n<p>dt.setHours(0,0,0,0);<\/p>\n<p>holSet.add(dt.getTime()); }});}<\/p>\n<p>const isHoliday = (d) =&gt; holSet.has(new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime());<\/p>\n<p>\/\/ \u57fa\u6e96\u65e5\u306e\u6642\u523b\u3092\u30af\u30ea\u30a2<\/p>\n<p>const cur = new Date(startDate);<\/p>\n<p>cur.setHours(0,0,0,0);<\/p>\n<p>const step = days &gt;= 0 ? 1 : -1;<\/p>\n<p>let remain = Math.abs(days);<\/p>\n<p>\/\/ startDate \u306f\u30ab\u30a6\u30f3\u30c8\u306b\u542b\u3081\u306a\u3044\uff08WORKDAY \u3068\u540c\u3058\u6d41\u5100\uff09<\/p>\n<p>while (remain &gt; 0) {<\/p>\n<p>cur.setDate(cur.getDate() + step);<\/p>\n<p>if (!isWeekend(cur) &amp;&amp; !isHoliday(cur)) {remain&#8211;;}}<\/p>\n<p>return cur;}<\/p>\n<p>\u5099\u8003\uff1a<strong>Google\u6a19\u6e96\u306e WORKDAY \/ NETWORKDAYS<\/strong> \u3067\u3082\u795d\u65e5\u9664\u5916\u306f\u53ef\u80fd\u3067\u3059\u304c\u3001<strong>\u9031\u672b\u30d1\u30bf\u30fc\u30f3\u5909\u66f4\u3084\u8ca0\u65b9\u5411<\/strong>\u306a\u3069\u306e\u62e1\u5f35\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u672c\u95a2\u6570\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<p>\u8fd4\u308a\u5024\u306f<strong> 00:00 <\/strong>\u306b\u6b63\u898f\u5316\u3057\u3066\u304a\u308a\u3001\u8868\u793a\u306f\u30b7\u30fc\u30c8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u4f9d\u5b58\u3057\u306b\u304f\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<h2>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u8003\u616e\u4e8b\u9805\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u306e\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306f\u3001\u9069\u5207\u306a\u6700\u9069\u5316\u306b\u3088\u308a\u3001\u6570\u4e07\u4ef6\u306e\u30ec\u30b3\u30fc\u30c9\u3067\u3082\u5b9f\u7528\u7684\u306a\u901f\u5ea6\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/b><\/span> \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u3068\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08\u306b\u3088\u308a\u3001\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u5236\u9650\u4e8b\u9805\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306a\u8a2d\u8a08\u3068\u904b\u7528\u306b\u3088\u308a\u3001\u3053\u308c\u3089\u306e\u5236\u9650\u5185\u3067\u6700\u5927\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5f15\u304d\u51fa\u3059\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n<h3>\u30c7\u30fc\u30bf\u91cf\u3068\u30bb\u30eb\u6570\u306e\u7ba1\u7406\u6226\u7565<\/h3>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u5916\u90e8\u53c2\u7167\u306e\u4e3b\u306a\u5236\u9650<\/strong><\/span><\/div>\n<ul class=\"summary-box__list summary-box__list\">\n<li>IMPORT \u7cfb\uff08IMPORTXML\/IMPORTHTML\/IMPORTDATA\/IMPORTFEED\uff09\uff1a1 \u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3042\u305f\u308a \u6700\u5927 50 \u500b\u3002<\/li>\n<li>IMPORTRANGE\uff1a\u4ed6\u30d6\u30c3\u30af\u53c2\u7167\u3067\u3042\u308a\u4e0a\u8a18\u300c50\u500b\u300d\u306b\u306f\u542b\u307e\u308c\u307e\u305b\u3093\u3002\u305f\u3060\u3057\u5927\u91cf\u914d\u7f6e\u306f\u8a08\u7b97\u8ca0\u8377\u30fb\u518d\u8a08\u7b97\u9045\u5ef6\u3092\u62db\u304f\u305f\u3081\u3001\u53c2\u7167\u3092\u96c6\u7d04\uff08\u4e2d\u9593\u30b7\u30fc\u30c8\u3067\u307e\u3068\u3081\u308b\uff0f\u7bc4\u56f2\u3092\u7d5e\u308b\uff0f\u5fc5\u8981\u7b87\u6240\u3060\u3051\u306b\u9650\u5b9a\uff09\u3059\u308b\u8a2d\u8a08\u3092\u63a8\u5968\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/div>\n<p>\u203b\u88dc\u8db3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/p>\n<div class=\"summary-box\">\n<ul class=\"summary-box__list summary-box__list\">\n<li><strong>IMPORTRANGE<\/strong> \u306e\u6700\u9069\u5316\n<ul>\n<li>\u53c2\u7167\u306f \u6700\u5c0f\u7bc4\u56f2\uff08\u5168\u5217 A:Z \u3067\u306f\u306a\u304f A2:F10000 \u306a\u3069\uff09\u306b\u9650\u5b9a\u3002<\/li>\n<li>\u96c6\u7d04\u30d6\u30ea\u30c3\u30b8\u7528\u30d6\u30c3\u30af\u3092\u631f\u307f\u3001\u8907\u6570\u5148\u304b\u3089\u306e\u53d6\u308a\u8fbc\u307f\u3092\u4e00\u5ea6\u307e\u3068\u3081\u3066\u304b\u3089\u914d\u4e0b\u306e\u30d6\u30c3\u30af\u3078\u914d\u4fe1\u3002<\/li>\n<li>\u983b\u7528\u3059\u308b\u5916\u90e8\u30c7\u30fc\u30bf\u306f \u6642\u9593\u4e3b\u5c0e\u30c8\u30ea\u30ac\u30fc\uff0bApps Script \u3067\u5b9a\u671f\u30b3\u30d4\u30fc\u3057\u3001\u95a2\u6570\u4f9d\u5b58\u3092\u6e1b\u3089\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u914d\u5217\u6570\u5f0f\u306e\u8ca0\u8377<\/strong>\uff1aARRAYFORMULA(VLOOKUP(&#8230;)) \u306f\u4ef6\u6570\u5206\u3060\u3051\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u8d70\u308b\u305f\u3081\u3001\u30ad\u30fc\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8cbc\u308b\uff08\u30de\u30b9\u30bf\u30fc\u5074\u3092 SORT \u3057\u3066 XLOOKUP\/INDEX-MATCH \u3092\u6d3b\u7528\uff09\u3001\u3042\u308b\u3044\u306f\u4e00\u6642\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u3063\u3066\u304b\u3089 QUERY \u3067\u96c6\u8a08\u3059\u308b\u306a\u3069\u3001\u4e8c\u6bb5\u69cb\u3048\u306b\u3059\u308b\u3068\u8a08\u7b97\u304c\u5b89\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<li><strong>\u5217\u5168\u4f53\u53c2\u7167\u306e\u56de\u907f<\/strong>\uff1a\u63d0\u793a\u3055\u308c\u3066\u3044\u308b\u3068\u304a\u308a\u3001A:A \u3067\u306f\u306a\u304f \u5b9f\u30c7\u30fc\u30bf\u7bc4\u56f2\u3078\u7d5e\u308b\u306e\u304c\u57fa\u672c\u3002\u52d5\u7684\u7d42\u7aef\u306f INDEX\uff0bMATCH \u3067\u5b89\u5168\u306b\u3002<\/li>\n<\/ul>\n<\/div>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u7ba1\u7406\u6226\u7565<\/strong><\/span><\/div>\n<ol class=\"summary-box__list summary-box__list--number\">\n<li><strong>\u30a2\u30fc\u30ab\u30a4\u30d6\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5<\/strong>\uff1a\u53e4\u3044\u30c7\u30fc\u30bf\u3092\u5225\u306e\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306b\u79fb\u52d5<\/li>\n<li><strong>\u30c7\u30fc\u30bf\u306e\u5727\u7e2e<\/strong>\uff1a\u4e0d\u8981\u306a\u7a7a\u767d\u884c\u30fb\u5217\u306e\u524a\u9664<\/li>\n<li><strong>\u96c6\u8a08\u30c7\u30fc\u30bf\u306e\u4e8b\u524d\u8a08\u7b97<\/strong>\uff1a\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u8a08\u7b97\u3092\u907f\u3051\u3001\u30d0\u30c3\u30c1\u51e6\u7406\u3067\u96c6\u8a08<\/li>\n<li><strong>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30b7\u30fc\u30c8\u306e\u4f5c\u6210<\/strong>\uff1a\u691c\u7d22\u7528\u306e\u8efd\u91cf\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u5225\u9014\u7ba1\u7406<\/li>\n<\/ol>\n<\/div>\n<h3>\u6570\u5f0f\u306e\u6700\u9069\u5316\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u6d3b\u7528<\/h3>\n<p>\u8a08\u7b97\u8ca0\u8377\u306e\u9ad8\u3044\u6570\u5f0f\u306e\u6700\u9069\u5316\uff1a<\/p>\n<p><strong>\u907f\u3051\u308b\u3079\u304d\u30d1\u30bf\u30fc\u30f3\uff1a<\/strong><\/p>\n<p>=SUMIF(A:A, &#8220;\u6761\u4ef6&#8221;, B:B)\u00a0 \/\/ \u5217\u5168\u4f53\u306e\u53c2\u7167\u306f\u91cd\u3044<\/p>\n<p><strong>\u63a8\u5968\u30d1\u30bf\u30fc\u30f3\uff1a<\/strong><\/p>\n<p>=SUMIF(A2:A1000, &#8220;\u6761\u4ef6&#8221;, B2:B1000)\u00a0 \/\/ \u5fc5\u8981\u306a\u7bc4\u56f2\u306e\u307f\u53c2\u7167<\/p>\n<p>\u914d\u5217\u6570\u5f0f\u306e\u52b9\u7387\u7684\u306a\u4f7f\u7528\uff1a<\/p>\n<p>=ARRAYFORMULA(IF(A2:A1000=&#8221;&#8221;, &#8220;&#8221;, VLOOKUP(A2:A1000, \u30c7\u30fc\u30bf!A:C, 3, FALSE)))<\/p>\n<p>\u4e00\u3064\u306e\u914d\u5217\u6570\u5f0f\u3067\u8907\u6570\u30bb\u30eb\u3092\u4e00\u62ec\u51e6\u7406\u3059\u308b\u3053\u3068\u3067\u3001\u500b\u5225\u306e\u6570\u5f0f\u3088\u308a\u9ad8\u901f\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>\u5206\u6563\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u6226\u7565<\/h3>\n<p><span style=\"background-color: #ffff99;\"><b>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8907\u6570\u306e\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306b\u5206\u6563\u3059\u308b\u3053\u3068\u3067\u3001\u8ca0\u8377\u5206\u6563\u3068\u53ef\u7528\u6027\u5411\u4e0a\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/b><\/span>\u00a0 \u30d7\u30e9\u30a4\u30de\u30ea\uff0f\u30ec\u30d7\u30ea\u30ab\u69cb\u6210\u3092\u201c\u7591\u4f3c\u7684\u201d\u306b\u5b9f\u73fe\u3059\u308b\u306b\u306f\u3001IMPORTRANGE \u3092\u7528\u3044\u305f\u8868\u793a\u7528\u306e\u8aad\u307f\u53d6\u308a\u30d3\u30e5\u30fc\u3068\u3057\u3066\u904b\u7528\u3057\u307e\u3059\uff08\u5373\u6642\u4e00\u8cab\u6027\u30fb\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306f\u975e\u4fdd\u8a3c\uff09\u3002<\/p>\n<p>\u53b3\u5bc6\u306b\u6574\u5408\u6027\u3092\u6c42\u3081\u308b\u5834\u5408\u306f\u3001\u6642\u9593\u4e3b\u5c0e\u30c8\u30ea\u30ac\u30fc\uff0bApps Script \u3067\u5b9a\u671f\u30b3\u30d4\u30fc\uff08\u5024\u8cbc\u308a\u4ed8\u3051\uff09\u306b\u3088\u308a\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u3001\u5909\u66f4\u691c\u51fa\uff08\u66f4\u65b0\u65e5\u6642\u30fbETag\uff09\u3067\u5897\u5206\u540c\u671f\u3059\u308b\u65b9\u5f0f\u3092\u63a8\u5968\u3057\u307e\u3059\u3002<\/p>\n<p>\u81ea\u52d5\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30af\u30ea\u30d7\u30c8\uff1a<\/p>\n<p>javascript<\/p>\n<p>function createBackup() {<\/p>\n<p>var source = SpreadsheetApp.getActiveSpreadsheet();<\/p>\n<p>var folder = DriveApp.getFolderById(&#8216;FOLDER_ID&#8217;);<\/p>\n<p>\/\/ \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306b\u5408\u308f\u305b\u308b\uff08\u63a8\u5968\uff09<\/p>\n<p>var tz = Session.getScriptTimeZone(); \/\/ \u4f8b: &#8220;Asia\/Tokyo&#8221;<\/p>\n<p>var date = Utilities.formatDate(new Date(), tz, &#8216;yyyyMMdd&#8217;);<\/p>\n<p>\/\/ \u3082\u3057\u304f\u306f\u56fa\u5b9a\u6307\u5b9a<\/p>\n<p>\/\/ var date = Utilities.formatDate(new Date(), &#8216;Asia\/Tokyo&#8217;, &#8216;yyyyMMdd&#8217;);<\/p>\n<p>source.makeCopy(&#8216;Backup_&#8217; + date, folder);<\/p>\n<p>\/\/ \u53e4\u3044\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u524a\u9664\uff0830\u65e5\u4ee5\u4e0a\u524d\uff09<\/p>\n<p>cleanOldBackups(folder, 30);}<\/p>\n<h2>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u306e\u5b9f\u88c5\u65b9\u6cd5\u306f\uff1f<\/h2>\n<p><span style=\"background-color: #ffff99;\"><b>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306f\u3001\u9069\u5207\u306a\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u8a2d\u5b9a\u3068\u3001\u30c7\u30fc\u30bf\u306e\u6697\u53f7\u5316\u3001\u76e3\u67fb\u30ed\u30b0\u306e\u5b9f\u88c5\u306b\u3088\u308a\u78ba\u4fdd\u3055\u308c\u307e\u3059\u3002<\/b><\/span> \u6a5f\u5bc6\u6027\u306e\u9ad8\u3044\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u591a\u5c64\u9632\u5fa1\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<h3>\u5171\u6709\u8a2d\u5b9a\u3068\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u7ba1\u7406<\/h3>\n<p><strong>\u968e\u5c64\u7684\u306a\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\uff1a<\/strong><\/p>\n<div class=\"summary-box\">\n<ol class=\"summary-box__list summary-box__list--number\">\n<li><strong>\u30aa\u30fc\u30ca\u30fc<\/strong>\uff1a\u5b8c\u5168\u306a\u7ba1\u7406\u6a29\u9650<\/li>\n<li><strong>\u7de8\u96c6\u8005<\/strong>\uff1a\u30c7\u30fc\u30bf\u306e\u8ffd\u52a0\u30fb\u7de8\u96c6\u30fb\u524a\u9664<\/li>\n<li><strong>\u30b3\u30e1\u30f3\u30c8\u53ef<\/strong>\uff1a\u30c7\u30fc\u30bf\u306e\u95b2\u89a7\u3068\u30b3\u30e1\u30f3\u30c8\u8ffd\u52a0<\/li>\n<li><strong>\u95b2\u89a7\u8005<\/strong>\uff1a\u8aad\u307f\u53d6\u308a\u5c02\u7528<\/li>\n<\/ol>\n<\/div>\n<p><strong>\u30b7\u30fc\u30c8\u30fb\u7bc4\u56f2\u4fdd\u8b77\u306b\u3088\u308b\u7d30\u304b\u3044\u5236\u5fa1\uff1a<\/strong><\/p>\n<p>javascript<\/p>\n<p>function protectMasterData() {<\/p>\n<p>var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(&#8216;M_\u9867\u5ba2&#8217;);<\/p>\n<p>var protection = sheet.protect().setDescription(&#8216;\u30de\u30b9\u30bf\u30fc\u30c7\u30fc\u30bf\u4fdd\u8b77&#8217;);<\/p>\n<p>\/\/ \u7279\u5b9a\u30e6\u30fc\u30b6\u30fc\u306e\u307f\u7de8\u96c6\u53ef\u80fd<\/p>\n<p>protection.removeEditors(protection.getEditors());<\/p>\n<p>protection.addEditor(&#8216;admin@example.com&#8217;);<\/p>\n<p>\/\/ \u7279\u5b9a\u306e\u7bc4\u56f2\u306f\u7de8\u96c6\u53ef\u80fd\u306b\u3059\u308b<\/p>\n<p>var unprotected = sheet.getRange(&#8216;E:E&#8217;);<\/p>\n<p>protection.setUnprotectedRanges([unprotected]);}<\/p>\n<h3>\u30c7\u30fc\u30bf\u306e\u6697\u53f7\u5316\u3068\u6a5f\u5bc6\u60c5\u5831\u306e\u4fdd\u8b77<\/h3>\n<h4>A. \u4fdd\u7ba1\u3057\u306a\u3044\uff08\u63a8\u5968\uff09\uff1a\u30c8\u30fc\u30af\u30f3\u5316 or \u30cf\u30c3\u30b7\u30e5\u5316\u3067\u4e00\u81f4\u7167\u5408\u306e\u307f<\/h4>\n<p>\/**<\/p>\n<p>* \u30bb\u30f3\u30b7\u30c6\u30a3\u30d6\u5024\u306e\u7167\u5408\u7528\u30cf\u30c3\u30b7\u30e5\uff08\u4e0d\u53ef\u9006\uff09<\/p>\n<p>* salt\u306fScript Properties\u7b49\u3067\u5b89\u5168\u4fdd\u7ba1<\/p>\n<p>*\/<\/p>\n<p>function hashSensitive_(plain) {<\/p>\n<p>const salt = PropertiesService.getScriptProperties().getProperty(&#8216;SALT&#8217;);<\/p>\n<p>const bytes = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, salt + String(plain));<\/p>\n<p>return Utilities.base64Encode(bytes); \/\/ \u4fdd\u5b58\u306f\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u307f}<\/p>\n<h4>B. \u3069\u3046\u3057\u3066\u3082\u6697\u53f7\u5316\u304c\u5fc5\u8981\u306a\u5834\u5408\uff1aCloud KMS \u306e\u5229\u7528\uff08\u4f8b\uff09<\/h4>\n<p>\u203b GCP \u3067 KMS \u30ad\u30fc\u3092\u4f5c\u6210\u3057\u3001Advanced Service: CloudKMS \u3092\u6709\u52b9\u5316\u306e\u4e0a\u3001\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u6a29\u9650\u3092\u4ed8\u4e0e\u3002<\/p>\n<p>\/\/ KMS\u3067\u6697\u53f7\u5316\uff08AES-GCM\u7b49\uff09\u3002\u623b\u308a\u5024\u306fBase64\u306eciphertext<\/p>\n<p>function encryptWithKMS_(plaintext) {<\/p>\n<p>const name = &#8216;projects\/PROJECT_ID\/locations\/global\/keyRings\/RING\/cryptoKeys\/KEY&#8217;;<\/p>\n<p>const res = CloudKMS.Projects.Locations.KeyRings.CryptoKeys.encrypt(<\/p>\n<p>{ plaintext: Utilities.base64Encode(Utilities.newBlob(plaintext).getBytes()) },<\/p>\n<p>name);<\/p>\n<p>return res.ciphertext; \/\/ Base64}<\/p>\n<p>\/\/ \u5fa9\u53f7<\/p>\n<p>function decryptWithKMS_(ciphertextB64) {<\/p>\n<p>const name = &#8216;projects\/PROJECT_ID\/locations\/global\/keyRings\/RING\/cryptoKeys\/KEY&#8217;;<\/p>\n<p>const res = CloudKMS.Projects.Locations.KeyRings.CryptoKeys.decrypt(<\/p>\n<p>{ ciphertext: ciphertextB64 },<\/p>\n<p>name);<\/p>\n<p>return Utilities.newBlob(Utilities.base64Decode(res.plaintext)).getDataAsString();}<\/p>\n<p>\u4ee3\u66ff\u3068\u3057\u3066\u3001CryptoJS(AES) \u3092\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u3057\u3066HTML\u30b5\u30fc\u30d3\u30b9\u306b\u540c\u68b1\u3057\u3001<strong>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u3067\u6697\u53f7\u5316\u2192\u30b5\u30fc\u30d0\u4fdd\u5b58<\/strong>\uff08\u9375\u306fKMS\/Secret Manager\u3067\u914d\u5e03\uff09\u306a\u3069\u3092\u691c\u8a0e\u3002<\/p>\n<p>function maskSensitiveData(value) {<\/p>\n<p>if (value == null) return value;<\/p>\n<p>const s = String(value);<\/p>\n<p>\/\/ \u533a\u5207\u308a\uff08\u7a7a\u767d\u30fb\u30cf\u30a4\u30d5\u30f3\uff09\u3092\u4e00\u65e6\u9664\u53bb\u3057\u3066\u6841\u30c1\u30a7\u30c3\u30af<\/p>\n<p>const digits = s.replace(\/[s-]\/g, &#8221;);<\/p>\n<p>if (\/^d{13,19}$\/.test(digits)) {<\/p>\n<p>const last4 = digits.slice(-4);<\/p>\n<p>\/\/ 4\u6841\u533a\u5207\u308a\u8868\u793a\uff08\u4f8b\uff09\uff1a**** **** **** 1234<\/p>\n<p>return &#8216;**** **** **** &#8216; + last4;}<\/p>\n<p>return value;}<\/p>\n<p>\u672c\u756a\u904b\u7528\u3067\u306f\u30ed\u30b0\u30fb\u76e3\u67fb\u30fb\u8868\u793a\u3059\u3079\u3066\u3067\u751f\u5024\u3092\u6271\u308f\u306a\u3044\u65b9\u91dd\uff08\u4fdd\u5b58\u306f\u30c8\u30fc\u30af\u30f3 or \u30cf\u30c3\u30b7\u30e5\u3001\u8868\u793a\u306f\u6700\u5f8c\u306e4\u6841\u306e\u307f\uff09\u306b\u7d71\u4e00\u3002<\/p>\n<h3>\u76e3\u67fb\u30ed\u30b0\u3068\u30d0\u30fc\u30b8\u30e7\u30f3\u5c65\u6b74\u306e\u6d3b\u7528<\/h3>\n<p><strong>\u5b89\u5168\u306a\u76e3\u67fb\u30ed\u30b0\uff08\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u578b onEdit\u3001\u5024\u306e\u8d64\u7dda\u30fb\u30d0\u30c3\u30c1\u66f8\u304d\u8fbc\u307f\uff09<\/strong><\/p>\n<p>\/\/ \u76e3\u67fb\u5bfe\u8c61\u5916\u306e\u30b7\u30fc\u30c8\/\u5217\u306f\u9069\u5b9c\u30db\u30ef\u30a4\u30c8\u30ea\u30b9\u30c8\u3067\u5236\u5fa1<\/p>\n<p>const AUDIT_SHEET_NAME = &#8216;\u76e3\u67fb\u30ed\u30b0&#8217;;<\/p>\n<p>const REDACT_COLS = new Set([\/* \u6570\u5024: 1=A,2=B,&#8230; \u6a5f\u5fae\u5217\u756a\u53f7\u3092\u5217\u6319 *\/]);<\/p>\n<p>function onEdit(e) {<\/p>\n<p>if (!e || !e.range) return;<\/p>\n<p>const logSheet = e.source.getSheetByName(AUDIT_SHEET_NAME);<\/p>\n<p>if (!logSheet) return;<\/p>\n<p>const sh = e.range.getSheet();<\/p>\n<p>const row = e.range.getRow();<\/p>\n<p>const col = e.range.getColumn();<\/p>\n<p>const h \u00a0 = e.range.getNumRows();<\/p>\n<p>const w \u00a0 = e.range.getNumColumns();<\/p>\n<p>\/\/ \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u578b\u30c8\u30ea\u30ac\u30fc\u306a\u3089 e.user \u304c\u5165\u308b\uff08\u74b0\u5883\u306b\u3088\u308a\u7a7a\u306e\u3053\u3068\u3082\uff09<\/p>\n<p>const who = (e.user &amp;&amp; e.user.getEmail) ? e.user.getEmail() : (Session.getActiveUser().getEmail() || &#8221;);<\/p>\n<p>const now = new Date();<\/p>\n<p>const rows = [];<\/p>\n<p>\/\/ \u8907\u6570\u30bb\u30eb\u7de8\u96c6\u306b\u5bfe\u5fdc\u3002oldValue\u306f\u5358\u4e00\u30bb\u30eb\u306e\u307f\u63d0\u4f9b\u3055\u308c\u308b\u4ed5\u69d8\u306e\u305f\u3081\u3001\u65e7\u5024\u306f\u7701\u7565\/\u518d\u8aad\u8fbc\u3067\u5bfe\u5fdc<\/p>\n<p>for (let r = 0; r &lt; h; r++) {<\/p>\n<p>for (let c = 0; c &lt; w; c++) {<\/p>\n<p>const target = sh.getRange(row + r, col + c);<\/p>\n<p>const newVal = target.getValue(); \/\/ \u5b9f\u5024\u3092\u518d\u53d6\u5f97<\/p>\n<p>const a1 = target.getA1Notation();<\/p>\n<p>const sheetName = sh.getName();<\/p>\n<p>\/\/ \u6a5f\u5fae\u5217\u306f\u30de\u30b9\u30af<\/p>\n<p>const loggedValue = REDACT_COLS.has(col + c) ? &#8216;[REDACTED]&#8217; : String(newVal).slice(0, 200);<\/p>\n<p>rows.push([ now, who, sheetName, a1, loggedValue ]);}}<\/p>\n<p>if (rows.length) {<\/p>\n<p>const start = logSheet.getLastRow() + 1;<\/p>\n<p>logSheet.getRange(start, 1, rows.length, rows[0].length).setValues(rows);<\/p>\n<p>logSheet.getRange(start, 1, rows.length, 1).setNumberFormat(&#8220;yyyy\/MM\/dd HH:mm:ss&#8221;);}}<\/p>\n<div class=\"summary-box\">\n<ul class=\"summary-box__list summary-box__list\">\n<li><strong>\u5024\u306e\u5168\u6587\u4fdd\u5b58\u3092\u907f\u3051\u308b<\/strong>\uff08\u6a5f\u5fae\u5217\u306f [REDACTED]\u3001\u305d\u308c\u4ee5\u5916\u3082\u9577\u3055\u5236\u9650\uff09\u3002<\/li>\n<li><strong>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u578b\u30c8\u30ea\u30ac\u30fc<\/strong>\u3067 e.user \u3092\u6d3b\u7528\uff08\u7d44\u7e54\u3068\u6a29\u9650\u8981\u4ef6\u306b\u4f9d\u5b58\uff09\u3002<\/li>\n<li><strong>\u8907\u6570\u30bb\u30eb\u7de8\u96c6<\/strong>\u306b\u5bfe\u5fdc\u3057\u3001<strong>\u307e\u3068\u3081\u3066<\/strong> setValues\u3002<\/li>\n<li>\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\uff08\u53e4\u3044\u30ed\u30b0\u524a\u9664\uff09\u3084<strong>\u5c02\u7528\u30d6\u30c3\u30af\u306b\u9694\u96e2\u3001\u6a29\u9650\u5236\u5fa1<\/strong>\u3082\u63a8\u5968\u3002<\/li>\n<\/ul>\n<\/div>\n<h2>\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u4e8b\u4f8b\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306f\uff1f<\/h2>\n<p>\u5b9f\u969b\u306e\u696d\u52d9\u3067\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6d3b\u7528\u3059\u308b\u969b\u306e\u3001\u5177\u4f53\u7684\u306a\u69cb\u7bc9\u4f8b\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002 <span style=\"background-color: #ffff99;\"><b>\u6210\u529f\u4e8b\u4f8b\u304b\u3089\u5b66\u3076\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u5b9f\u88c5\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/b><\/span><\/p>\n<h3>\u9867\u5ba2\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9\u4f8b<\/h3>\n<p>\u5c0f\u898f\u6a21\u30d3\u30b8\u30cd\u30b9\u5411\u3051CRM\u306e\u5b9f\u88c5\uff1a<\/p>\n<div class=\"summary-box\">\n<div class=\"summary-box__title\"><span class=\"summary-box__title_tag\"><strong>\u5fc5\u8981\u306a\u30b7\u30fc\u30c8\u69cb\u6210<\/strong><\/span><\/div>\n<ol class=\"summary-box__list summary-box__list--number\">\n<li>M_\u9867\u5ba2\uff08\u9867\u5ba2ID\u3001\u4f1a\u793e\u540d\u3001\u62c5\u5f53\u8005\u3001\u9023\u7d61\u5148\uff09<\/li>\n<li>T_\u5546\u8ac7\uff08\u5546\u8ac7ID\u3001\u9867\u5ba2ID\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u3001\u91d1\u984d\u3001\u78ba\u5ea6\uff09<\/li>\n<li>T_\u6d3b\u52d5\u5c65\u6b74\uff08\u6d3b\u52d5ID\u3001\u9867\u5ba2ID\u3001\u65e5\u6642\u3001\u7a2e\u5225\u3001\u5185\u5bb9\uff09<\/li>\n<li>V_\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\uff08\u5404\u7a2eKPI\u306e\u53ef\u8996\u5316\uff09<\/li>\n<\/ol>\n<\/div>\n<p>\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u7528\u306e\u96c6\u8a08\u30af\u30a8\u30ea\uff1a<\/p>\n<p>=QUERY(T_\u5546\u8ac7!A:F,<\/p>\n<p>&#8220;SELECT E, COUNT(A), SUM(D)<\/p>\n<p>WHERE F = &#8216;\u9032\u884c\u4e2d&#8217;<\/p>\n<p>GROUP BY E<\/p>\n<p>LABEL E &#8216;\u62c5\u5f53\u8005&#8217;, COUNT(A) &#8216;\u5546\u8ac7\u6570&#8217;, SUM(D) &#8216;\u898b\u8fbc\u307f\u91d1\u984d'&#8221;, 1)<\/p>\n<h3>\u5728\u5eab\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5<\/h3>\n<p>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u5728\u5eab\u7ba1\u7406\u306e\u69cb\u7bc9\uff1a<\/p>\n<p><strong>\u81ea\u52d5\u767a\u6ce8\u70b9\u7ba1\u7406\uff1a<\/strong><\/p>\n<p>javascript<\/p>\n<p>function checkReorderPoint() {<\/p>\n<p>var sheet = SpreadsheetApp.getActiveSpreadsheet()<\/p>\n<p>.getSheetByName(&#8216;M_\u5546\u54c1&#8217;);<\/p>\n<p>var data = sheet.getDataRange().getValues();<\/p>\n<p>for (var i = 1; i &lt; data.length; i++) {<\/p>\n<p>var currentStock = data[i][3];\u00a0 \/\/ \u73fe\u5728\u5eab<\/p>\n<p>var reorderPoint = data[i][4];\u00a0 \/\/ \u767a\u6ce8\u70b9<\/p>\n<p>if (currentStock &lt;= reorderPoint) {<\/p>\n<p>sendReorderNotification(data[i][0], data[i][1], currentStock); }}}<\/p>\n<h3>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9<\/h3>\n<p>\u30bf\u30b9\u30af\u7ba1\u7406\u3068\u30ea\u30bd\u30fc\u30b9\u914d\u5206\u306e\u6700\u9069\u5316\uff1a<\/p>\n<p><strong>\u30ac\u30f3\u30c8\u30c1\u30e3\u30fc\u30c8\u751f\u6210\uff1a<\/strong><\/p>\n<p>=SPARKLINE(<\/p>\n<p>{\u958b\u59cb\u65e5-TODAY(), \u671f\u9593},<\/p>\n<p>{&#8220;charttype&#8221;,&#8221;bar&#8221;;&#8221;max&#8221;,\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u671f\u9593;&#8221;color1&#8243;,&#8221;white&#8221;;&#8221;color2&#8243;,&#8221;blue&#8221;})<\/p>\n<h2>\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u904b\u7528\u3067\u30d3\u30b8\u30cd\u30b9\u3092\u52a0\u901f\u3059\u308b<\/h2>\n<p>Google\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u6d3b\u7528\u3059\u308b\u3053\u3068\u306f\u3001\u521d\u671f\u6295\u8cc7\u3092\u6291\u3048\u306a\u304c\u3089\u3001\u67d4\u8edf\u3067\u62e1\u5f35\u6027\u306e\u3042\u308b\u30c7\u30fc\u30bf\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u512a\u308c\u305f\u9078\u629e\u80a2\u3067\u3059\u3002\u9069\u5207\u306a\u30c6\u30fc\u30d6\u30eb\u8a2d\u8a08\u3068\u6b63\u898f\u5316\u306b\u3088\u308a\u57fa\u76e4\u3092\u6574\u3048\u3001QUERY\u95a2\u6570\u306b\u3088\u308b\u9ad8\u5ea6\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\u3001Google Apps Script\u306b\u3088\u308b\u81ea\u52d5\u5316\u3001\u305d\u3057\u3066\u5805\u7262\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u6a5f\u80fd\u306b\u8fd1\u3044\u74b0\u5883\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316\u3068\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u8a2d\u8a08\u306b\u3088\u308a\u3001\u6570\u4e07\u4ef6\u898f\u6a21\u306e\u30c7\u30fc\u30bf\u3067\u3082\u5b9f\u7528\u7684\u306a\u901f\u5ea6\u3067\u904b\u7528\u53ef\u80fd\u3067\u3059\u3002\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u4e8b\u4f8b\u3092\u53c2\u8003\u306b\u3001\u9867\u5ba2\u7ba1\u7406\u3001\u5728\u5eab\u7ba1\u7406\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u306a\u3069\u3001\u69d8\u3005\u306a\u696d\u52d9\u9818\u57df\u3067\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u696d\u52d9\u52b9\u7387\u306e\u5927\u5e45\u306a\u5411\u4e0a\u3068\u30c7\u30fc\u30bf\u30c9\u30ea\u30d6\u30f3\u306a\u610f\u601d\u6c7a\u5b9a\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u7d99\u7d9a\u7684\u306a\u6539\u5584\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306b\u3088\u308a\u3001\u30d3\u30b8\u30cd\u30b9\u306e\u6210\u9577\u306b\u5408\u308f\u305b\u3066\u9032\u5316\u3059\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\uff08Google Sheets\uff09\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u69cb\u7bc9\u30fb\u904b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30b9\u30c8\u3092\u6291\u3048\u306a\u304c\u3089\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001\u6b63\u898f\u5316\u3055\u308c\u305f\u30c6\u30fc\u30d6\u30eb\u8a2d\u8a08\u304b\u3089\u3001QUERY\u95a2\u6570\u3084V [&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-21092","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\/21092","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=21092"}],"version-history":[{"count":6,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/posts\/21092\/revisions"}],"predecessor-version":[{"id":21360,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/posts\/21092\/revisions\/21360"}],"wp:attachment":[{"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/media?parent=21092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/categories?post=21092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/biz.moneyforward.com\/work-efficiency\/basic\/wp-json\/wp\/v2\/tags?post=21092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}