■対象者
スプレッドシートで議事録を作成している方
毎回作成している議事録を部分的に自動化したい方
毎週作成するのが面倒な方
議事録作成はビジネスやチーム活動において重要なタスクですが、手作業で作成すると時間と手間がかかります。そこで、GoogleスプレッドシートのGAS(Google Apps Script)を活用すれば、議事録の自動作成が可能です。今回は、GoogleスプレッドシートのGASを使った議事録自動作成の方法をご紹介します。
※「GAS」とは、「Google Apps Script」の略称です。
GASの設定と準備
まずはGoogleスプレッドシートを開き、メニューバーから「ツール」→「スクリプトエディタ」を選択します。そこでGASのコードを作成する準備をします。
実際のコード
function copySheet(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheets()[2];
const sheetname = sheet.getSheetName();
const date = Moment.moment(sheetname);
const azyenda = date.add(7,"days");
const formattedDate = azyenda.format("YYYY/MM/DD");
sheet.copyTo(ss); //最新のアジェンダをコピー
const numSheets = ss.getNumSheets();
const newsheet = ss.getSheets()[numSheets-1];
newsheet.activate(); newsheet.setName(formattedDate);
ss.setActiveSheet(newsheet); ss.moveActiveSheet(3);//シートを移動 }
function ajenda() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = spreadsheet.getSheets();
var thirdSheetName = sheets[2].getName(); // 左から三番目のシート名 var fourthSheetName = sheets[3].getName(); // 左から四番目のシート名
var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(fourthSheetName);
var destinationSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(thirdSheetName);
// 元のシートのB列の値が「2. アジェンダ」の一つ下から「3. 次回の行動」の一つ上までの範囲で列A~Qをコピーする
var agendaValue = '2. アジェンダ';
var nextActionValue = '3. 次回の行動';
var startRow = -1;
var endRow = -1;
var lastRow = sourceSheet.getLastRow();
// 元のシートを走査して範囲を特定する
for (var i = 2; i <= lastRow; i++) {var value = sourceSheet.getRange('B' + i).getValue();
if (value === agendaValue) {startRow = i + 1;
// 「2. アジェンダ」の一つ下の行を開始行とする } else if (value === nextActionValue)
{endRow = i - 1; // 「3. 次回の行動」の一つ上の行を終了行とする
break; } }
// コピー元の範囲を指定して値をコピーする
if (startRow > 0 && endRow > 0) { var sourceRange = sourceSheet.getRange('A' + startRow + ':Q' + endRow);
var copiedValues = sourceRange.getValues();
// コピー先のシートの11行目以下を削除する
var destinationLastRow = destinationSheet.getLastRow();
if (destinationLastRow >= 11) {destinationSheet.deleteRows(11, destinationLastRow - 10);}
// コピーした値を張り付ける
var pasteRange = destinationSheet.getRange(11, 1, copiedValues.length, copiedValues[0].length);
pasteRange.setValues(copiedValues); }
// C列の一番下の値の行+1行のB列に「2. アジェンダ」を記入する
var lastValueRow = pasteRange.getLastRow();
var lastValueCol = 3; //
C列の列番号 var agendaCell = destinationSheet.getRange(lastValueRow, 2);
// B列のセル agendaCell.setValue(agendaValue);
// 「2. アジェンダ」と記入した行の下に10行追加する
var agendaRow = lastValueRow + 1; var numRowsToAdd = 10;
var newagendaRow = lastValueRow // 10行追加するための空のデータ行を作成
var emptyRows = []; for (var i = 0; i < numRowsToAdd; i++) { var emptyRow = []; for (var j = 0; j < 3; j++) { emptyRow.push(""); } emptyRows.push(emptyRow); }
// 10行追加 destinationSheet.getRange(agendaRow + 1, 1, numRowsToAdd, 3).setValues(emptyRows);
// 追加した行に「3.次回の行動」を出力する
var nextActionRange = destinationSheet.getRange(agendaRow + 8, 2, 1, 1); nextActionRange.setValue(nextActionValue); // 追加した行の一つ下の各列に値を記入する var newRow = agendaRow + 9;
var dateValue = "日付";
var departmentValue = "部署名";
var responsibleValue = "担当";
var titleValue = "タイトル";
var nextReportDateValue = "次回報告日";
var deadlineValue = "デッドライン";
var nextActionRow = agendaRow + 8;
destinationSheet.getRange(newRow, 3).setValue(dateValue); // C列に日付を記入 destinationSheet.getRange(newRow, 4).setValue(departmentValue); // D列に部署名を記入 destinationSheet.getRange(newRow, 5).setValue(responsibleValue); // E列に担当を記入 destinationSheet.getRange(newRow, 6).setValue(titleValue); // F列にタイトルを記入 destinationSheet.getRange(newRow, 13).setValue(nextReportDateValue); // M列に次回報告日を記入 destinationSheet.getRange(newRow, 16).setValue(deadlineValue); // P列にデッドラインを記入
// 10行目の色を取得
var range10 = destinationSheet.getRange('A10');
var color10 = range10.getBackground();
// 2. アジェンダの行に色を設定
var agendaRange = destinationSheet.getRange('A' + newagendaRow + ':P' + newagendaRow); // 列AからPまでの範囲
agendaRange.setBackground(color10);
// 3. ネクストアクションの行に色を設定
var nextActionRange = destinationSheet.getRange('A' + nextActionRow + ':P' + nextActionRow); // 列AからPまでの範囲 nextActionRange.setBackground(color10);}
上記のGASで出来ること
・使用イメージとしては、スプレッドシートの一番左のシートにコピーしたい
原本のスプレッドシートがありそれをコピーして左から三番目に新しいシートを作成する。
・前回の議事録と同じ内容が左から3番目のシートに作成されている状態です。
そのシートの上から10行目までは固定して、それより下の内容をコピーしている状態です。
・前回のアジェンダは「2.アジェンダ」という行以下の値になるので
それをコピーして上部に移動、新しく今週の議題を入力できる形にする。
・これをトリガーで定例がある日の夜に設定していれば、毎回作成する手間が省けます。
最後に
意外と毎週議事録+次回分を作成するとなると手間なので、上記を組み込むことで楽になります。