🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Apps Script

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

Q&A

解決済

1回答

516閲覧

シートBに入力したデータをシートAへ少しルールを変えて指定行数で挿入したいです。

MKom

総合スコア5

Google Apps Script

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

0グッド

0クリップ

投稿2019/09/15 08:11

前提・実現したいこと

GAS初心者です。

シートBに、以下のようなデータがあります。

クラス名前えんぴつ消しゴムノート下敷き
1太郎2131
2花子3221
1良子1211

シートAへシートBからデータを参照して、以下の様に
それぞれ商品名で表示の上、データ元で指定した商品数の行数で表示させたいです。

クラス名前商品
1太郎えんぴつ
1太郎えんぴつ
1太郎消しゴム
1太郎ノート
1太郎ノート
1太郎ノート
1太郎下敷き
2花子えんぴつ
2花子えんぴつ
2花子えんぴつ
2花子消しゴム
2花子消しゴム
2花子消しゴム
2花子ノート
2花子ノート
2花子下敷き
1良子えんぴつ
1良子消しゴム
1良子消しゴム
1良子ノート
1良子消しゴム

試したこと

ネットで色々と調べてみましたが、
スクリプトでなんとかなりそうと感じるまでで
先へ進めずにいます。
何卒ご教示いただきたいです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

スクリプトを書いてみました。

function myFunction() { var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var aSheet = spreadSheet.getSheetByName('シートA'); var bSheet = spreadSheet.getSheetByName('シートB'); var aResultRowStart = 2; // シートAのヘッダの次行の番号を設定する var bItemColumnStart = 3; // シートBの商品列の開始地点の番号を設定する var bPersonRowStart = 2; // シートBのヘッダの次行の番号を設定する var aRow = aResultRowStart; var bRow = bPersonRowStart; var bColumn = bItemColumnStart; while (bSheet.getRange(bRow, bItemColumnStart).getValue() !== '') { // シートBの商品列が空のセルが見つかるまで、下方向に処理を続ける while (bSheet.getRange(bRow, bColumn).getValue() !== '') { // シートBの人物ごとの商品が空のセルが見つかるまで、右方向に処理を続ける for (var count = 0; count < bSheet.getRange(bRow, bColumn).getValue(); count++) { // シートBの人物ごとの商品セルに入力されている回数分、処理を繰り返す // シートBから、クラス、名前、商品名を取得する var classNo = bSheet.getRange(bRow, bItemColumnStart - 2).getValue(); var name = bSheet.getRange(bRow, bItemColumnStart - 1).getValue(); var item = bSheet.getRange(bPersonRowStart - 1, bColumn).getValue(); // シートAに設定する aSheet.getRange(aRow, 1).setValue(classNo); aSheet.getRange(aRow, 2).setValue(name); aSheet.getRange(aRow, 3).setValue(item); // シートAの行数を1増やす aRow += 1; } // シートBの人物ごとの商品セルに入力されている回数分、処理を繰り返したので、右隣のセルに移る bColumn += 1; } // シートBの人物ごとの商品が空のセルが見つかったので、下の行に移る bRow += 1; bColumn = bItemColumnStart; } // シートBの商品列が空のセルが見つかったので、処理おしまい }

あらかじめ、以下のような感じでシートA、シートBが作成されていることが前提となります。

イメージ説明

スクリプトの作成方法・実行方法については、以下のサイトなどを参考にしながら頑張ってみてください!

https://tonari-it.com/gas-script-editor/

投稿2019/09/15 14:59

yktakaha4

総合スコア41

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

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

MKom

2019/09/16 06:56

早々にありがとうございました! 全く思い通りの動作に、感激しております。 同時に、自分が何も分かっていないことも、よく分かりました。 いただいたスクリプトでしっかり勉強させていただきます。
macaron_xxx

2019/09/17 01:38

このスクリプトはデータが多くなると処理が非常に重くなります。 すべて配列に取得してから実行することをおすすめします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問