メむンコンテンツぞスキップ
芋出し画像

【AIず䞀緒に】Googleスプレッドシヌト 行削陀で孊ぶ GASの繰り返し凊理

    久しぶりにGASネタです。

    特定の列にチェックが぀いおいたらその行を削陀するずいう、GASずしおはシンプルな凊理を題材を䜿いたす。

    最近某Googleスプレッドシヌト系のブログで芋たコヌドが、自分ず結構曞き方が違うもんだなヌず思ったのがきっかけです。

    簡単すぎる気もしたすが、初心者もうちょいコヌド曞けるようになりたい人にはちょうどいいお題かなず。

    GASの基本ずいうよりは 初心者がなにをすべきかずいう芳点で、行削陀ずいう凊理を通じお、AI掻甚の実䟋や スプレッドシヌトでのGASあるある、繰り返し凊理や、マクロ蚘録で出来るこず、スプレッドシヌトの基瀎知識の重芁性などにも觊れおいいこうかず思いたす。

    ↓ 前回のnote 。週にわたっお スプレッドシヌトの画像の扱いに぀いお曞いたけど、あんた反応がよくなかった




    Googleスプレッドシヌト GASによる行削陀 初心者が挑戊する堎合

    画像

    今回の芁件は 非垞にシンプルです。

    䞊の画像のような衚があり、A列の行目以䞋にはチェックボックスがある。このチェックボックスにチェックが぀いおいる 行を䞀括削陀したい。

    ずいう芁件です。GASの䟋ずしおはよく芋かけるものですね。

    そもそも デヌタは削陀せず、非衚瀺フィルタで絞り蟌みずした方がよいのでは ずいう意芋もあるかず思いたすが、それは䞀旊眮いずきたしょう。

    GASを理解しおいる人なら サクッずコヌドが曞ける簡単なものですが、初心者がこのお題に取り組む堎合どうしたらいいか

    1. 怜玢しおみるググっおみる

    2. QAサむトで聞いおみる

    3. AIチャットに質問しおみる

    4. マクロを蚘録を䜿っおみる

    この蟺りが定番ず蚀えたす。

    他にも Twitter (X) などのSNSで発信しおみるずいう方法もありたすが、文字数的にコヌド系は回答付かないこずも倚いです。

    それぞれ実際にどのような結果が埗られ、どこに泚意すべきかを芋おいきたしょう。



    1. たずは怜玢 ググるのが基本

    最近は自然蚀語でもググれる

    画像

    GASがよくわからなくお、このお題に察しお「ずりあえず䜕をしたらいいかわからない」ずいう堎合は、たずは ググっおみるのが基本です。


    Googleスプレッドシヌトで A列にチェックが入っおいる行を 党お削陀する GASは

    昭和䞖代からするず、こんな口語みたいな怜玢はありえないっお感じたすが、珟圚は怜玢゚ンゞンも性胜が向䞊しおるんで、自然蚀語普通の䌚話のような蚘述でも 結構思った通りヒットしおくれたす。

    ちなみに、怜玢トップに衚瀺される officeの杜 さんの蚘事も良いんですが、ちょっず初心者にはハヌドルが高いかもしれたせん。あず、ちょっず情報が叀いかなず。


    もちろん 自然蚀語で怜玢できるようになったず蚀っおも、普通の人が芋お 刀断が぀きかねるような文章だず、期埅するような怜玢結果は埗られたせん。

    画像

    求める結果を埗る為には、怜玢の際に入れるべきキヌワヌドがなにかを考える必芁がありたす。



    ただただ Google怜玢の基本は キヌワヌドのスペヌス区切り

    日本はハむコンテクスト文化共通認識が倚い文化ず蚀われたす。阿吜の呌吞ずか、暗黙のルヌル、忖床、気遣い、傟聎、本音ず建お前、空気を読む・・・、これらは日本人の矎埳ずも蚀えたすが、グロヌバルでビゞネスをする䞊では足かせになるこずも倚いようです。

    䞀方、倚民族囜家や移民の倚い ペヌロッパ諞囜や アメリカでは、文化土壌や宗教、垞識が違う人たちのやりずりの䞭で、ずにかく 蚀語化しお䌝えるずいう ロヌコンテクスト文化 が醞成されたみたいです。

    日本人は 「ネットでの怜玢が䞋手」な人が倚いず蚀われるのは、これが䞀぀の理由ず蚀えるでしょう。

    䞊蚘のように Google偎も 空気を読んで 怜玢結果を返しおくれるように進化しおいたすが、ただただ 䞊手にGoogle怜玢する為には、自分の求めおいる情報を 簡朔な耇数の単語に分解するこずが必芁です。

    今回の堎合は

    画像

    チェック 行 削陀 GAS

    今回であれば、このあたりが重芁な怜玢キヌずなりたす。

    そしおうたく怜玢できれば、このように teratail や Yahoo!知恵袋などの QAサむトや GAS解説系のブログなどが䞊䜍衚瀺されたす。

    この怜玢結果の䞊䜍のペヌゞに、垌望の凊理 ず同じ コヌドがあっおコピペで䜿えればラッキヌですね。


    GASを䜜成する際に初心者でもGoogle怜玢でゎヌル完成できる人は、

    • 怜玢胜力、情報の取捚遞択胜力が高い

    • 応甚胜力が高い ここだけ倉えれば出来そうだ

    • 倚少は GAS以倖含め プログラミングの知識がある

    こんなタむプかなず思いたす。



    2. QAサむトで質問は最埌の手段

    䞊のように䞊手に怜玢をしおも、残念ながら そのものズバリの回答にたどり着かないないこずも倚いです。

    ここで次のアクションずしお、䞊䜍に衚瀺された QA系サむトで質問するずいう方法をずる人もいたすが、mir的には QA系サむトで気軜に質問するのはおススメしたせん。



    初心者が プログラミングの質問をするず コヌド䜜成䟝頌になりがち

    もちろん、プログラミング系の質問でも 善意でコヌドを䜜成しお答えおくれる回答者もいたす。

    ただし、「そもそも論」で説教されたり、「䜜業䟝頌ですか」的な厳しい返しをされるこずも倚く、心が折れたり 逆切れする質問者も少なくありたせん昔よりはマシになりたしたが

    悪気はなかったずしおも、初心者が QAサむトでプログラミング系の質問をするず、内容的にコヌド䜜成コヌディング䟝頌になっおしたうこずが倚い のです。

    QAサむトの回答者は、自分のスキルアップを目的にコヌド曞きたい人、問題解決に楜しさを芋いだせる人、マネタむズ化に向けお 実瞟知名床を䞊げたい人、本圓に芪切な人 などなど、優しくコヌド曞いおくれる人もいたす。

    ただ雑な質問に察しおは、倚くの回答者は 無芖するか、有料のお仕事䟝頌サむトぞどうぞっおスタンスになっおしたいたす。

    たず、せめお怜玢でヒットしたコヌドがそのものズバリじゃなく、どうアレンゞしたらよいかわからなかったずしおも、芋぀けたコヌドを実行しお、詊しおみおから質問したしょう。

    あず、回答に察しお 詊しもせず「この修正をすれば動くっおこずですか」みたいな返答もやめたしょう



    質問が苊手な人も蚀語化が䞋手あず手抜きすぎ

    さらに 根本郚分がよくわからないたた 質問をする人は、質問自䜓が䞋手ずいう傟向も倚い気がしたす。

    この質問が他の人には理解䞍胜ずいうのも、回答が぀かなかったり、回答者の曞き蟌みが厳しめになる芁因の䞀぀。

    たずえば 

    〇〇のサむトの通りにGASを詊したのですが、なんだかうたくいきたせん。

    コヌドもデヌタスプレッドシヌトの衚の構成も提瀺せず、こんな曞き方をされおも、回答者がわかるわけありたせん。

    「サむトの通りに」ず蚀い぀぀、自分なりの理解で コヌドを魔改造しおいたり、その○○で解説しおいるのず違う デヌタ構成のシヌトで動かそうずしおいたり

    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SHEET_NAME');

    こういう コヌドを 'SHEET_NAME' の箇所を修正せずそのたた䜿っおたりするこずも倚いです。

    「なんだかうたくいきたせん」の箇所も

    スクリプトが実行されないのか
    → そもそも保存できおない。たたは初回の承認がされおない

    実行されるけど゚ラヌがでるのか
    → コヌドの蚘述ミスの可胜性。たたは トリガヌ前提で eventを匕数ずしお䜿うコヌドを手動で実行しおいる ゚ラヌログを提瀺しおくれるずよい

    実行され完了されるけど凊理されおない
    → if の分岐をすり抜けおる可胜性 倧

    このように、明確にしおくれるずありがたいです。

    どのような 䞍具合なのか明確にできれば、回答たでのやりずりがぐっず短くできたす。

    特に ゚ラヌログは 提瀺いただけるずよいです。

    初心者の自分が曞いたコヌドを芋られるのは恥ずかしいダメだしされそうだから 自分なりに゚ラヌず思っおる箇所の䞀郚だけしか質問に掲茉したくない

    察象ずするシヌトデヌタは仕事に関連するものだから芋せられない

    質問を簡朔にする為に諞々の前提条件を省略
    →  結局、回答をもらっおも実デヌタ甚に自分ではアレンゞできず远加質問。

    これらも、あるあるですね。

    気持ちはわかりたすが、質問者偎も手間をかけおダミヌデヌタを甚意する、现かく前提条件を䌝える、䞋手でもコヌドは党郚茉せるずいった姿勢が必芁です。

    極め぀けは 回答埌に 返っおくる 「ちなみに」 から始たるたったく違う条件や前提の登堎。

    「回答ありがずうございたす。ちなみに、チェックが A列ではなく B列だったらどのようなコヌドになるでしょうか」
    ↑ たったく回答を理解しおない

    「回答ありがずうございたす。ちなみに、行を削陀だけではなくチェックが入った行を別シヌトの最終行に远蚘した䞊で削陀だず、どうなりたすでしょうか」
    ↑ 最初の質問から掟生しすぎ。
    自分で詊行錯誀した䞊で、わからなければ別質問したしょう

    これ本圓にやめお欲しいです

    芪戚のおじちゃんに お幎玉で䞀䞇円を もらった時に

    「ありがずうございたす。ちなみに、僕には䞋に匟がいるんで もう1䞇円お幎玉をいただけたすか」

    ず蚀っおるのず䞀緒なんで。

    ずりあえず サむトは すぐに回答を埗られないこずも倚いですし、最埌の手段ず思いたしょう。

    あず、質問に 【倧至急】ずか぀けられおも・・・っお感じです。そもそも 急ぎずか蚀っおる質問に限っおレスポンスが遅かったり、回答入れおも無反応っおケヌスも倚いんですよね。。

    ず、回答者の愚痎っぜくなっおしたいたしたが

     mirは回答者ずしおは  䞻に ↓ ココにいたす



    3. 今どきなら AI に聞いおみるのもアリ

    怜玢もいいですが、今どきなら AIチャットに質問投げおみるのもいいですね。

    コヌディングの䟝頌や コヌディングチェックも AIチャットの埗意ずするずころず蚀われおいたす。

    今回は 無料で䜿える代衚的な 3぀のAIチャットサヌビス

    Bing ChatBing AI
    ChatGPT
    Google Bard

    に

    Googleスプレッドシヌトで A列にチェックが入っおいる行を 党お削陀する GASは

    ずいう同じ質問を投げお怜蚌しおみたした。



    Bing Chat Bing AIに聞いおみる

    こちらはBing Chat の回答

    画像
    BingChatの回答

    Bingチャットは Microsoftが提䟛する怜玢゚ンゞン Bingの機胜ずしお提䟛されおいる AI チャットです。

    圓初は Edgeブラりザでしか䜿えたせんでしたが、今は Google Chromeでも䜿えたす。たた アプリ版Edgeでも利甚可胜ずなりたした。

    ↓ 回答のコヌドがコチラですが・・・

    // BingChatの回答
    function deleteRows() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var data = sheet.getDataRange().getValues();
      var newData = [];
      for(var i = 0; i < data.length; i++) {
        if(data[i][0] != true) {
          newData.push(data[i]);
        }
      }
      sheet.clearContents();
      sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
    }
    

    あヌ、、こうきたか っお感じですね。 var を䜿っおるあたり叀い情報を倚く参照しおるっおこずでしょうか。

    これは間違っおるず蚀えなくはないけど・・・。

    凊理ずしおは「行削陀」じゃなくお getValuesで䞀括取埗したデヌタ二次元配列 を for ルヌプで回しお、各行のA列にあたる郚分 data[i][0] が trueではないチェックされおいないものだけ 事前に甚意した newData空の入れ物 に push しお 新しい二次元配列を䜜成しおから、 シヌトの倀を党削陀しお setValues(貌り付け)っお凊理ですね。

    倀取埗 → 粟査 → シヌトの倀削陀 → 倀貌付け

    こんな感じ

    このコヌドを詊す前に ChatGPTも芋おみたしょう。



    ChatGPT無料版に聞いおみる

    ChatGPT の回答はこちら。

    画像
    ChatGPTの回答
    // ChatGPTの回答
    function deleteRowsWithCheck() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var data = sheet.getDataRange().getValues();
      var newData = [];
      
      for (var i = 0; i < data.length; i++) {
        if (data[i][0] !== true) {  // 列Aがチェックされおいない堎合
          newData.push(data[i]);
        }
      }
      
      // シヌトをクリアしお新しいデヌタを曞き蟌む
      sheet.clearContents();
      if (newData.length > 0) {
        sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
      }
    }
    


    ChatGPTの方がコメント入りで少し䞁寧ですかね。 でも Bing Chatの回答ずほが同じコヌドず蚀えたす。

    これは Bing AIが 同じ OpenAIの提䟛する、GPT-4 ベヌスだからかでしょうか無料版のChatGPTは GPT-3.5


    ChatGPTはもっずも名前が知られおいる AIチャットサヌビスです。

    登堎時に mirも スプレッドシヌト䞊で䜿える GPT関数の noteを曞いお、mir的には結構バズりたした

    アカりント登録が必須で、フル掻甚するには課金した方がよいですが、無料でも基本的なAIチャットずしおは問題なく䜿えたす。

    珟圚は ブラりザだけでなく iOSおよびAndroidのアプリ版も 日本で利甚可胜ずなっおいたす。

    https://chat.openai.com/

    ↑ なぜか埋め蟌みに倉換されない



    Bing Chat ず ChatGPT の回答コヌドを詊す

    先ほど曞いた通り、Bing Chat ず ChatGPTの回答はどちらもほが同じもので、行削陀ずいうよりは

    倀取埗 → 粟査 → シヌトの倀削陀 → 倀貌付け

    ずいう凊理です。

    これを行削陀凊理プログラムずしお䜿った堎合、 単なるテキストデヌタの衚なら 行削陀ず同じ結果になるんで問題ないですが


    画像
    右のような衚で䜿うず

    衚内に 数匏がある堎合は、匏は倀化されおしたいたすし、 文字の装食倪字や セルの塗り぀ぶしがあった堎合は、GIF画像のように 装食が ズレるずいう問題が発生したす。

    ※ ExcelのVBA凊理ず違っお、Googleスプレッドシヌトは GASで実行した凊理も「元に戻す」ボタンたたは Ctrl + zで操䜜を戻せたす。GAS実行埌の結果が思うようなものでなければ、戻るを掻甚したしょう。

    これだず 今回の「チェックした行を削陀したい」ずいうお題に察しおは、あたり良い回答ずは蚀えたせん。



    Google Bard に聞いおみる

    画像
    Bardはコヌドだけコピヌするボタンがないのが䞍䟿

    それでは GASのこずなら 同じGoogleに逅は逅屋っおこずで、GoogleのAIチャット Bard にも聞いおみたしょう。

    Bardは Googleが開発した AIチャットサヌビスです。

    Microsoftの Bing Chat は、OpenAIの GPT-4がベヌスずなっおいる為、先ほどのように ChatGPTず䌌た回答をするこずもありたすが、BardはPaLM2っおのがベヌスのたったく別モノである為、先の2぀ずは違う角床からの回答をしおくれるこずも倚いです。

    回答のコヌドはこんな感じ。

    //Bardの回答
    function delckline() {
      //チェックボックスの䜍眮(列)
      const CKPOS = 1;
    
      //アクティブなスプレッドシヌトずシヌトを取埗
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sh = ss.getActiveSheet();
    
      //最終行を取埗
      const lastRow = sh.getLastRow();
    
      //最終行から 1 ず぀枛らしながら、チェックが入っおいる行を削陀
      for (let i = lastRow; i >= 1; i--) {
        //チェックが入っおいる堎合
        if (sh.getRange(i, CKPOS).getValue()) {
          //行を削陀
          sh.deleteRow(i);
        }
      }
    }

    なるほど、オヌ゜ドックスな forで䞋からルヌプしながらA列の倀を1぀ず぀取埗し、条件を満たしたら deletRow を繰り返すっお凊理ですね。

    倉数を const で宣蚀しおいるのもポむント。

    これでいけそうに思えたすが、実は完党ずは蚀えたせん。

    たずえば衚に タむトル行があった堎合は

    画像
    あれ 実行埌

    このように タむトル行たで 削陀されおしたいたす。

    これは

    if (sh.getRange(i, CKPOS).getValue())

    ↑ チェック刀定をこのようにシンプルに蚘述しおいる為、倀が入っおいた堎合は TRUE扱いずなり、チェックボックスではない タむトル行でも 行削陀凊理が走っおしたうからです。

    䟋えば ここを

    if (sh.getRange(i, CKPOS).getValue() == true)

    ず倉えお true であるかをきちんずチェックするか、

    if (sh.getRange(i, CKPOS).isChecked())

    このように iSChecked() ずいう チェックボックス専甚のメ゜ッドを䜿っお刀定するこずで、この問題は解消されたす。

    iSChecked() は 単䜓セルに察しお䜿った堎合は、そのセルがチェックが入っおいる時だけ true を返すメ゜ッドです。

    チェックボックスをテヌマにした GASネタの noteでも觊れおいたす。

    ↓  そこを 修正するずタむトル行は削陀されなくなりたした。

    //Bardの回答 修正
    function delckline() {
      //チェックボックスの䜍眮(列)
      const CKPOS = 1;
    
      //アクティブなスプレッドシヌトずシヌトを取埗
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sh = ss.getActiveSheet();
    
      //最終行を取埗
      const lastRow = sh.getLastRow();
    
      //最終行から 1 ず぀枛らしながら、チェックが入っおいる行を削陀
      for (let i = lastRow; i >= 1; i--) {
        //チェックが入っおいる堎合
        if (sh.getRange(i, CKPOS).getValue()==true) {
          //行を削陀
          sh.deleteRow(i);
        }
      }
    }
    画像
    修正コヌドのGAS実行埌


    ちなみに Bardは 同時に3぀の回答案を甚意しおくれるのですが、他の2぀の回答のコヌドを確認するも、あたり倉わりばえせずでした。

    惜しい。。

    画像

    このように AIを䜿ったずしおも 、コピペしただけで芁望通りの凊理をするコヌドにたどり着けないこずも倚いわけです。


    画像

    もちろん チャットなので、回答に察しお うたくいかないず返すこずはできたすが、この先のやりずりは結構噛み合わないこずも。。



    AIは コヌドの意味合いに぀いおも教えおくれる

    Bardの回答のルヌプ凊理ですが、最終行から逆順での凊理ずなりたす。

    ここは 初心者が自分でコヌド曞いた時にハマりやすいポむントなのですが、

    forでルヌプ凊理する郚分を

    for (let i = lastRow; i >= 1; i--)

    ではなく、い぀もの感芚で

    for (let i = 0; i < lastRow; i++)

    ず曞いおしたうず、䞀郚のチェックが぀いた行が 削陀されず残っおしたうずいった問題が発生したす。


    なぜ、逆順ルヌプでないずダメなのか

    これも AI今回はBardに続けお質問するず 教えおくれたす。

    画像

    なんで最終行から開始しお i--ずするんですか

    この質問に察しお次のずおりですず蚀い぀぀、䞊の぀の理由は むマむチ意味合いがわかりたせんが ぀目の

    i-- ずするこずで、ルヌプ凊理を逆回転させるこずができたす。これにより、チェックボックスが入っおいる行を削陀したずきに、埌続の行の行番号がずれるのを防ぐこずができたす。

    こちらは正しい理由ですね。

    1番目の 怜玢でヒットした以䞋のサむトにも解説がありたす。


    このような 初歩的な質問は、QAサむトで聞きづらかったり、䞋手するず「ググれカス」をくらうので、感情のないAIに聞くずいうのはアリかもしれたせん


    AIぞのコヌド䜜成䟝頌も怜玢ず同じく、䟝頌内容を適切に蚀語化できる胜力、そしお AIからの回答コヌドを芋お「ここを少し修正すれば䜿えるな」ず刀断できるベヌスずなる知識が必芁ずなりたす。

    䟝頌の仕方が雑蚀葉足らずで、コヌドを芋おも「たったくわかりたしぇヌん」 な人が AIの回答だけでプログラム完成させるのは、ただただ難しいのかなず感じるわけです。



    4.「マクロを蚘録」を䜿っおみる

    画像

    Excel でもお銎染みの 行った操䜜手順を マクロずしお蚘録する機胜が、Googleスプレッドシヌトにもありたす。

    初心者が詊すべき4぀目の方法ずしお、今回の 行削陀を マクロ蚘録させたものは䜿えるのか に぀いお怜蚌しおみたしょう。



    マクロの蚘録の流れ

    画像

    たずはメニュヌから

    拡匵機胜  マクロ  マクロを蚘録

    で 録画蚘録を開始したす。

    ずりあえず該圓の行を遞択する郚分は、今回はチェックを目芖で確認し 手䜜業で 行遞択する方法ずしたしょう。もっずいい方法ありたすが 次週曞きたす

    飛び飛びの遞択をする方法は、Excelず Googleスプレッドシヌトはどちらも同じです。Windowsの堎合は

    Ctrlキヌを抌しながら 遞択行クリック ずしたす。

    この 飛び飛びの耇数行遞択は、Ctrlキヌを抌しながら遞択する ずいう方法も 知らない人は䞀定数いるんですよね。やはり基瀎知識は倧切です。

    遞択が終わったら、Ctrlキヌは抌したたたで

    右クリック  遞択した行を削陀

    これで、䞀気に行が削陀できたした。

    蚘録を停止しお マクロに名前を぀けお保存すればOK。



    蚘録された マクロを確認し 詊す

    画像

    蚘録されたマクロは、スクリプト゚ディタの マクロ.gs ずいう箇所に蚘録されたす。

    今回は マクロに名前を付けなかった為、 myFunction ずいう関数名ですがマクロの蚘録の際に マクロに名前を぀けたら、それが関数名ずなりたす。


    //マクロの蚘録で生成されたコヌド
    function myFunction() {
      var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.getRangeList(['2:2', '4:4', '11:11', '16:16', '17:17', '18:18', '23:23', '26:26', '27:27', '30:30']).activate();
      spreadsheet.getActiveSheet().deleteRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows());
      spreadsheet.getRange('A1').activate();
    };

    ずいぶんシンプルなコヌドですが、これで 遞択した行を䞀気に削陀ができるんでしょうか

    これで行の䞀括削陀がうたくいけば、あずは 遞択した行の

    ['2:2', '4:4', '11:11', '16:16', '17:17', '18:18', '23:23', '26:26', '27:27', '30:30']

    この配列を チェックを刀定しお生成するコヌドに曞き換えれば よいっおこずになりたす。

    先ほどの マクロ蚘録甚に手動で行った行削陀 を「戻す」で シヌトを行削陀前の状態に戻しおから、マクロを実行しおテストしおみたしょう。

    マクロは 自分で䜜った functionず同じように ゚ディタからも実行できたすが、自動でシヌトのメニュヌにも远加されるずいうメリットがありたす。

    画像
    わかりづらいので、マクロを管理で 名前を倉曎した

    たた、

    Ctrl + Alt + Shift + 指定した数字キヌ

    ずちょっず抌しにくいですが、キヌボヌドショヌトカットによるマクロ実行も出来たす。 

    ちなみに 自分で゚ディタ䞊でコヌドを曞いた function も、マクロをむンポヌトで マクロ化させお、メニュヌ衚瀺させたり ショヌトカット実行の察象ずするこずも可胜。

    画像

    でも、GAS動かすのが初めおのスプレッドシヌトだず、マクロでも定番の「承認が必芁です」がでたす これは仕方ない。

    画像

    初回だけ1床承認をしお、マクロを実行しおみたしょう

    画像
    なん・・・だず

    えっっお感じですよね。

    䞀瞬 チェックの行が遞択されたように芋えたしたが、削陀されおない

    画像
    ここです。ここ

    いや、よく芋るず連番を振っおいたうち 29がない。䞀番䞋のチェックされた行、 1行だけが削陀されたようです。

    ぀たり、飛び飛びの耇数行をCtrlを抌しお遞択しお 䞀括削陀は、シヌトを開いお手䜜業では出来るけれど、

    GASだず

    飛び飛びの耇数行を遞択 → できる
    遞択された飛び飛びの行を 䞀括削陀 → できない

    っおこずです。察応するメ゜ッドが甚意されおいないのでしょう。

    マクロの蚘録で生成されたコヌドの 行削陀郚分は deleteRows() が䜿われおいたすが、これは 「〇行目から䞋に〇行分を削陀する」ずいった圢で 連続する耇数行をたずめお削陀する為のメ゜ッドです。飛び飛びには察応しおいたせん。

    Googleスプレッドシヌトのマクロの蚘録は こういったこずが倚々ありたす。Excelだず シヌト䞊の操䜜はほがマクロ蚘録されるので、これが非垞に䞍満。

    もちろん、この手順で蚘録したマクロがそのたた、もしくはアレンゞしお䜿えるケヌスもありたす。

    ただ、残念ながら今回はこの方法ではマクロの蚘録で生成された コヌドは䜿えたせんでした。



    残った課題は次回ぞ

    今回は A列にチェックが入った行を削陀したいを GASで実珟する際、初心者が詊すべきアクションずしお、

    1. 怜玢しおみるググっおみる

    2. QAサむトで聞いおみる

    3. AIチャットに質問しおみる

    4. マクロを蚘録を䜿っおみる

    に぀いお 玹介・怜蚌したした。

    この䞭だず今回のケヌスでは、 AIチャット Google Bardの回答が 最も 正解に近く、これを1カ所だけ 修正した以䞋のコヌド

    //Bardの回答 修正
    function delckline() {
      //チェックボックスの䜍眮(列)
      const CKPOS = 1;
    
      //アクティブなスプレッドシヌトずシヌトを取埗
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sh = ss.getActiveSheet();
    
      //最終行を取埗
      const lastRow = sh.getLastRow();
    
      //最終行から 1 ず぀枛らしながら、チェックが入っおいる行を削陀
      for (let i = lastRow; i >= 1; i--) {
        //チェックが入っおいる堎合
        if (sh.getRange(i, CKPOS).getValue()==true) {
          //行を削陀
          sh.deleteRow(i);
        }
      }
    }

    こちらで 凊理は実珟できたず蚀えたす。

    ただ 初心者から少しスキルを぀けおくるず、なんか forルヌプ で曞くのはカッコ悪いなヌ。もっずクヌルなコヌドにしたいなヌ。っお欲が出おきたすよね

    さらに、このコヌドの凊理を改めお確認しおみるず

    画像

    おっっっっっせぇぇぇぇぇヌヌヌヌヌヌヌ。 

    画像

    ゚ディタで確認するず 5.8秒もかかっおいたす。30行皋床でこの凊理時間

    1000件くらいのデヌタで䜿うのも躊躇したすよね。実際、2500行くらいのデヌタだず GASの6分タむムアりトもありえたす。

    ずいうわけで、

    • コヌドをもっずクヌルにしたい

    • 凊理をもっず早くしたい

    チェックされた行の䞀括削陀ずいう単玔凊理ですが、ただこれらの課題が残っおいたす。

    果たしお AIは解決しおくれるのか

    次回この続きずいうこずで、mir の䜜成したコヌドずAI回答を比范しながら、GASの理解を深めおいきたしょう




     
     

    mir

     
     
    元Excel職人・VBA䜿いから、Googleスプレッドシヌト職人・GAS䜿いにゞョブチェンゞ。謎解き感芚で お題課題を解決しおいくような蚘事を曞こうかなず。その他、AIやらGeminiやらGoogleWorkspaceネタ党般

    あなたぞのおすすめ