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

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

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

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

Q&A

解決済

1回答

157閲覧

【GAS】月末の区切りに太罫線を引きたいです。

minnamiina

総合スコア2

Google Apps Script

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

0グッド

1クリップ

投稿2024/10/04 08:19

実現したいこと

毎週制作する以下のスプレッドシートをGoogle Apps Scriptを用いて自動化を目指しています。
イメージ説明
月末の区切りに太罫線を引きたいです。
30日と31日を区別すると複雑になりそうなので、1日をまず探し、そのセルの上に太罫線を引きたいです。

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

// 1日という条件を満たすセルを複数取得する
const targetDayIndex = ◯◯◯◯◯◯◯◯

ソースコードのうち、ここが解決できればできそうです。
配列・正規表現に関してはかなり知識が浅く、正直すべては理解できていません…

該当のソースコード

Google

1function OnedayBoder() { 2 const spreadsheet = SpreadsheetApp.getActiveSheet(); 3 const lastCol = spreadsheet.getLastColumn(); 4 5 // B列(日付)の値を取得 6 const values = spreadsheet.getRange('B:B').getValues().flatMap(([val]) => val ? val : []); 7 8 // 1日という条件を満たすセルを複数取得する 9 const targetDayIndex = values.findLastIndex(val => val >= 0.5); 10 11 // インデックス番号が0以上の場合(つまり、配列の中に値が存在する場合) 12 if (targetDayIndex >= 0) { 13 // インデックス番号+1する(=スプレッドシートの行番号) 14 const targetDayRow = targetDayIndex + 1; 15 // 1日という条件を満たすセルの上に、太罫線を引く(上,左,下,右,垂直,水平,色,スタイル) false:消す true:作成 null:何もしない 16 spreadsheet.getRange(targetDayRow, 1, 1, lastCol).setBorder(null, null, true, null, null, null, '#FF0000', SpreadsheetApp.BorderStyle.DOUBLE) 17 } // 1日という条件を満たすセルが存在しない場合は何もしない 18}

試したこと・調べたこと

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

https://teratail.com/questions/43dnowpfiuzg3k
上記質問を応用することができそうだと思いましたが、上記と違い1日が表示している60日のうち複数あり、それぞれの1日の上に引きたいです。

補足

初質問のため、情報が足りない可能性があります。
その場合、補足にて回答します。

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

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

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

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

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

YAmaGNZ

2024/10/04 12:14

1日という条件を満たすセルを複数取得するという方法ではなく ループして1日だったら線を引くというやり方はどうでしょうか
minnamiina

2024/10/07 07:32

コメントありがとうございます!たしかに、一つずつチェックしていくほうがこの場合対応できそうです!
guest

回答1

0

ベストアンサー

B列の値が1だったらその上に枠線を引くコードの例です

JavaScript

1function firstDayBoder() { 2 // 枠線の初期設定 3 const borderPosition = new Map([ 4 ['top', true], 5 ['left', null], 6 ['bottom', null], 7 ['right', null], 8 ['vertical', null], 9 ['horizontal', null] 10 ]).values(); 11 const borderColor = 'black'; 12 const borderStyle = SpreadsheetApp.BorderStyle.SOLID_THICK; 13 14 const sheet = SpreadsheetApp.getActiveSheet(); 15 16 // B列(日付)の値が1である行番号の配列から枠線対象の範囲リストを生成 17 const rangeList = sheet.getRangeList( 18 sheet.getRange('B:B') 19 .getDisplayValues() 20 .flat() 21 .map((v, i) => v === '1' ? i + 1 : 0) 22 .filter(v => v > 0) 23 .map(v => v + ':' + v) 24 ); 25 26 // 枠線を引く 27 rangeList.setBorder(...borderPosition, borderColor, borderStyle) 28}

投稿2024/10/04 12:38

編集2024/10/05 04:38
YellowGreen

総合スコア800

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

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

minnamiina

2024/10/07 07:33

具体的なコード提示いただき大変助かります!こちらで実装してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問