やりたいこと
1行1セルのリストがあります。
これを、GASを使って、別シートに2行1セルのリストに成形したいです。
手動では、以下の通りにやると、期待通りの結果になります。
- 「別シート」に2行1セルで結合したリストを下方向のオートフィルで作る
- INDIRECT関数とオートフィルを組み合わせ、元のリストを1行飛ばしで呼び出し
=INDIRECT("元のシート!"&"R"&(ROW()+1)/2&"C"&column(B$181), FALSE)
やってみたこと
手動でできることなので、GASでもできるのではないかと思ったのですが、
ちょっと難しくてよくわからなかったです。
まず、B1とB2の2行を結合することはできて、
javaScript
1function sample_Range_merge(){ 2 var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("コメントの成形"); 3 var rng = sh.getRange('B1:B2'); 4 rng.merge(); 5 }
あとは繰り返し文を使えばよさそうということまではわかるのですが、
理解が及ばず、それを最終行まで繰り返すことができませんでした。
仮にここがクリアできたとしても、
GASでINDIRECT関数のようなことをすることについても、
調べてみても、よくわかりませんでした。
みなさまの見解を聞いてみて、私にも理解できそうであれば、
ぜひともやってみたいと思うのですが、
私には理解できそうになければ、手動でもいいかなとも思っています。
よろしくお願いします。
追記1(進行状況)
元のリストが更新されたら、
「別シート」の一番下の行にINDIRECT関数の数式を入力するようなスクリプトを書きました。
でもこれだと、元のリストで空白の日があると、瞬く間に意味をなさなくなってしまうようです。
うーん…。
javaScript
1function zenbu(){ 2 var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("コメントの成形"); 3 Logger.log(sh); 4 var LastRow = sh.getLastRow(); 5 Logger.log(LastRow); 6 var rng = sh.getRange(LastRow,1).getValue(); 7 Logger.log(rng); 8 var rng2 = sh.getRange(LastRow,2).getValue(); 9 Logger.log(rng2); 10 if(rng != "" , rng2 != ""){ 11 sample_Range_merge(); 12 sample_Range_Formula1(); 13 sample_Range_Formula2(); 14 } 15} 16 17function sample_Range_merge(){ 18 var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("コメントの成形"); 19 var LastRow = sh.getLastRow(); 20 Logger.log(LastRow); 21 var rng = sh.getRange(LastRow+2,2,2); 22 var rng2 = sh.getRange(LastRow+2,1,2); 23 Logger.log(rng); 24 rng.merge(); 25 rng2.merge(); 26 } 27 28// 日付の入力(INDIRECT) 29function sample_Range_Formula1(){ 30 var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("コメントの成形"); 31 var LastRow = sh.getLastRow(); 32 Logger.log(LastRow); 33 var LastRow_Value = sh.getRange(LastRow,1).getValue(); 34 Logger.log(LastRow_Value); 35 var LastRow_Range2 = sh.getRange(LastRow+2,1); 36 Logger.log(LastRow_Range2) 37 LastRow_Range2.setFormula("=INDIRECT(\"コメント入力用シート!\"&\"R\"&(ROW()+1)/2&\"C\"&column(A$181), FALSE)"); 38 } 39 40// 数式の入力 41function sample_Range_Formula2(){ 42 var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("コメントの成形"); 43 var LastRow = sh.getLastRow(); 44 Logger.log(LastRow); 45 var LastRow_Value = sh.getRange(LastRow,1).getValue(); 46 Logger.log(LastRow_Value); 47 var LastRow_Range = sh.getRange(LastRow,2); 48 Logger.log(LastRow_Range) 49 LastRow_Range.setFormula("=INDIRECT(\"コメント入力用シート!\"&\"R\"&(ROW()+1)/2&\"C\"&column(B$181), FALSE)"); 50 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/03 07:26 編集
2018/05/06 03:26
2018/05/06 13:52 編集