こんにちわ。たろ(@tarohibi)です。
今日は、「Google Apps Script (GAS)を用いて、スプレッドシート内の選択範囲を他のシートにコピーしたり、またはその範囲を他のシートから削除する方法」をご紹介します。
やりたいこと
複数のスプレッドシートにまたがる同じ範囲のデータをコピーしたり、削除したりする作業は手間と時間がかかります。
Excelだとカンタンにできるんですが、スプレッドシートだとできない仕様になっているので、困りものです。しかし、GASを利用するとこの作業を自動化でき、時間を大幅に節約することができます。
完成形
以下に、それぞれの処理を行う2つの関数のコードを示します。
複数のスプレッドシートにまたがる同じ範囲のデータをコピー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function copySelectedRangeToOtherSheets() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const currentSheet = ss.getActiveSheet(); const defaultExcludeSheetNames = ['合計']; const excludeSheetNames = defaultExcludeSheetNames.concat(Browser.inputBox('除外するシート名を入力してください(複数の場合はカンマ区切りで入力)').split(',').map(sheetName => sheetName.trim())); const rangeToCopy = currentSheet.getSelection().getActiveRange(); const allSheets = ss.getSheets(); for (const sheet of allSheets) { if (!excludeSheetNames.includes(sheet.getName())) { rangeToCopy.copyTo(sheet.getRange(rangeToCopy.getA1Notation())); } } } |
複数のスプレッドシートにまたがる同じ範囲のデータを削除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function deleteSelectedRangeFromOtherSheets() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const currentSheet = ss.getActiveSheet(); const defaultExcludeSheetNames = ['合計']; const excludeSheetNames = defaultExcludeSheetNames.concat(Browser.inputBox('除外するシート名を入力してください(複数の場合はカンマ区切りで入力)').split(',').map(sheetName => sheetName.trim())); const rangeToDelete = currentSheet.getSelection().getActiveRange(); const allSheets = ss.getSheets(); for (const sheet of allSheets) { if (!excludeSheetNames.includes(sheet.getName())) { sheet.getRange(rangeToDelete.getA1Notation()).clearContent(); } } } |
コードの解説
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function copySelectedRangeToOtherSheets() { const ss = SpreadsheetApp.getActiveSpreadsheet(); // (1) const currentSheet = ss.getActiveSheet(); // (2) const defaultExcludeSheetNames = ['合計']; // (3) const excludeSheetNames = defaultExcludeSheetNames.concat( Browser.inputBox('除外するシート名を入力してください(複数の場合はカンマ区切りで入力)') .split(',') .map(sheetName => sheetName.trim()) ); // (4) const rangeToCopy = currentSheet.getSelection().getActiveRange(); // (5) const allSheets = ss.getSheets(); // (6) for (const sheet of allSheets) { if (!excludeSheetNames.includes(sheet.getName())) { // (7) rangeToCopy.copyTo(sheet.getRange(rangeToCopy.getA1Notation())); // (8) } } } |
- SpreadsheetApp.getActiveSpreadsheet()は、現在アクティブ(開いている)スプレッドシートを取得します。
- ss.getActiveSheet()は、現在アクティブなスプレッドシートの中で選択されているシートを取得します。
- このコードでは、「合計」という名前のシートをデフォルトで除外するように設定しています。
- ダイアログボックスを表示し、ユーザーに除外したいシート名を入力してもらいます。入力されたシート名は、既存の除外シート名リストに追加されます。
- currentSheet.getSelection().getActiveRange()は、現在選択されているセル範囲を取得します。
- ss.getSheets()は、スプレッドシート内のすべてのシートを取得します。
- 取得した各シートについて、そのシート名が除外シート名リストに含まれていないことを確認します。
- シート名が除外シート名リストに含まれていない場合、選択したセル範囲をそのシートにコピーします。
deleteSelectedRangeFromOtherSheets関数も同様の流れで機能しますが、最後のステップが「選択したセル範囲の内容をそのシートから削除する」に変わります。
使用方法
これらの関数を利用するには、以下の手順を守ってください。
- Googleスプレッドシートを開きます。
- スクリプトエディタを開くために「拡張機能」メニューから「Apps Script」を選択します。
- 上記のコードをスクリプトエディタにコピー&ペーストします。
- スクリプトエディタで「保存」をクリックします。
これで設定は完了です。
スプレッドシートの「拡張機能」メニューから「Apps Script」を選択し、copySelectedRangeToOtherSheetsかdeleteSelectedRangeFromOtherSheets関数を実行することで、選択した範囲のコピーまたは削除を行うことができます。
注意点
これらの関数は、選択したセル範囲を全シートに適用します。間違えて削除したい範囲を選択してしまわないよう注意してください。
関数を実行する前に、除外したいシート名を指定することができます。除外したいシートがある場合は、ダイアログにその名前を入力してください。複数のシート名を指定する場合は、カンマで区切って入力します。
これらの関数は、手動で同じ操作を繰り返す手間を省くために役立ちます。
ただし、適用範囲や除外シートの設定には注意が必要です。範囲の選択やシートの指定に誤りがあると、予期しない結果を招く可能性があります。
GASで複製削除を行うと、「元に戻す」が効きませんので、常に注意深く操作を行ってください。
まとめ
以上、「Google Apps Script (GAS)を用いて、スプレッドシート内の選択範囲を他のシートにコピーしたり、またはその範囲を他のシートから削除する方法」についてお伝えしました。
これらの関数は、Googleスプレッドシートで特定のセル範囲を他のシートにコピーしたり、それらを削除したりするために使用されます。
ユーザーが指定したシートを除外する機能も付いているため、特定のシートに影響を与えずに作業することが可能です。
以上のような機能は、大量のデータを管理する際や、同じ形式のデータを複数のシートに適用する必要がある場合などに非常に役立ちます。
是非活用してみて下さい!
コメント