Apps Script公式リファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

2019年5月9日木曜日

対象の行で先頭のセル値と末尾のセル値を取得してつなげたい


以下のような特殊な要件のために作ったカスタム関数の備忘録


このようなシートがあって


RESULTの列に、各行で値が存在する先頭の値と末尾の値を取得して→でつなげたい


RESULTに入れる値の条件
  • その行の2列目以降で値が入っている先頭の値と末尾の値を→でつなげて入れる
    • 先頭に→があれば左辺の値を取得
    • 末尾に→があれば右辺の値を取得
    • →がなければそのままの値を入れる
    • 先頭と末尾が同じなら→でつなげず先頭の値を入れる
    • その行で値が一つだけなら→でつなげずその値を入れる



コード.gs
function getStartEnd() {
  var result;
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var range = sheet.getRange(row, 2, 1, 7);
  var values = range.getValues();
  var rowValues = values[0];
  var gotValues = [];
  for(var i = 0; i < rowValues.length; i++) {
    var value = rowValues[i];
    if(value !== '') {
      if(value.indexOf('→') !== -1) {
        value = value.split('→')[0];
      }
      gotValues.push(value);
    }
  }
  if(gotValues.length === 1) {
    result = gotValues[0];
  } else {
    var start = gotValues[0];
    var end = gotValues[gotValues.length-1];
    if(start === end) {
      result = start;
    } else {
      result = start + '→' + end;
    }
  }
  return result;
}

意訳
この機能がやること
resultの入れ物を用意する
開いているシートを取得する
選択されている行を取得する
row行目で, 2列目から, 1行, 7列の範囲を取得する
その値をすべて取得する
[[TODO,TODO,TODO,TODO,TODO,TODO]]のような2次元配列なので[0]で[TODO,TODO,TODO,TODO,TODO,TODO]を取得する
gotValuesの入れ物を用意する
rowValuesの数だけ繰り返す
rowValuesを一つずつ取得して
もし空でなければ
そしてもし→があれば
→の左の値を取得して

gotValuesに追加する


もしgotValuesの要素が1つなら
resultにgotValuesの先頭の要素を入れる
もし1つ以上あれば
gotValuesの先頭の要素を取得して
gotValuesの末尾の要素を取得して
もしstartとendの要素が同じなら
resultにstartの要素を入れて
同じでなければ
resultに start → end の値を入れる


resultを返す




関連記事

自作関数を作成する

Latest post

Google Apps Scriptの障害時はIssueTrackerを見てみる - Incidents for Apps Script are reported on Issue Tracker

IssueTracker > Apps Script issues https://issuetracker.google.com/savedsearches/566234 Google Apps Scriptの障害時は IssueTracker に課題が上がっていることが...