質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

2035閲覧

スプレッドシートにて、GASで特定文字が入った列を非表示にしたい

thre

総合スコア7

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2023/12/29 04:02

実現したいこと

指定範囲にて特定文字が入った列のみを非表示にしたい。

前提

スプレッドシートにて特定の値と一致した場合、その値がある列のみを非表示にしたいです。
条件と一致する列を非表示にする記述がうまくできておりません。

  • 例)1行目の中で「空欄」のセルがある列のみを非表示にする。

試したこと

  • A列の範囲内にて、「空欄」のセルがある列のみを非表示にする。

のように、指定値に一致する「行」を非表示にする方法はうまくいったのですが、「列」の非表示方法がわかっておりません。
実現したいイメージとしては以下の「列」非表示バージョンです。

10行目にてgetRangeの範囲を「1行目」に変更し、値も取得できていることは確認できたのですが、
hideRowshideColumns に変更しただけでは特に何も変化はありませんでした。
他にも手を加える必要があるかと思うのですが、知識がなく改変すべき内容がわからない状態です。

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}

補足情報

参照)
https://teratail.com/questions/197765

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2023/12/29 10:35

ご希望の動作がよくわかりませんが、 次のようなことで良いのでしょうか? 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); } } }
thre

2023/12/30 00:44

ご回答ありがとうございます。 いただいた内容がまさに実現したかったことです。わかりづらく申し訳ありません。 更に範囲指定を行う方法も試してみたのですが、例えば判定・非表示にしたい範囲を「1行目」ではなく「B列以降の1行目」としたい場合、 以下のような形だと空白でないセルの列が非表示になったりして、うまく動作しておりません。 var values = objSheet.getRange(row, 2, 1, objSheet.getLastColumn()).getValues(); 恐れ入りますが、もしよろしければご教示いただけますでしょうか。
YellowGreen

2023/12/30 01:06 編集

計算すればわかると思いますが、 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番目の引数は列数(開始列から最終列までの列数)ですので。
thre

2023/12/30 09:02 編集

ありがとうございます。 「B列以降の1行目」で空白のある列を非表示したい場合、 A1, D1, F1 : 空白 B1, C1, E1 : 文字あり だと、文字が入っているCとE列が非表示になってしまうようでした。
thre

2023/12/30 11:50

objSheet.hideColumns(i + 1); を objSheet.hideColumns(i + column); とすることで、意図する挙動となりました。 ご回答ありがとうございます。 お手すきの際で結構ですので、同じ内容を回答欄に投稿いただけますでしょうか? ベストアンサーとさせていただければと思います。
YellowGreen

2023/12/30 14:41 編集

私は追加質問にお答えしただけです。 ご自身で解決されたのですから、 自己解決でよろしいと思います。
thre

2023/12/30 14:37

ありがとうございます。それでは自己解決とさせていただきます。
guest

回答1

0

自己解決

以下とすることで、指定する範囲内の特定文字が入った列を非表示にすることができました。
YellowGreen様ありがとうございました。

JavaScript

1function hidden() { 2var sh = SpreadsheetApp.getActiveSpreadsheet(); 3var objSheet = sh.getSheetByName("シート1"); 4var key = ""; 5var row = 1; 6var column = 2; 7 8//B列以降の1行目が空白なら列を非表示 9var values = objSheet.getRange(row, column, 1, objSheet.getLastColumn() - column + 1).getValues(); 10for (var i = 0; i < values[0].length; i++) { 11if (values[0][i] === key) { 12objSheet.hideColumns(i + column); 13} 14} 15}

投稿2023/12/30 14:39

thre

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問