実現したいこと
指定範囲にて特定文字が入った列のみを非表示にしたい。
前提
スプレッドシートにて特定の値と一致した場合、その値がある列のみを非表示にしたいです。
条件と一致する列を非表示にする記述がうまくできておりません。
- 例)1行目の中で「空欄」のセルがある列のみを非表示にする。
試したこと
- A列の範囲内にて、「空欄」のセルがある列のみを非表示にする。
のように、指定値に一致する「行」を非表示にする方法はうまくいったのですが、「列」の非表示方法がわかっておりません。
実現したいイメージとしては以下の「列」非表示バージョンです。
10行目にてgetRange
の範囲を「1行目」に変更し、値も取得できていることは確認できたのですが、
hideRows
を hideColumns
に変更しただけでは特に何も変化はありませんでした。
他にも手を加える必要があるかと思うのですが、知識がなく改変すべき内容がわからない状態です。
JavaScript
1function hidden() { 2 3 var sh = SpreadsheetApp.getActiveSpreadsheet(); 4 var objSheet = sh.getSheetByName("シート1"); 5 6 var key = ""; 7 var col = "A"; 8 9 //A列が空白なら行を非表示 10 var values = objSheet.getRange(col + "1:" + col + objSheet.getLastRow()).getValues(); 11 for (var i = 0; i < values.length; i++) { 12 if (values[i][0] === key) { 13 objSheet.hideRows(i + 1); 14 } 15 } 16}
補足情報
ご希望の動作がよくわかりませんが、
次のようなことで良いのでしょうか?
function hidden() {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var objSheet = sh.getSheetByName("シート1");
var key = "";
// var col = "A";
var row = 1;
// // A列が空白なら行を非表示
//1行目が空白なら列を非表示
// var values = objSheet.getRange(col + "1:" + col + objSheet.getLastRow()).getValues();
var values = objSheet.getRange(row, 1, 1, objSheet.getLastColumn()).getValues();
// for (var i = 0; i < values.length; i++) {
for (var i = 0; i < values[0].length; i++) {
// if (values[i][0] === key) {
if (values[0][i] === key) {
// objSheet.hideRows(i + 1);
objSheet.hideColumns(i + 1);
}
}
}
ご回答ありがとうございます。
いただいた内容がまさに実現したかったことです。わかりづらく申し訳ありません。
更に範囲指定を行う方法も試してみたのですが、例えば判定・非表示にしたい範囲を「1行目」ではなく「B列以降の1行目」としたい場合、
以下のような形だと空白でないセルの列が非表示になったりして、うまく動作しておりません。
var values = objSheet.getRange(row, 2, 1, objSheet.getLastColumn()).getValues();
恐れ入りますが、もしよろしければご教示いただけますでしょうか。
計算すればわかると思いますが、
var row = 1;
の次に
var column = 2;
としておいて、
var values = objSheet.getRange(row, 2, 1, objSheet.getLastColumn()).getValues();
を
var values = objSheet.getRange(row, column, 1, objSheet.getLastColumn() - column + 1).getValues();
にしないと取得する範囲の列の数が合わなくなりますよね。
getRange()メソッドの3番目の引数は行数(1行)で、
4番目の引数は列数(開始列から最終列までの列数)ですので。
ありがとうございます。
「B列以降の1行目」で空白のある列を非表示したい場合、
A1, D1, F1 : 空白
B1, C1, E1 : 文字あり
だと、文字が入っているCとE列が非表示になってしまうようでした。
objSheet.hideColumns(i + 1);
を
objSheet.hideColumns(i + column);
とすることで、意図する挙動となりました。
ご回答ありがとうございます。
お手すきの際で結構ですので、同じ内容を回答欄に投稿いただけますでしょうか?
ベストアンサーとさせていただければと思います。
私は追加質問にお答えしただけです。
ご自身で解決されたのですから、
自己解決でよろしいと思います。
ありがとうございます。それでは自己解決とさせていただきます。

回答1件
あなたの回答
tips
プレビュー