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

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

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

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

Google Apps Script

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

Q&A

1回答

2605閲覧

別ファイル(スプレッドシート)の重複チェック機能とデータベース化

s-ueda

総合スコア0

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/06/29 08:08

編集2022/06/29 08:09

前提・実現したいこと

①2つのGoogleスプレッドシート間にて片方のシートに存在するデータを参照し、それらのデータ内に重複(完全一致)があれば、もう片方のシート入力された場合にセルの色が変わる設定。
②色が変わらなかった(重複しなかった)データのみ抽出され、片方のシートの最終行A列に追加

(例)運用イメージ
スプレッドシートα:マスターシート(A列に10万行のデータが記入)
スプレッドシートβ:個人シート(B列に毎日30〜100のデータが記入される)
個人シートは複数人に配布予定で、β、β'、β''、…と増えていくイメージです。

βのB列にデータを打ち込むとαのA列との比較で重複がチェック(β:B列に色付け)され、通過したもの(β:B列の色付けされなかったもの)がαのA列に追加されデータベース化される。

コードに疎く、実現性も把握していないのですが、もし可能であればご教示いただきたいです。

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

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

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

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

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

k.a_teratail

2022/06/30 02:41

下記ですが、別々の実現方法でも問題ないでしょうか? > βのB列にデータを打ち込むとαのA列との比較で重複がチェック(β:B列に色付け) 条件付き書式で マスターシートに値がある場合、色をつける > (β:B列の色付けされなかったもの)がαのA列に追加されデータベース化される。 図形描画でボタンを作成して、GASで反映させる
s-ueda

2022/06/30 02:50 編集

k.a_teratail様 ご質問ありがとうございます! 別々の実現方法で問題ございません!
k.a_teratail

2022/06/30 04:32

条件付き書式設定をβ側に仕込みましたが、未重複セルを反映しても背景色が変わらないので別の策を考える必要がありそうです。 とりあえず、β側に仕込んだ条件付き書式のカスタム数式 =IF(COUNTIF(IMPORTRANGE("マスター側のスプレッドシートのキー値", "シート1!A:A"),INDIRECT("B"&ROW()))=1, TRUE, FALSE)
guest

回答1

0

①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}
実行前実行後実行後追加値
イメージ説明イメージ説明イメージ説明

投稿2022/06/30 05:14

k.a_teratail

総合スコア845

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問