①2つのGoogleスプレッドシート間にて片方のシートに存在するデータを参照し、それらのデータ内に重複(完全一致)があれば、もう片方のシート入力された場合にセルの色が変わる設定。
図形描画で実行するボタンを配置し、下記コードのメソッド名をスクリプト割り当てすることで可能になります。
コードは「スプレッドシートβ:個人シート」の方で記載する必要があります。
以下はサンプルコード
gs
1// 個別シート
2const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
3// 個別シートのB列最終行
4const bColLastNum = sheet.getRange("B1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow()
5// 個別シートのB列の入力範囲のみを取得
6const sheetRange = sheet.getRange(`B1:B${bColLastNum}`)
7
8function reflectionDataExtraction() {
9
10 // マスターシートのデータ取得
11 let masterSheet = SpreadsheetApp.openById('マスターのスプレッドシートID').getSheetByName('シート1')
12 // A列の最終行
13 let aColLastNum = masterSheet.getRange("A1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow()
14 let masterValues = masterSheet.getRange(`A1:A${aColLastNum}`).getValues().flat()
15
16 // 個別シートの入力値を取得
17 let values = sheetRange.getValues().flat()
18
19 values.forEach((v, index) => {
20 if (masterValues.indexOf(v) != -1) { // マスターシートに存在する場合
21 sheet.getRange(`B${index + 1}`).setBackground("#08fc08")
22 } else { // マスターシートに存在しない場合
23 sheet.getRange(`B${index + 1}`).setBackground("#ffffff")
24 }
25 })
26}
27
実行前 | 実行後 |
---|
 |  |
②色が変わらなかった(重複しなかった)データのみ抽出され、片方のシートの最終行A列に追加
①と同じですが、下記コードのメソッド名をスクリプト割り当ててください。
こちらもサンプルコードです。
gs
1// 個別シート
2const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
3// 個別シートのB列最終行
4const bColLastNum = sheet.getRange("B1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow()
5// 個別シートのB列の入力範囲のみを取得
6const sheetRange = sheet.getRange(`B1:B${bColLastNum}`)
7
8function masterRefrection() {
9
10 // 背景に何も色がついてない行数を抽出
11 let refRows = sheetRange.getBackgrounds().flat().flatMap((_, index) => {
12 if (_ === "#ffffff") return index+1
13 else return []
14 })
15
16 // 背景に何も色がついてない値を取得
17 let refValues = []
18 refRows.forEach((v) => {
19 refValues.push([sheet.getRange(`B${v}`).getValue()])
20 })
21
22 // 反映データ無しで終了
23 if (refValues.length == 0) return
24
25 // マスターシートへの反映
26 let masterSheet = SpreadsheetApp.openById('マスターのスプレッドシートID').getSheetByName('シート1')
27
28 // A列の最終行
29 let aColLastNum = masterSheet.getRange("A1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow()
30 // マスターシートへの追加
31 masterSheet.getRange(aColLastNum + 1, 1, refValues.length, 1).setValues(refValues)
32}