Googleドライブのフォルダ内ファイルをまとめてコピー!スプレッドシート×GASで作業効率化
- 一つのフォルダ内にファイルが多数ある方
- フォルダ内のファイルコピーを自動化したい方
Googleドライブやスプレッドシートを使っていて、「フォルダを丸ごとコピーできれば便利なのに」と感じたことありませんか?
エクセルなどのデスクトップツールではフォルダごと簡単に複製できますが、残念ながらGoogleドライブではフォルダをコピーする操作がありません。
フォルダ内のファイルも手作業で一つ一つコピーするのは時間がかかり、作業も面倒です。
そこで今回は、Google Apps Script(GAS)を使ってフォルダ内のファイルをコピーする方法をご紹介します。
GASを使えば新しいフォルダを作成し、選択したファイルをそのフォルダへまとめてコピーできます。
この方法を使えば手作業の手間がなくなり、作業効率を改善できます!
完成イメージ
- Googleドライブ上の特定のフォルダと、その中のファイルをスプレッドシートに一覧化
- スプレッドシート上のチェックボックスで、コピーしたいファイルを選択
- 新しいフォルダを作成し、選択したファイルを一括コピー
- コピー後のファイル名とURLをスプレッドシートに記載
Googleドライブではフォルダのコピーという操作がないため、代わりに新しいフォルダを作成し、その中にコピーしたファイルを入れるようにします。
GAS1: フォルダとフォルダ内のファイルを一覧にする
GASを実行するだけでファイル一覧を自動作成
まず、Googleドライブ内の特定のフォルダと、そのフォルダ内にあるファイル情報をスプレッドシートに一覧でまとめます。
この手順では、Google Apps Script(GAS)を使ってスプレッドシート内に自動で項目を作成し、必要な情報を取得します。
GASで作成される内容は以下の通りです:
- A列 (現在のフォルダ名 / 現在のファイル名)
-
- A3: 現在操作しているフォルダの名前が表示されます(例: “テンプレートフォルダ”)
- A6以降: フォルダ内にあるファイルの名前が一覧表示されます。
- B列 (URL)
-
- B3: フォルダへのリンクが表示され、クリックすることでフォルダをすぐに確認できます。
- B6以降: フォルダ内の各ファイルのURLが表示され、クリックで直接ファイルを開くことが可能です。
- C列 (チェック)
-
C6以降: ファイルをコピーするかどうかを選択するためのチェックボックスが表示されます。
- D列 (新規フォルダ名 / コピー後ファイル名)
-
- ここでは項目のみ作成されます。
- D列は、新しいフォルダ名やコピー後のファイル名を手動で入力する列です。
- フォルダ名は手入力で指定し、各ファイルに対してもコピー後に付けたい名前を手入力します。
- E列 (新規フォルダのURL / コピー後ファイルのURL)
-
- ここでは項目のみ作成します。
- E列は、GASによって自動的に出力されるURLを表示するための列です。
- 新しく作成されたフォルダやコピーされたファイルのURLが、この列に自動で出力されるようになっています。
- そのため、手入力する必要はなく、項目だけが事前に作成されます。
GASを実行すると、現在のフォルダとその中にあるファイルの情報が一覧化されます。
コピーしたいファイルがあるフォルダの中に新しいスプレッドシートを作成します。
スプレッドシートを開いたら何も入力せず、次のステップに進みます。
(項目も含めてGASで記入するため)
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function listFilesInCurrentFolder() {
// スプレッドシートファイル(現在のファイル)を取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のスプレッドシートを取得
var spreadsheetFile = DriveApp.getFileById(spreadsheet.getId());
// スプレッドシートが入っているフォルダを取得
var folders = spreadsheetFile.getParents();
var folder = folders.hasNext() ? folders.next() : null; // 最初のフォルダを取得
if (!folder) {
Logger.log("フォルダが見つかりませんでした。");
return;
}
// "ファイル一覧"というシートが存在するか確認
var sheet = spreadsheet.getSheetByName('ファイル一覧');
// "ファイル一覧"シートが存在しない場合は新たに作成
if (!sheet) {
sheet = spreadsheet.insertSheet('ファイル一覧');
} else {
// シートが存在する場合は既存の内容をクリア
sheet.clear();
}
// A2からC2にヘッダーを設定
sheet.getRange('A2').setValue('現在のフォルダ名');
sheet.getRange('B2').setValue('URL');
sheet.getRange('A2:C2').setBackground('#FFF2CC'); // 明るい黄3
sheet.getRange('A2:C2').setHorizontalAlignment('center'); // 中央揃え
// フォルダ名とそのURLをA3とB3に表示(背景色なし)
sheet.getRange('A3').setValue(folder.getName());
sheet.getRange('B3').setValue(folder.getUrl());
// フォルダ用のヘッダーを設定 (D2〜E2)
sheet.getRange('D2').setValue('新規フォルダ名');
sheet.getRange('E2').setValue('新規フォルダのURL');
sheet.getRange('D2:E2').setBackground('#FFF2CC'); // 明るい黄3
sheet.getRange('D2:E2').setHorizontalAlignment('center'); // 中央揃え
// ファイル一覧のヘッダーを設定 (A5〜C5)
sheet.getRange('A5').setValue('現在のファイル名');
sheet.getRange('B5').setValue('URL');
sheet.getRange('C5').setValue('チェック');
sheet.getRange('A5:C5').setBackground('#E2EFDA'); // 明るい緑3
sheet.getRange('A5:C5').setHorizontalAlignment('center'); // 中央揃え
// コピー後のファイル用のヘッダーを設定 (D5〜E5)
sheet.getRange('D5').setValue('コピー後ファイル名');
sheet.getRange('E5').setValue('コピー後ファイルのURL');
sheet.getRange('D5:E5').setBackground('#E2EFDA'); // 明るい緑3
sheet.getRange('D5:E5').setHorizontalAlignment('center'); // 中央揃え
// フォルダ内のファイルを取得
var files = folder.getFiles();
var row = 6; // データは6行目から表示
// フォルダ内の全てのファイルをリストアップ
while (files.hasNext()) {
var file = files.next();
// ファイル名とURLを表示
sheet.getRange(row, 1).setValue(file.getName());
sheet.getRange(row, 2).setValue(file.getUrl());
// チェックボックスを追加
sheet.getRange(row, 3).insertCheckboxes();
row++;
}
// 列幅の調整
sheet.setColumnWidth(1, 150); // ファイル名の列幅
sheet.setColumnWidth(2, 400); // URLの列幅
sheet.setColumnWidth(3, 100); // チェックボックスの列幅
sheet.setColumnWidth(4, 150); // コピー後ファイル名の列幅
sheet.setColumnWidth(5, 400); // コピー後ファイルURLの列幅
Logger.log("現在のフォルダ内のファイルの一覧がスプレッドシートに追加されました。");
}
スクリプトの説明
- スプレッドシートとフォルダの取得
-
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のスプレッドシートを取得 var spreadsheetFile = DriveApp.getFileById(spreadsheet.getId()); // スプレッドシートのIDを取得
SpreadsheetApp.getActiveSpreadsheet()
は、現在操作しているスプレッドシートを取得するための関数です。DriveApp.getFileById()
でそのスプレッドシートのファイルを取得し、Googleドライブ上でどのフォルダに入っているかを確認できるようにします。
- フォルダを取得
-
var folders = spreadsheetFile.getParents(); var folder = folders.hasNext() ? folders.next() : null;
spreadsheetFile.getParents()
を使って、スプレッドシートが入っているフォルダを取得します。hasNext()
でフォルダが存在するかを確認し、最初のフォルダを選択しています。folder
が存在しない場合には、スクリプトを停止してログにエラーメッセージを出力します。
- スプレッドシートに「ファイル一覧」シートを作成
-
var sheet = spreadsheet.getSheetByName('ファイル一覧'); if (!sheet) { sheet = spreadsheet.insertSheet('ファイル一覧'); } else { sheet.clear(); }
- スプレッドシート内に「ファイル一覧」という名前のシートがあるかを確認します。
- 存在しない場合は新しく作成し、既に存在している場合はその内容をクリアします。
- フォルダ情報のヘッダーを設定
-
sheet.getRange('A2').setValue('現在のフォルダ名'); sheet.getRange('B2').setValue('URL'); sheet.getRange('A2:C2').setBackground('#FFF2CC').setHorizontalAlignment('center');
- A2セルとB2セルに「現在のフォルダ名」と「URL」というヘッダーを設定します。
- 背景色には「明るい黄3」を使用し、内容を中央揃えにしています。
- フォルダ名とURLを表示
-
sheet.getRange('A3').setValue(folder.getName()); sheet.getRange('B3').setValue(folder.getUrl());
- A3セルにはフォルダ名、B3セルにはフォルダのURLを表示します。
- これで、現在操作しているフォルダの基本情報がスプレッドシートに記載されます。
- 新規フォルダのヘッダーを設定
-
sheet.getRange('D2').setValue('新規フォルダ名'); sheet.getRange('E2').setValue('新規フォルダのURL'); sheet.getRange('D2:E2').setBackground('#FFF2CC').setHorizontalAlignment('center');
- D2とE2に新しいフォルダに関する情報を入力するためのヘッダーを作成します。
- この部分は後でフォルダコピーの際に使います。
- ファイル一覧のヘッダーを設定
-
sheet.getRange('A5').setValue('現在のファイル名'); sheet.getRange('B5').setValue('URL'); sheet.getRange('C5').setValue('チェック'); sheet.getRange('A5:C5').setBackground('#E2EFDA').setHorizontalAlignment('center');
- A5~C5に「ファイル名」「URL」「チェック」というヘッダーを作成します。
- ファイル一覧がここに表示され、チェックボックスを使ってどのファイルをコピーするか指定することができます。
- フォルダ内のファイルを取得
-
var files = folder.getFiles(); var row = 6; while (files.hasNext()) { var file = files.next(); sheet.getRange(row, 1).setValue(file.getName()); sheet.getRange(row, 2).setValue(file.getUrl()); sheet.getRange(row, 3).insertCheckboxes(); row++; }
folder.getFiles()
でフォルダ内のすべてのファイルを取得します。files.hasNext()
でファイルが存在する限り、1行ずつファイル名をA列、URLをB列、C列にチェックボックスを追加します。- これにより、フォルダ内のすべてのファイルがスプレッドシートに一覧化され、どのファイルをコピーするか選択できるようになります。
- 列幅の調整
-
sheet.setColumnWidth(1, 150); // ファイル名の列幅 sheet.setColumnWidth(2, 400); // URLの列幅 sheet.setColumnWidth(3, 100); // チェックボックスの列幅
- 列幅を調整し、ファイル名、URL、チェックボックスが見やすく表示されるように設定します。
コードを書いたら、名前をつけて保存します。
(例:「ファイル一覧」)
スクリプトを実行して、ファイル一覧を作成します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
スクリプトを実行すると、「ファイル一覧」というシートが作成されます。
シートには以下の内容が入力されます。
- 各項目名
- 現在のフォルダ名(コピー元)とURL(A3、B3セル)
- フォルダ内のファイル名とURLの一覧(A6、B6セル以降)
- 選択用のチェックボックスが表示(C6セル以降)
これでファイル一覧の完了です。
次のステップでこれらのファイルを新しいフォルダにコピーします。
GAS2: フォルダを新規作成・ファイルをコピー
次に、GASで新しいフォルダを作成し、スプレッドシートでチェックが入ったファイルを一括コピーします。
D3セルに新しいフォルダ名を入力します。
フォルダ名を入力しないと、GAS実行時にエラーとなります。
コピーしたいファイルにチェックを入れます。
(フォルダ内のファイルを丸ごとコピーする場合はすべてチェック)
コピー後のファイル名を入力します。
入力がない場合は「(現在のファイル名)のコピー」で作成されます。
先ほどと同様にGASエディタを開きます。
メニューの「拡張機能」から「Apps Script」を選択し、GASエディタを開きます。
以下のスクリプトを貼り付けます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function copyCheckedFiles() {
// スプレッドシートの情報を取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ファイル一覧');
// D3セルの内容を取得(新しいフォルダ名)
var newFolderName = sheet.getRange('D3').getValue();
if (!newFolderName) {
Logger.log("新しいフォルダ名が指定されていません。");
return;
}
// 新しいフォルダを作成
var newFolder = DriveApp.createFolder(newFolderName);
Logger.log("新しいフォルダが作成されました: " + newFolder.getName());
// 新しいフォルダのURLをE3に入力
sheet.getRange('E3').setValue(newFolder.getUrl());
// チェックされたファイルを処理
var lastRow = sheet.getLastRow(); // シートの最後の行を取得
for (var row = 6; row <= lastRow; row++) {
// C列にあるチェックボックスの状態を確認
var isChecked = sheet.getRange(row, 3).getValue();
if (isChecked === true) {
// 元のファイルのURLを取得(B列)
var originalFileUrl = sheet.getRange(row, 2).getValue();
// URLからファイルIDを取得
var fileId = originalFileUrl.match(/[-\w]{25,}/);
if (fileId) {
var file = DriveApp.getFileById(fileId[0]);
// 新しいファイル名(D列の内容)
var newFileName = sheet.getRange(row, 4).getValue();
// ファイルをコピーして、新しい名前を適用
var copiedFile = file.makeCopy(newFileName, newFolder);
Logger.log("ファイル " + file.getName() + " が " + newFileName + " としてコピーされました。");
// コピー後のURLをシートのE列に書き込み
sheet.getRange(row, 5).setValue(copiedFile.getUrl());
}
}
}
Logger.log("チェックされたファイルのコピーが完了しました。");
}
スクリプトの説明
- スプレッドシートの情報を取得
-
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ファイル一覧');
- スプレッドシート「ファイル一覧」を取得します。
- これにより、スクリプト内でシートのデータにアクセスできるようになります。
- 新しいフォルダ名の取得
-
var newFolderName = sheet.getRange('D3').getValue(); if (!newFolderName) { Logger.log("新しいフォルダ名が指定されていません。"); return; }
- D3セルに入力された新しいフォルダ名を取得します。
- このフォルダ名が空欄であれば、処理を中断し、エラーメッセージをログに出力します。
- 新しいフォルダ名が入力されていない場合、フォルダの作成ができないため、このチェックを行っています。
- 新しいフォルダの作成
-
var newFolder = DriveApp.createFolder(newFolderName); Logger.log("新しいフォルダが作成されました: " + newFolder.getName());
DriveApp.createFolder(newFolderName)
で、指定された新しいフォルダをGoogleドライブ上に作成します。- ログには、新しいフォルダの名前が表示され、作成が成功したことを確認できます。
- 新しいフォルダのURLをE3セルに書き込み
-
sheet.getRange('E3').setValue(newFolder.getUrl());
- 新しく作成したフォルダのURLを取得し、スプレッドシートのE3セルに書き込みます。
- これにより、作成されたフォルダにすぐアクセスできるようになります。
- チェックされたファイルの処理
-
var lastRow = sheet.getLastRow(); // シートの最後の行を取得 for (var row = 6; row <= lastRow; row++) { var isChecked = sheet.getRange(row, 3).getValue();
lastRow
を使ってスプレッドシートの最後の行を取得し、6行目から順番にC列(チェックボックス)を確認します。- チェックボックスが
true
であれば、その行のファイルがコピー対象となります。
- 元のファイルのURLとファイルIDを取得
-
var originalFileUrl = sheet.getRange(row, 2).getValue(); var fileId = originalFileUrl.match(/[-\w]{25,}/); if (fileId) { var file = DriveApp.getFileById(fileId[0]);
- チェックされた行のB列にあるファイルのURLを取得します。
- URLからファイルIDを抽出し、そのファイルIDを使ってGoogleドライブ上のファイルを取得します。
DriveApp.getFileById()
でファイルのIDからファイルオブジェクトを取得します。
- 新しいファイル名を設定し、ファイルをコピー
-
var newFileName = sheet.getRange(row, 4).getValue(); var copiedFile = file.makeCopy(newFileName, newFolder); Logger.log("ファイル " + file.getName() + " が " + newFileName + " としてコピーされました。");
- D列に入力されている新しいファイル名を取得し、その名前でファイルをコピーします。
file.makeCopy(newFileName, newFolder)
で、ファイルが新しいフォルダにコピーされます。- コピー後のファイル名も新しく指定されます。ログには、元のファイル名とコピー後のファイル名が表示され、コピーが成功したことが確認できます。
- コピー後のファイルURLをシートに書き込み
-
sheet.getRange(row, 5).setValue(copiedFile.getUrl());
- コピーされたファイルのURLを取得し、E列に書き込みます。これにより、どこにコピーされたかが一目でわかるようになります。
- 処理完了のログ出力
-
Logger.log("チェックされたファイルのコピーが完了しました。");
- 全ての処理が完了した後、ログに「チェックされたファイルのコピーが完了しました」と出力され、処理が正常に終了したことが確認できます。
コードを書いたら、名前をつけて保存します。
(例:「フォルダ・ファイルコピー」)
スクリプトを実行して、新規フォルダ、ファイルコピーを作成します
スクリプト実行で、以下の処理が行われます。
- 新しいフォルダを作成:
D3セルに入力されたフォルダ名を基に新しいフォルダをGoogleドライブに作成します。
そのURLをスプレッドシートのE3セルに書き込みます。 - ファイルのコピー:
C列のチェックボックスで選択されたファイルを、指定された新しい名前(D列)で新しいフォルダにコピーします。 - URLの書き込み:
コピー後のファイルURLをスプレッドシートのE列に書き込みます。
Googleドライブ内に選択した新規のフォルダとファイルのコピーが出来上がります。
このスクリプトで、選択したファイルを新しいフォルダにコピーし、ファイル名を変更しながらGoogleドライブに保存できます。
まとめ
- スプレッドシート×GASでファイル一覧を自動取得
- コピーするファイルをスプレッドシート上で選択して操作
- 新しいフォルダへファイルを一括コピー
今回の記事では、Googleドライブ上のフォルダとそのファイルをスプレッドシートとGoogle Apps Scriptを使ってコピーする方法を紹介しました。
GASを使うことで、手動で行っていたファイルのコピー作業を自動化でき、作業効率を向上できます。
ぜひご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント