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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Google Apps Script

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

Q&A

解決済

1回答

735閲覧

GASで特定の文字列を参照し該当の列に罫線を引きたい

visitor_t

総合スコア1

Google Apps Script

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

0グッド

3クリップ

投稿2024/03/27 13:21

編集2024/04/07 04:24

実現したいこと

初心者です。

前提
シフト表において月数を変更すると
日付曜日が自動変更される関数を組んだ
表に土曜と日曜の間に縦罫線を引きたい

概要
・曜日行から土曜を検索
・検索した該当の土曜列の右側に縦罫線を引く
※シフト表のため複数列に反映させたい
・月数を変更させるので引いた罫線を
削除することも別途必要

発生している問題・分からないこと

特定の文字列を検索することや
罫線を引くなどは調べてわかったのですが
それをどう組み合わせるかがわからない状況なので教えていただけると助かります。

イメージ説明

該当のソースコード

function myfunction() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getsheetbyname(‘シート名’) for (let i=4; i<=41; i++){ let week = ss.getRange(4,i).getValue(); if (week == “土”){ sheet.getRange(4,i).setBorder(null, null, null, true, null, null, SpreadsheetApp.BorderStyle.SOLID_MEDIUM); }else if(week !== “土”) sheet.getRange(4,i).setBorder(null, null, null, false , null, null); } } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

組み合わせ方が分からない状況です。

補足

特になし

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

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

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

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

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

YAmaGNZ

2024/03/27 22:08

if文で「特定の文字列を検索た結果存在する」場合を判断して「罫線を引く」を行えばよろしいかと思います。
visitor_t

2024/04/06 04:27

遅くなりましたが、回答ありがとうございます! いただいた回答をもとに調べて ifとforを活用して一応土曜セルのみ 右横に罫線追加が可能になりました! 理想は画像のように 土曜列に縦罫線引きたいのですが、 色々試行錯誤しますmm
visitor_t

2024/04/07 04:28

大分拙く間違えている文法があると思いますが 実際に試作したコードを追記しました。 やろうとしてることの大雑把な内容として 見てもらえると助かります。 ※メモで書き起こしたので見にくくてすいません
visitor_t

2024/04/07 04:35

YellowGreen様 回答いただきありがとうございます! 現状不足してる部分を回答いただいた形かと思うので、また、修正してみます! YAmaGNZ様とYellowGreen様に回答いただいた内容で解決できそうなのでここで解決とさせていただきます!ありがとうございました!!
guest

回答1

0

ベストアンサー

特定のセルだけでなく、そのセルの列に枠線を引くときは、
複数の行を含むセル範囲を指定してからそのセル範囲の.setBorderメソッドを使います。
sheet.getRange(row, column).setBorder(...);ではなく、
sheet.getRange(row, column, numRows, numColumns).setBorder(...);
のようにします。(numRows, numColumnsはセル範囲の行数と列数)

例えば、今回新たにご提示いただいた画像のようなシートの場合、

JavaScript

1 // 初期設定 2 const firstRow = 4; // データの開始行 3 const weeksRow = 5; // 曜日の行 4 const firstColumn = 3; // データの開始列 5 const clearBorder = [false, false, false, false, false, false]; // 枠線の消去時の引数リスト 6 7 // スプレッドシートとシートの準備 8 const ss = SpreadsheetApp.getActiveSpreadsheet(); 9 const sheet = ss.getSheetByName('シート1'); 10 11 // データのセル範囲を求める 12 const numRows = sheet.getLastRow() - firstRow + 1; // セル範囲の行数を求める 13 const numColumns = sheet.getLastColumn() - firstColumn + 1; // セル範囲の列数を求める 14 const range = sheet.getRange(firstRow, firstColumn, numRows, numColumns); // セル範囲を取得 15 16 // 事前にセル範囲の枠線を消去 17 range.setBorder(...clearBorder); // 枠線を全て消去

のように事前に複数の行と列を指定して枠線を消去しておくことができます。
土曜の列を確認してその列のデータの範囲の行数分の枠線を設定するなら、
既に、YAmaGNZ様からのコメントで質問者様がお調べになったように
for文で各列の曜日の値を確認しながら
if文で土曜だったときに枠線を引く処理を行うようになります。

JavaScript

1 // 初期設定(続き) 2 const style = SpreadsheetApp.BorderStyle.SOLID_MEDIUM; // 枠線の種類 3 const setRightBorder = [null, null, null, true, null, null, null, style]; // 枠線設定時の引数リスト 4 5 // 曜日が土曜日の列の右側に枠線を設定 6 for (let i = 0; i < numColumns; i++) { 7 const currentColumn = firstColumn + i; // 現在の列番号を取得 8 const week = sheet.getRange(weeksRow, currentColumn).getValue(); // 曜日の文字を順に取り出す 9 if (week === '土') { // 文字が 土 と一致したら 10 sheet.getRange(firstRow, currentColumn, numRows, 1).setBorder(...setRightBorder); //枠線を設定 11 } 12 }

のように土曜の列ごとに、複数の行に枠線を設定することができます。

なお、
numRows(範囲の行数)
numColumns(範囲の列数)
をデータの最終行・列から求めていますが、
初期設定の部分で直接数値で指定しても構いません。

投稿2024/04/06 23:34

編集2024/04/06 23:38
YellowGreen

総合スコア861

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

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

visitor_t

2024/04/07 04:38

YellowGreen様 回答いただきありがとうございます! 現状不足してる部分を回答いただいた形かと思うので、また、修正してみます! YAmaGNZ様とYellowGreen様に 回答いただいた内容で解決できそうなので ここで解決とさせていただきます! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問