以下のような特殊な要件のために作ったカスタム関数の備忘録
このようなシートがあって
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を返す |
関連記事
自作関数を作成する

