質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1761閲覧

gasでrawデータを帳票化したい

KazukiMiyauchi

総合スコア15

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/03/04 07:35

編集2019/03/04 10:38

GAS 帳票作成コード
gasで、 下記図のようなRawデータを帳票化するjavaを書いております。
イメージ説明

上記のRawデータを下記のような帳票に自動で入力させるように構築したいのですが上手くいきません。
*同品番であれば、カラー、香り毎の売上を帳票に入力後次の品番へ移るといった具合です。
イメージ説明

java

1function test() { 2 var sheet,sheet2,gyo,col,color,shee,col2,gyo2,gedai,iro,suu,mei,hinban,joudai,matome,t,joudai2,s 3 var lastRow 4 var s1,s2,s3,s4,s5,s6 5 6 gyo = 2; 7 col = 2; 8 gyo2 = 2; 9 col2 = 2; 10 t = 0; 11 s = 0; 12 13 14 15 sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('データ貼り付けシート'); 16 sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('帳票シート'); 17 lastRow = sheet.getLastRow() 18 19 for (var gyo=2; gyo<=lastRow; gyo++) { 20 21 joudai = sheet.getRange(gyo,1).getValue(); 22 joudai2 = sheet.getRange(gyo+1,1).getValue(); 23 hinban = sheet.getRange(gyo,2).getValue(); 24 gedai = sheet.getRange(gyo,3).getValue(); 25 mei = sheet.getRange(gyo,4).getValue(); 26 suu = sheet.getRange(gyo,5).getValue(); 27 color = sheet.getRange(gyo,8).getValue(); 28 29 30 s1 = sheet2.getRange(gyo2+9,col2+s).setValue(joudai); 31 s2 = sheet2.getRange(gyo2+5,col2+s).setValue(hinban); 32 s3 = sheet2.getRange(gyo2+11,col2+s).setValue(gedai); 33 s4 = sheet2.getRange(gyo2+7,col2+s).setValue(mei); 34 s5 = sheet2.getRange(gyo2,col2+3).setValue(suu); 35 s6 = sheet2.getRange(gyo2+13+t,col2+s).setValue(matome); 36 s = s + 5; 37 38 39 if(col2 > 25){gyo2 = gyo2 + 15}; 40 41 42 43 } 44 45} 46 47コード

hinbanの変数が一個上セルと同じ数字なら,mei,suu,が同品番分、転機先シート、詳細項目、売上の下に入力されていくといった動きにしたいのですが、どうしたら良いかわかりません。
例)
品番100にはカラーが赤、青、黄色があり、売上はバラバラなので帳票へは品番を基軸としたカラー別売上を転記する必要があります。

また転機先シートへ作用したい if(col2 > 25){gyo2 = gyo2 + 15};この一文が作用せず、25列目を過ぎてもgyo2+15になりません。←解決しましたありがとうございました!

どなたかご教授願えましたら、幸甚です。
宜しくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macaron_xxx

2019/03/04 08:00

何をご教授願いたいのかもう少し明確化してください。 上手くいきません→何が? このままだと業務委託ですので見積もりをするぐらいしかできません。
papinianus

2019/03/04 08:02

丸投げにもほどがありますが、A列とか1行とかの部分を示さないと回答しようがないと思います(meiとsuuが両方4だったりmatomeが見えない9列目を示していたり、あまりに乱暴なので) 転記したい部分に至ってはどこに何を転記するか仕様が全く見えないです。ここまで書いたなら、想定する動きとどう違うかみたいなところが絞れるはずで、動かしてダメと思うところを探れって言われても仕様が分からないのでガンバって考えても何がどうだめかは他社の人間には分かりません。
KazukiMiyauchi

2019/03/04 08:37

大変失礼致しました。 追記致しましたのでご確認ください。
papinianus

2019/03/04 08:42

suuが8,colorが5だと思うんですが。なぜ仕様を隠したがるのか理解不能です。転記先については全く情報の更新がありませんでしたし。
macaron_xxx

2019/03/04 08:47 編集

追記された内容に回答しました。
KazukiMiyauchi

2019/03/04 08:52

papinianus 追記致しましたので、お手数でなければご確認下さい。 macaron_xxx様ご回答ありがとうございます!
macaron_xxx

2019/03/04 08:55 編集

カラー、サイズ、香りをすべて詳細項目に書くのかしら… >matome が結合したやつになる予定?
macaron_xxx

2019/03/04 08:56

Rawデータはソートとかしなくていいのかなー。
macaron_xxx

2019/03/04 08:57

左端だけ下代がないのは仕様なのかなー。
papinianus

2019/03/04 09:03

追記したとの点について、詳細項目の下に**何かを**入れるんだろうな、というのは最初から分かってます。「詳細項目」でなくて、「カラー」とかなら升目的には縦6個なので、カラー、サイズ、香り入れられるようにも思います。ですが結局のところ、既にmacaron_xxx様もコメントしてらっしゃるように、じゃあ具体的にどれをどういう順で入れるのか?、というのは分からないままです。 私は丸投げにも動くコード回答するタイプなんですがねぇ
guest

回答2

0

ベストアンサー

hinbanの変数が一個上セルと同じ数字なら,mei,suu,が同品番分帳票へ入力されるといった動きにしたいのですが、どうしたら良いかわかりません。

joudai2は↑の仕様からすればムダでしかないので、同じ仕組み(gyo + 1をgetRangeする)hinban2を作ったらいかがでしょうか。
で、デフォルトで同じ品番が続く前提のコードを作り、hinbanhinban2が違っていたら、次からは違う品番ですよと教えるフラグをtrueにする

javascript

1var newProduct = false; 2for ( 3 4color = sheet.getRange(gyo,8).getValue(); 5//colorのあとくらいで 6if(newProduct) { //sとかgyo2とかcol2とかを調整するコード } 7 8//sの計算をしているあたりで。というかsは変動して良いもの?? 9if(hinban != hinban2) { newProduct = true;} else {newProduct = false;}

また if(col2 > 25){gyo2 = gyo2 + 15};この一文が作用せず、25列目を過ぎてもgyo2+15になりません。

現状col2は変動しないので、25より大きくなることはないです。↑で概念的に書いたコードのif(newProduct)の分岐で、col2に足し算をすればいいと思います。またif(col2 > 25)では今度は1にリセットするコードも必要です。

周囲にプログラムを聞ける人がいないであろうので、一般的な助言ですが、やろうとしているとが複雑すぎるので、ステップに分解したほうがいいです。
まずは、品番が同じでも枠が分かれた状態で転記できるか、そのとき帳票は印刷最適化していない状態(横方向には1商品分しか置かない)にする。
これらができてから、横に2個、3個と増やしていけるかを試されたほうがいいです。

最初から答えだけが欲しいなら、外注してください。

投稿2019/03/04 08:51

編集2019/03/04 08:55
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

hinbanの変数が一個上セルと同じ数字なら,mei,suu,が同品番分帳票へ入力されるといった動きにしたいのですが、どうしたら良いかわかりません。

hinbanの変数が前のものと同じがどうかを比較するためには
ループを使うのであれば、befHinbanなどの変数に一つ前のhinbanを保持した状態で
ifで条件分岐したらよいです。

if(col2 > 25){gyo2 = gyo2 + 15};この一文が作用せず、25列目を過ぎてもgyo2+15になりません。

col2col2 = 2以降、変わっていませんので、col2 > 25が満たされることはありません。

投稿2019/03/04 08:47

編集2019/03/04 08:48
macaron_xxx

総合スコア3191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問