GASで空白のセルかどうかを判別して、IF文で処理を分けたい
Q&A
Closed
解決したいこと
Google AppScriptのIF文での分岐を「取得したセルが空白でない場合」は処理を実行、「取得したセルが空白の場合」は処理をスキップして繰り返したいです。
この「セルが空白」というのが上手く取得できません。
「セルが空白」と判定する(値が入っていないと判定する)をおこないたいです。
発生している問題
画像の②の表のB17:B20の範囲の値を取得して、別シートにフィルターをかける処理をしたいと思っています。
(全体のコードは下のほうにある「大元の使いたいコード」です。)
※画像の表について
画像の①の表はIMPORTRANGEを使用していて、自動で変わるようになっています(B4:D11)。
画像の②の表は下記の数式を入れて苗字からフルネームに変換させています。
=IFERROR(INDEX($F$4:$G$11,MATCH(B4,$F$4:$F$11,0),2),"")
B17:B20のセルを上から順番に取得していき、セルに氏名が入っていたらフィルターをかける処理を実行、氏名が入っていなければ処理をスキップするために、B17:B20のセルが空白かどうかを判定したいのですが、下記のコードだとすべて値が入っていると判定されてしまいます。
console.log()ではB17が [ [ '' ] ] と取得できているのですが、これは空白のセルではないということなのでしょうか。
(数式が入っているから空白ではない?)
IF文でなくてもいいので、B17:B20の範囲の値の有無で処理をわける方法を教えてください。
よろしくお願いします。
空白かどうかを判定するコード
function myFunctiontest() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet_find = ss.getSheetByName('シート名');
for(let i = 1; i < 5 ;i++ ) {
var find_name = sheet_find.getRange(i+16,2).getValues();
console.log(find_name);
if(find_name !== '') {
console.log(i) ;
}
}
}
[20-09-17 16:00:48:086 JST] [ [ '' ] ]
[20-09-17 16:00:48:089 JST] 1
[20-09-17 16:00:48:097 JST] [ [ 'A・A様' ] ]
[20-09-17 16:00:48:100 JST] 2
[20-09-17 16:00:48:108 JST] [ [ 'B・A様' ] ]
[20-09-17 16:00:48:111 JST] 3
[20-09-17 16:00:48:119 JST] [ [ 'C・A様' ] ]
[20-09-17 16:00:48:121 JST] 4
大元の使いたいコード
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet_to = ss.getSheetByName('シート1'); //ペーストする自分のスプレッドシートのシート名
var sheet_from = ss.getSheetByName('シート2'); //フィルターをかけたいシート名
var sheet_find = ss.getSheetByName('シート3'); //名簿があるスプレッドシートのシート名(画像のシート)
for(let i = 1; i < 5 ;i++ ) {
var find_name = sheet_find.getRange(i+16,2).getValues();
console.log(find_name);
if( find_nameに値があるなら ){
var filter = sheet_from.getFilter();
if( filter == null ){
} else {
sheet_from.getFilter().remove();//フィルタをオフにする
}
//フィルターで表示にする項目'find_name'を表示するフィルター基準作成
var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains(find_name).build();
//特定範囲にフィルターを設定
var filterSet = sheet_from.getRange(2, 1, sheet_from.getLastRow()-1, 9).createFilter();
//フィルターをかける列 1列目の値選択
var columnIndex = 1;
//フィルターをかける
filterSet.setColumnFilterCriteria(columnIndex, criteria);
//コピー元のシートから値の入っている全範囲をコピー
var values = sheet_from.getDataRange().getValues().filter(function(_, i) {return i > 1 && !sheet_from.isRowHiddenByFilter(i + 1)})
//メール本文GAS管理の3列目の最終行を求める
var lastRow = sheet_to.getRange(sheet_to.getMaxRows(), 3).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
//シート1の最終行の次の行に取得したデータを張り付ける
if (values.length > 0) {
sheet_to.getRange(lastRow + 1 , 3, values.length, values[0].length).setValues(values);
} else {
; // 何もしない
}
}
}