【GoogleAPPScript】GASでマトリクス表を作成させる
上司から何かあるとすぐにマトリクス表で考えろと言われるので、マトリクス表を手動で作っていたけど、これ規模が拡大してくると絶対ミスるよなと思い、Googleスプレッドシートで自動生成してくれるものを準備した。
なんか最近こういうの多い・・・・。
同じ文字列だと数字の1を立ててくれて総当たりみたいなことはできるようにはしています。
なので、総当たりみたいな感じのことをしたときは同じものが当たらない様にはしてくれます。
■GASコード
function matrix() { const SHEET_URL = SpreadsheetApp.getActiveSpreadsheet().getUrl(); const ss = SpreadsheetApp.openByUrl(SHEET_URL); const cs = ss.getSheetByName('マトリクス図検討'); const START_ROW = 3; const VERTICAL_COL = 1; const SIDE_COL = 2; const SHEETNAME_CELL = 'B1' const matrix = createMatrix(cs) // write spreadsheet const sheetname = getsheetName(cs,SHEETNAME_CELL) writeSheet_matrix(ss,matrix,sheetname,VERTICAL_COL); } function createMatrix(sheet) { const rangeA = sheet.getRange("A3:A").getValues(); // A4から最終行までの値を取得 const rangeB = sheet.getRange("B3:B").getValues(); // B4から最終行までの値を取得 const numRowsA = rangeA.filter(String).length; // A列の値が入力されている行数を取得 const numRowsB = rangeB.filter(String).length; // B列の値が入力されている行数を取得 // マトリクス配列を作成 const matrixArray = []; // 見出し行を追加 const headerRow = [""]; // 左上のセルは空欄 for (let i = 0; i < numRowsA; i++) { headerRow.push(rangeA[i][0]); } matrixArray.push(headerRow); // マトリクスのデータ行を追加 for (let i = 0; i < numRowsB; i++) { const dataRow = [rangeB[i][0]]; // B列の値を追加 for (let j = 0; j < numRowsA; j++) { if (rangeA[j][0] === rangeB[i][0]) { dataRow.push("1"); // 列の文字列と行の文字列が一致した場合は1を追加 } else { dataRow.push(""); // それ以外は空欄を追加 } } matrixArray.push(dataRow); } // マトリクス配列を返す return matrixArray; } /* Get sheetname from a Spreadsheet */ function getsheetName(targetSheet,targetCell){ const sheetName = targetSheet.getRange(targetCell).getValue(); return sheetName } /* Write values into a spreadsheet */ function writeSheet_matrix(targetSheet,array1,sheetname,array1Col){ let newSheet = targetSheet.insertSheet(); targetSheet.moveActiveSheet(targetSheet.getNumSheets()); newSheet.setName(sheetname) newSheet.getRange(1,array1Col,array1.length,array1[0].length).setValues(array1); }
こういうシートで
こんな感じで出来上がります。
後は直交表の自動生成かなぁ、、、、。
コメント