【GAS】シート一覧の取得と表示/非表示の設定(Gスプレッドシート)

シートの操作

GAS シートの操作一覧

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

【GAS】シートをまとめて削除する方法(Gスプレッドシート)
  • GASでシートを削除する方法がわかります。
  • シートをまとめて削除する事ができます。
  • GASがわからなくても簡単にできます。
  • 今回は、とっても価値の高い方法をお伝えします。


    これを知ることであなたは、

    • スプレッドシートのシート一覧を取得できるようになります。
    • シートの表示/非表示を切り替えられるようになります。
    • JavaScriptにおけるforEachやmapさらにfilterの例がわかります。

    ちょっと、ややこしいかもしれませんが
    ぜひ、動画を見ながらチャレンジしてみてください。

    そして

    と答えてあげてください。

    動画はこちら

    スクリプト

    //シートの一覧を取得
    function getListOfSheets() {
      const ss = SpreadsheetApp.getActiveSpreadsheet()
      const sheets = ss.getSheets() //すべてのシートを取得
    
    
      const sheetnames = sheets.map(sheet => {
        return [sheet.getSheetName(), sheet.isSheetHidden()]
      })
    
    
      // console.log(sheetnames)
    
    
      const mgws = ss.getSheetByName("管理シート")
    
    
      // console.log(sheetnames.length,sheetnames[0].length)
      mgws.getRange(2, 1, sheetnames.length, sheetnames[0].length).setValues(sheetnames)
    
    
    
    }
    
    
    //表示/非表示の切り替え
    function showHideSheets() {
      const ss = SpreadsheetApp.getActiveSpreadsheet()
      const mgws = ss.getSheetByName("管理シート")
    
    
      const manageData = mgws.getRange("A2:B")
        .getValues()
        .filter(line => line[0] != "")
    
    
      manageData.forEach(line => {
        // console.log(line[0], line[1]) //line[0]は、シート名
    
    
        const ws = ss.getSheetByName(line[0])
        line[1] ? ws.hideSheet() : ws.showSheet()
      })
    }

    マインドセットします。

    マインドセット
    forEachやmapを使うことでJavaScriptの世界が広がる

     

    forEachやmapのコールバック関数の考え方は
    ちょっと難しいと思います。

    私自身、なんども一旦「なるほど」と
    理解しても、使用しないので、
    しばらくすると忘れる日々が続きました。

    そんな私みたくならないように
    何度かやってみてください。

    では、今回のGoogleシートマスターへの究極の方法です。

    Step1.
    シート一覧用のシートを作成しシート名を「管理シート」にする
    (あるは、Step2でスクリプト内のシート名を変更する)

    Step2.

    「管理シート」のA1セルに「シート名」
    B1セル「非表示」と記入する。

    Step3.

    B2セル以降のB列にチェックボックスを挿入する

    Step4.
    スクリプトエディタを開き上記スクリプトをコピペする
    Step5.

    スクリプトを保存し実行してみる

    では、早速、シート一覧用のシートを作成してください
    今すぐです。

    最後までご覧いただきありがとうございます。

    つぎはこちら

    【GAS】シート一覧からシートの位置を自由自在に変更する方法(Gスプレッドシート)
  • GASでシートの位置を変更する方法がわかります。
  • 管理シートから一気に変更できるようになります。
  • GAS シートの操作一覧

    コメント

    1. ゆき より:

      質問をしてもいいですか。
      const sheetnames = sheets.map(sheet => {
      return [sheet.getSheetName(),sheet.isSheetHidden()]
      })
      アロー関数について詳しい説明した動画を作成して下さい。
      returnは、関数名に戻ると思っていましたが途中でアロー関数を入れた場合は、アロー関数に戻るのですか。
      const sheetnames = sheets.map(sheet =>
      この部分は、ネットで調べたのですが定数 = 引数 =〉と書いてありますがsheets.map(sheetの部分は引数になるのですか。
      お手数ですが宜しくお願いします。

      • hiroshi より:

        確かに難解ですね。

        動画を作ろうかと思いましたが、アロー関数の説明をしても上記をわかりやすく
        説明することはちょっと困難です^^

        上記の場合は、アロー関数とMAP関数の組み合わせなので一層難しく感じられると
        思います。

        ただ、MAP関数は指定された中身を一気に変更するその際にアロー関数を使用すると
        見やすくなる程度に考えるのがいいかと思います。

        ※この形自体で理解する
        sheets.map(sheet => {
        return [sheet.getSheetName(),sheet.isSheetHidden()]
        })

        >returnは、関数名に戻ると思っていましたが途中でアロー関数を入れた場合は、アロー関数に戻るのですか。
        はい、returnは値を返却します。なのでアロー関数に戻ります。

        >sheets.map(sheetの部分は引数になるのですか。
        sheetの部分が引数となり さらにmap関数の引数となります。

        スプレッドシートを絡めずにかんたんな例を
        いくつか実践されるのがいいかと思います。

    2. はるな より:

      こんにちは。
      いつもGASの製作の参考にさせていただいております。

      今回のシート一覧を複数行に分割して1ページで確認しやすくすることは可能でしょうか。
      色々と自分で試してみたのですが、1次元配列を分割する方法が分からず質問させていただきました。

      ご回答お待ちしております。

      • hiroshi より:

        すみません、複数行に分割してどういう形態になるのかよくわかりません。
        具体的な完成形をご提示いただけないでしょうか?

        • はるな より:

          すみません。複数行でなく、複数列でした。

          複数列に分けてスクロールしなくても目次が1ページで確認できるようにしたいです。可能でしょうか。

          • hiroshi より:

            はるなさんのいう
            >複数列に分けてスクロールしなくても目次が1ページで確認できる
            フォーマットを提示いただければできるかもしれません。

            • はるな より:

              ここに写真等をお送りしたかったのですが難しいようで、何か方法はございますか。

          • hiroshi より:

            作成したシートを共有して
            アクセス権を付加してください。

            • はるな より:

              フォームにてお送りさせていただきましたので、ご確認いただけたらと思います。

      • hiroshi より:

        アクセス権がないので閲覧できません。

    3. はるな より:

      アクセス権限を承認させていただきました。
      色々とお手数おかけして申し訳ございません。

    4. Tomoco より:

      GAS初心者ですが、とてもわかりやすく、参考に活用させていただいております。
      シートの非表示と、行の固定を複数ファイルで連続処理する方法を模索しておりまして、
      こちらのサイトにたどり着きました。(非表示と行の固定、別々の実行でも可)

      方法としては、下記の2案で考えておりますが、実行可能であれば、ご教示いただけないでしょうか。(すべてのファイルで、シート数、シート名、行の固定場所は同一)
      ①フォルダ内の複数ファイル(スプレッドシート)のURLをGAS実行用に作成したスプレッドシートのシート1に一覧で取得したものを利用して、連続して複数ファイル一括で同じシート名のシートを非表示とシートの行固定する。
      ②フォルダURLのみを①と同じく、スプレッドシートのシート1のセルから取得して、フォルダ内にあるすべてのファイルを①と同じく一括で連続処理。

      セルからURLを取得するところまではうまく行ったのですが、そのあとの非表示などの処理につなげることができず、難航しております。
      基礎的な事をお聞きしており、大変申し訳ないのですが、お力をお貸しいただければと思いコメント書き込みさせていただきました。よろしくお願いいたします。

      • hiroshi より:

        Tomocoさん丁寧なご質問ありがとうございます。
        さらにサンプル的なデータが入ったシートを共有していただければ、
        回答できるかもしれません。

        • Tomoco より:

          ご返信ありがとうございます。
          サンプルシート、フォームで送らせていただきました。
          よろしくお願いいたします。

          • hiroshi より:

            サンプルシートのご提供ありがとうございます。

            しかしながら私には、完成形のイメージが湧きません。

            お手数ですが、完成形として少ないデータで構わないので
            実際に行固定(この意味がわからい)、非表示シートのデータが入った
            サンプルをご提供いただけないでしょうか?

            • Tomoco より:

              わかりずらい表現で、お手数をおかけして申し訳ございません。
              完成形のサンプルファイル(サンプルシート1)を作成し、
              先日お送りしましたスプレッドシート内に、リンクを貼り付けさせていただきました。よろしくお願いいたします。
              (参考に、加工前の状態のサンプルシート2・3もリンク貼り付けしております)

      • hiroshi より:

        シートのご提供ありがとうございます。
        アンサー動画作成しました。
        https://youtu.be/v2eWG1_30IY

        • Tomoco より:

          動画作成いただきありがとうございました!
          まさに、求めておりました内容で、早速活用させていただきました。
          とても丁寧にご対応くださり、本当にありがとうございました。
          他の記事や動画なども参考に勉強させていただきます。

    タイトルとURLをコピーしました