前提・実現したいこと
こんにちは、はじめての質問になります。
GASにて列に格納された配列を分割したあとにその値と他の列を参照して決まった位置に決まった値をセットするというコードを書きたいのですがやり方がわからず困っています。
具体的にはD列に日付とその日の値段が配列の形で格納されており、この値段部分を第一行の日付を参照した場所(画像の赤枠の部分)にセットしたいです。
画像の様に関数では実現できたのですが、これだと応用が利かずGASで実現したいと思っております。
ちなみに第二行に[]で囲まれた日付がありますが、元々の文字列が[]で囲まれているため無理やり付け足しただけで、できれば一行目の様に普通の日付を参照したいと思っております。
画像は途中で切れていますが日付は6/11-7/10までになります。
発生している問題・エラーメッセージ
D列の配列がsplitにて分割できない。※そもそもsplitでいいのかも怪しいです。 列を参照して特定の位置にセットする方法がわからない。 引用ページ:[リンク内容](https://vba-gas.info/gas-split2) 引用ページ:[リンク内容](https://qiita.com/sha9sa9/items/8d10f550c673336ba1f4)
該当のソースコード
GAS
1function myFunction() { 2var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 3var sh = ss.getSheetByName('ダブル'); //アクティブなスプレッドシートのアクティブシートを取得 4var last_row=sh.getLastRow(); //シートの最終行を取得 5var last_column=sh.getLastColumn(); //シートの最終列を取得 6 7var rows = sh.getRange(3,4,last_row,1).getValues(); //複数の値を取得 8var ary = sh.getRange("D5").getValue(); //特定の値を取得 9var columns = sh.getRange(2,5,1,last_column); 10var columnsValues = columns.getValues(); 11 12 var items=[rows] 13 14 items.forEach(function( value ) { 15 Logger.log(value); 16 }); 17 18 ary.split(' ').forEach( function( values ) { 19 20 Logger.log(values); 21 22 }); 23 24 25var count = ary.length; //配列変数aryの配列数を調べる 26var num=columns.getNumColumns(); 27 28 for (var i = 0; i < count/2; i++) { 29 30sh.getRange(12, 9+i).setValue(ary[2*i+1]); //配列変数aryの値段部分だけを取り出す 31 32 } 33} 34
試したこと
変数aryの様に一つのセルを取得した場合、splitで分割できたのですが、rowsの様に列全体で取得するとsplitで分割するとエラーがでてしまいこれがどうしても解決できませんでした。
いろいろ調べてforEach関数なども使ってみたのですがやはりうまくいきませんでした。
2次元配列を1次元配列にしてループで回したりするのでしょうか?
また値のセットの仕方も簡単な物や参照しない方法でならできたのですが今回の自分のやりたいことはやり方がわかりませんでした。
GASどころかプログラミング自体全くの素人の為、コードもいろいろ試した跡が残ってしまっていてかなり見にくいかもしれません。大変申し訳ありません。。
お手数ですがご回答いただければ幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー