【初めてのGAS 3.】シートを指定してセルの値を取得したり設定する方法 getSheetByName()

初めてのGAS講座

初めてのGAS一覧

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

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

前回

【初めてのGAS 2.】データの型、数値と文字列の連結(const,let,varの違い)
  • 変数の基本的な使い方がわかります。
  • 加減乗除ができるようになります。
  • 文字列の連結や文字列と数値の連結ができるようになります。
  •  

    シート名を指定して値を取得する方法


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

    GASを使用して、指定したシートのセルを取得したり設定する方法がわかります。


    逆に、知らないと

    なんとなく、現在のシートから値を取得できるように
    なったものの、シートを指定できないという
    『もどかしい状態』が続きます。

    なので、サクッとマスターして

    と「ズバッ」と答えてあげてください。

    動画はこちら

    【はじめてのGAS3】Googleスプレッドシート シートを指定して値を取得したり設定する方法 getSheetByName

    スクリプトはこちら

    function getnamefromid() {
      const ss = SpreadsheetApp.getActiveSpreadsheet()
      const sh = ss.getActiveSheet()
      const shmst = ss.getSheetByName("マスタ")
    
    
      let chkvalue = sh.getRange(11, 3).getValue()
      console.log("チェックする値 " + chkvalue)
    
    
      const MASTER_ID = 1 //IDの列
      const MASTER_NAME = 2 //名前の列
    
    
      for (i = 2; i <= 5; i++) {
        if (chkvalue == shmst.getRange(i, MASTER_ID).getValue()) {
          let name = shmst.getRange(i, MASTER_NAME).getValue()
          console.log(name)
          sh.getRange(11, 4).setValue(name)
    
    
        }
      }
    }

     

     

    ポイント

    シート名を指定する場合

    getSheetByName()でシート名を指定します。

     

    厳密にチェックする

    ===で厳密に一致しているかをチェックする

     

     

     

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

    つぎはこちら

    【初めてのGAS 4.】自作関数で値を受け渡しする方法
  • GASを使用して、自作の関数に値を渡すことができます。
  • 自作の関数から値を取得することができます。
  • 初めてのGAS一覧

    コメント

    1. MAT より:

      はじめまして。にわかものですが一つ一つ調べながら仕事でシートを作っています。
      早速ですが質問があります。
      共有しているシートの変更履歴を取得するLogシートを使っているのですが、
      そのシートに「変更されたセルのA列の値を書き込む」という機能を追加したいのですが、
      調べてもうまく動かず困っています。

      【LogシートのGAS】
      function onEdit(e) {
      //Log保存用シートの名前
      let logSheetName = ‘Log’;

      // スプレッドシート
      let ss = SpreadsheetApp.getActiveSpreadsheet();
      // スプレッドシート名
      let ssName = ss.getName();

      // 選択シート
      let sheet = ss.getActiveSheet();
      // 選択シート名
      let sheetName = sheet.getName();
      // Logシートなら何もしない
      if (sheetName == logSheetName) {
      return;
      }

      // 選択セル範囲
      let range = sheet.getActiveRange();
      // セル範囲の行番号
      let rowIndex = range.getRowIndex();
      // セル範囲の列番号
      let colIndex = range.getColumnIndex();

         // ここでA列の値を取得?

      let val =

      // getRange(始点行, 始点列, 取得する行数, 取得する列数)
      let v = sheet.getRange(rowIndex, colIndex, 1, 1).getValue();
      //内容が空
      if (v == ”) {
      v = ‘※DELETE’;
      }

      //更新者のメールアドレス
      let email = Session.getActiveUser().getEmail();

      //ここからLogシートに書き込み
      //Log保存用シート
      let logSheet = ss.getSheetByName(logSheetName);
      //引数で指定した行の前の行に1行追加
      logSheet.insertRowBefore(21);

      //日付
      logSheet.getRange(21, 2).setNumberFormat(‘yyyy/mm/dd(ddd)’);
      logSheet.getRange(21, 2).setValue(new Date());
      //時刻
      logSheet.getRange(21, 3).setNumberFormat(‘h:mm’);
      logSheet.getRange(21, 3).setValue(new Date());
      //更新者
      logSheet.getRange(21, 4).setValue(email);
      //シート名
      logSheet.getRange(21, 5).setValue(sheetName);
      //行番号
      logSheet.getRange(21, 6).setValue(rowIndex);
      //列番号
      logSheet.getRange(21, 7).setValue(colIndex);
      //変更セルの内容(Stringフォーマットにする)
      logSheet.getRange(21, 8).setNumberFormat(‘@’);
      logSheet.getRange(21, 8).setValue(v);

      //変更されたセルのA列の値

      logSheet.getRange(21,9).setValue(val);
      }

      目的は、仕事の現場状況を記録するもので
      現場ごとに各々行10×列10の表が縦に並んでおり、担当者ごとにタブ分けされています。

      いつだれがどの現場に情報を加えたかを知るためにLogシートを使っているのですが、
      このGASでは変更されたセルの位置はわかるのですが、
      どの現場のセルかわからず、変更されたセルに飛んで確認しています。

      そこで各現場のA列に、見えない形で現場名を入れておき
      変更されたセルのA列の値(現場名)をLogシートに反映させれば
      どの現場が変更されたかすぐわかるので助かるなあと考えました。

      いろいろ考えられることを試しましたが動かず
      質問サイトでも全く返答が得られなくて途方に暮れています。

      何かいい方法はあるでしょうか?
      よろしくお願いいたします。

    2. MAT より:

      おおおおおお!すげえええええ!!!
      本当にありがとうございます!!

      ゲロ吐きながら悩み続けたことが解決しました笑

      STARTLINEを定義すれば、変更になっても一発で変更できるんですね!
      神業です。

      なんと感謝していいか。。。

      ありがとうございます!

      • hiroshi より:

        お役に立てて何よりです。

        MATさんのLogシートのアイデアは素晴らしいですね。
        いろんな業務で使えそうです。

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