初心者です。
Google Apps Scriptで質問があります。
宜しくお願い致します。
前提・実現したいこと
スプレッドシートの予定カレンダーを、行ごとに「C」を検索キーにして、
Cがあればその行の「nn、x月」「A、B、C、EorFの日付」をsheet2に転記します。
条件
・転記範囲は予定表をカーソルで指定し、アクティブにする。
・「C」がなければ転記せず、無視する。
(バナナは「C」がないのでアクティブなセルでも転記しない。)
・アクティブのセルの行、列まで繰り返す。
【コードが不明】
・「E」より「F」の日付が優先される。
(if~else ifだとは思いますが…。)
・同じ行に複数の「A~F」が入ることもある。その場合は「お野菜」行を新しく転記する。
(重複した場合、セル範囲をColumn、offsetでよろしいんでしょうか?)
予定表
お野菜|4/1|4/2|4/3|4/4|4/5|4/6|4/7|
りんご|A |x月|B |C |D |E |F |
みかん| | |A |u月|B |C |D |
バナナ| |A |m月|B | |D |E |
sheet2
お野菜|x月|A |B |C |EorF|
りんご|x月|4/1|4/3|4/4|4/7|
みかん|u月|4/3|4/5|4/6| |
用途:
「お野菜」ごとに日付をまとめる。
初心者には難しく、コードを調べても応用できないものもありました。
勉強不足ですが、何卒ご回答宜しくお願い致します。
・発生している問題・エラーメッセージ
実行しても転記されません。
### ソースコード function myFunction() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var Calendar = sheet.getSheetByName('予定表'); var task = sheet.getSheetByName('sheet2'); var objCell = Calendar.getActiveCell();//アクティブなセル範囲を取得 var lastRow = objCell.getLastRow(); //アクティブなセル範囲の最終行 var lastCol = objCell.getLastColumn(); //アクティブなセル範囲の最終列 var yasai = 'A';//A列お野菜を指定 var A = 'A';//検索ワード var sub = '*月'; var B = 'B'; var C = 'C'; var D = 'D'; var E = 'E'; for ( var i = 1 ; i <= lastRow ; i++ ){ //最終行まで繰り返す if(i,lastCol == C){ //検索行に「C」があれば var cellA = A.getRange(A + i );//Aのセルを指定 var cellB = B.getRange(B + i );//Bのセルを指定 var yasaistr = yasai.getRange(yasai + i );//お野菜のセルを指定 var substr = sub.getRange(sub + i );//お野菜のセルを指定 var Astr = cellA.offset(0, -i).getValue();//Aの日付を取得 var Bstr = cellB.offset(0, -i).getValue();//Bの日付を取得 task.getRange(i+1,1).setValue(yasaistr);//項目行をとばして「お野菜」を転記 task.getRange(i+1,2).setValue(substr);//項目行をとばして「x月」を転記 task.getRange(i+1,3).setValue(Astr);//項目行をとばして「A」の日付を転記 task.getRange(i+1,4).setValue(Bstr);//項目行をとばして「B」の日付を転記 } } }
追記
function myFunction2() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var Calendar = sheet.getSheetByName('予定表'); var task = sheet.getSheetByName('sheet2'); var objCell = Calendar.getActiveRange().getValues();//配列に格納 var lastRow = 3; var h = Calendar.getRange(1, 1); var yasai= ''; var cellsub= 0; var cellA= 0; var cellB= 0; var cellC= 0; var Astr= ''; var Bstr= ''; var Cstr= ''; var substr= ''; var Startcell= 0; var last = task.getLastRow(); for (var i=1 ; i <= lastRow; i++){ Startcell = objCell[i].indexOf('C'); if(Startcell >= 0 ){ yasai = h.offset(i,0).getValue(); cellsub = objCell[i].search(/.*?月/); cellA = objCell[i].indexOf('A'); cellB = objCell[i].indexOf('B'); cellC = objCell[i].indexOf('C'); substr = h.offset(i,cellsub).getValue(); Astr = h.offset(0,cellA).getValue(); Bstr = h.offset(0,cellB).getValue(); Cstr = h.offset(0,cellC).getValue(); task.getRange(last+1+i,1).setValue(yasai); task.getRange(last+1+i,2).setValue(substr); task.getRange(last+1+i,3).setValue(Astr); task.getRange(last+1+i,4).setValue(Bstr); task.getRange(last+1+i,5).setValue(Cstr); } } }
ヒントを元に変更しました。配列の要素の部分一致ができません。。。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/26 13:06
退会済みユーザー
2018/05/26 13:29
退会済みユーザー
2018/05/26 14:07
退会済みユーザー
2018/05/26 14:56
退会済みユーザー
2018/05/29 12:40 編集
退会済みユーザー
2018/05/28 13:36 編集
退会済みユーザー
2018/05/29 12:45
退会済みユーザー
2018/05/29 14:18