実現したいこと
在庫表の5行目の番号ごとに3つのGASをコピペして //変更 部分を変更しているが(全部で8箇所)、在庫している種類が沢山ある為1つずつ変更するのが大変
番号ごとにコピペしなくても省略して変更できるようにしたい
詳細
画像1枚目から在庫表、繰越残更新用、送信履歴
在庫表の更新ボタンで3つのGASを実行している
在庫表は同じ列数(5列ずつ)で右に沢山連なっている
発生している問題・分からないこと
番号ごとにコピペしなくても省略して変更できるようにする方法がわからない
(このようなことが可能かどうかも分からない)
該当のソースコード
function kopi8() {//変更3 const gyo = 11; // 履歴データの基準となるセル const startCellName = ("B" + gyo);//変更4 // 品名(ダンボール)のセル const itemCellName = 'A5'; // 品名Noの行 const itemNumberRow = 5; // 履歴データの列数 const numColumns = 5; // 送信履歴データの記入開始列 const logStartColumn = 4; // それぞれのシートを取得 const itemSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ダンボール'); const logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('送信履歴'); // ダンボールシートの基準セルの行番号と列番号とダンボールNo const startCell = itemSheet.getRange(startCellName); const itemStartRow = startCell.getRow(); //行 const itemStartColumn = startCell.getColumn();//列 // 履歴見出しを作成 const date = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd'); const item = itemSheet.getRange(itemCellName).getValue(); const itemNumber = startCell.offset(itemNumberRow - itemStartRow, 0).getValue(); const titles = [date, item, itemNumber]; // ダンボールシートの基準セルからデータが連続する最下行までの行数 const itemLastRow = startCell.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); const numRows = itemLastRow - itemStartRow + 1; // 送信履歴シートの最終行 const logLastRow = logSheet.getLastRow(); // 履歴データを取得 const values = itemSheet .getRange(itemStartRow, itemStartColumn, numRows, numColumns) .getValues(); // 履歴見出しを記入 logSheet .getRange(logLastRow + 1, 1, 1, titles.length) .setValues([titles]); // 履歴データを記入 logSheet .getRange(logLastRow + 1, logStartColumn, values.length, values[0].length) .setValues(values); // 結果をログに表示 Logger.log(values); }
function rireki8() {//変更1 const ss = SpreadsheetApp.openById("別のファイルのリンク"); const sheet = ss.getSheetByName('繰越残更新用'); // 初期設定 const rowData = 3; // データの開始行 const colStart = 8; // 複数の列の開始列(H列) const colEnd = 17; // 複数の列の終了列(Q列) const colAdd = 29; // 単独の列(AC列) const clearValue = '8'; // 変更2,クリア対象の値 const colNames = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q']; const colNameAdd = 'AC'; // const values = sheet.getDataRange().getValues(); const lastRow = sheet.getLastRow(); const lastCol = sheet.getLastColumn(); const values = sheet.getRange(1, 1, lastRow, lastCol).getValues(); // 指定の列の中で値が8となっているセルを全て空白にする // ※ 配列valuesの要素は行(row)、列(col)ともシートの行番号、列番号より 1 小さい const rangeNames = []; for (let row = rowData - 1; row < values.length; row++) { // 複数の列の範囲の処理 for (let col = colStart - 1; col <= colEnd - 1; col++) { if (values[row][col] == clearValue) { rangeNames.push(colNames[col] + (row + 1)) } } // 単独の列の範囲の処理 if (values[row][colAdd - 1] == clearValue) { rangeNames.push(colNameAdd + (row + 1)) } } const rangeList = sheet.getRangeList(rangeNames); rangeList.setValue(''); }
2つを合わせて実行
1function exec8() {//変更5 2 3 var no = 'No.'; 4var bango = 8;//変更6 5 var bango1 = '更新します!'; 6 7 //メッセージボックスの表示形式 8 var res = Browser.msgBox(no+bango,bango1,Browser.Buttons.OK_CANCEL); 9 10 //OKボタンが押された際の動作 11 if(res == "ok"){ 12 13kopi8();//変更7 14rireki8();//変更8 15 16 //Cancelボタンが押された際の動作 17 }else if(res == "cancel"){ 18 var kyan = "キャンセルしました" 19 Browser.msgBox(kyan,Browser.Buttons.OK); 20} 21} 22
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
どこを変更したらいいかわからなかった
補足
特になし
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/12/16 08:06
2024/12/17 03:52
2024/12/17 06:47
2024/12/17 06:55 編集
2024/12/17 07:21 編集
2024/12/17 08:23
2024/12/17 08:29
2024/12/17 23:25 編集
2024/12/17 23:52