LoginSignup
0
0

More than 1 year has passed since last update.

【GAS】シートの値を二次元配列で取得して連想配列にする

Last updated at Posted at 2023-04-10

シートの値を取得して連想配列にする

目的

フォームの回答シートのユーザー名を指定したら
slackシートのD列のchannelidの値を返す方法が欲しくて作成しました。
※フォームの回答シートのC列の「ユーザー名」とslackシートのB列の「表示名」は同じ

フォームの回答.png
slackシート.png

コード


function channneiIdGet(){
  //
  //slackシートの値を二次元配列で取得して連想配列にしたい
  //B列の表示名をいれればD列のchannneildが表示されるようにしたい
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const slackSheet = spreadSheet.getSheetByName('slack');
  const slackLastRow = slackSheet.getLastRow();
  var values = slackSheet.getDataRange().getValues();

  //2次元配列で取得した値を連想配列にする
  //連想配列 slackシートのB列をキー D列を値にする
  var Array = {};
  for (var i=1; i<slackLastRow; i++){
    var slackname = values[i][1]; //B列の i 行目のslack表示名
    var channelid =  values[i][3] ;//D列の i 行目のslackチャンネルID

    Array[slackname] = channelid  ;


  }
  Logger.log(Array["user01"]); //

  //フォームの回答シートの最終行のC列の値を取得(ユーザー名)
  //ユーザー名を連想配列のキーとして指定し値(channneildを取得する)
  const reportSheet = spreadSheet.getSheetByName('フォームの回答 1');
  //const reportLastRow = reportSheet.getLastRow();

  //②列の最終行から上方向に取得する
  var reportlastRow = reportSheet.getRange(reportSheet.getMaxRows(), 3).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  Logger.log(reportlastRow); //
  var id = reportSheet.getRange(reportlastRow,3).getValue()

  Logger.log(Array[id])
  
  
}

実行結果

channelid取得結果.png

試した結果

フォームの回答のシートの最終列にXLOOKUPを使うほうが簡単と思っていたが
フォームの回答は行が新しく追加されるためXLOOKUPを追加した列にはならない
連想配列を利用するのが良い

GASでスプレッドシートに関数をいれることで解決できた
https://qiita.com/80syokumotsu/items/a9dee0297a3edbb2e847

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0