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

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

ただいまの
回答率

90.40%

  • JavaScript

    21469questions

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

  • Google Apps Script

    1401questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 170

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

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

function test() {
  var sheet,sheet2,gyo,col,color,shee,col2,gyo2,gedai,iro,suu,mei,hinban,joudai,matome,t,joudai2,s
  var lastRow 
  var s1,s2,s3,s4,s5,s6

  gyo = 2;
  col = 2;
  gyo2 = 2;
  col2 = 2;
  t = 0;
  s = 0;



  sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('データ貼り付けシート');
  sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('帳票シート');
  lastRow = sheet.getLastRow()

   for (var gyo=2; gyo<=lastRow; gyo++) { 

  joudai = sheet.getRange(gyo,1).getValue();
  joudai2 = sheet.getRange(gyo+1,1).getValue();
  hinban = sheet.getRange(gyo,2).getValue();
  gedai = sheet.getRange(gyo,3).getValue();
  mei = sheet.getRange(gyo,4).getValue();
  suu = sheet.getRange(gyo,5).getValue();
  color = sheet.getRange(gyo,8).getValue();


  s1 = sheet2.getRange(gyo2+9,col2+s).setValue(joudai);
  s2 = sheet2.getRange(gyo2+5,col2+s).setValue(hinban);
  s3 = sheet2.getRange(gyo2+11,col2+s).setValue(gedai);
  s4 = sheet2.getRange(gyo2+7,col2+s).setValue(mei);
  s5 = sheet2.getRange(gyo2,col2+3).setValue(suu);   
  s6 = sheet2.getRange(gyo2+13+t,col2+s).setValue(matome);
  s = s + 5;


   if(col2 > 25){gyo2 = gyo2 + 15};



    }

}

コード


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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • macaron_xxx

    2019/03/04 17:56

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

    キャンセル

  • macaron_xxx

    2019/03/04 17:57

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

    キャンセル

  • papinianus

    2019/03/04 18:03

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

    キャンセル

回答 2

checkベストアンサー

+1

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

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

var newProduct  = false;
for (

color = sheet.getRange(gyo,8).getValue();
//colorのあとくらいで
if(newProduct) { //sとかgyo2とかcol2とかを調整するコード }

//sの計算をしているあたりで。というかsはいんさつ
if(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個と増やしていけるかを試されたほうがいいです。

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.40%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • JavaScript

    21469questions

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

  • Google Apps Script

    1401questions

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