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

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

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

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

Q&A

1回答

1367閲覧

セルの値によってコピー先のシートを指定したい

ffpreview

総合スコア12

Google Apps Script

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

0グッド

1クリップ

投稿2018/11/21 07:25

実現したいこと

現在、「各納品先」シートから「9月」シートの最終行の該当列へデータを転記するスクリプトは「 https://teratail.com/questions/106446 」様を参考にして作成できました。

完成形としては、「各納品先」シートの請求月(O列)が9月の時は9月のシートへ、10月の時は10月のシートへ転記されるようにしたいのですが可能でしょうか。(9月~2月のシートはすべて同じフォーマットです。)

何卒ご教示いただけますと幸いです。

「各納品先」シート
イメージ説明

「9月」シート
イメージ説明

該当のソースコード

function copy(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet_copyFrom = ss.getSheetByName('各納品先'); var lr = sheet_copyFrom.getLastRow(); var lc = sheet_copyFrom.getLastColumn(); var sheet_copyTo = ss.getSheetByName('9月');  // コピー範囲取得 var copyRange = sheet_copyFrom.getRange(6,1,lr,lc); var copyRange0 = sheet_copyFrom.getRange(6,17,lr); var lastRow = sheet_copyTo.getLastRow(); var lastRow1 = lastRow + 1;  // コピー範囲の値を取得し、対象範囲へ転記  var copyValues = copyRange.getValues(); sheet_copyTo.getRange(lastRow1,5,lr,lc).setValues(copyValues); var copyValues0 = copyRange0.getValues(); sheet_copyTo.getRange(lastRow1,3,lr).setValues(copyValues0); }

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

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

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

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

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

papinianus

2018/11/21 07:40

すみません。質問が分かりません。「可能ですか」が質問なら「可能です」となりますが、これは回答として短すぎて、回答ボタンが押せません。また、コードを書いてくれだとしたら(非推奨質問)、どのデータが何列にあるか分からない図ですし、テストしようにもデータ打ち込みをしなければならず、回答したくてもできません。markdownのテーブルか、最低でもコピペできるサンプルデータと列の表示が必須です。いずれにしても質問があいまいです
guest

回答1

0

現状のコードと全く同じ状況を再現するとこんな感じかな?

GAS

1function copy(){ 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet_copyFrom = ss.getSheetByName('各納品先'); 4 var lr = sheet_copyFrom.getLastRow(); 5 var lc = sheet_copyFrom.getLastColumn(); 6 7 // コピー範囲取得 8 var copyValues = sheet_copyFrom.getRange(6, 1, lr - 5, lc).getValues(); // 毎回全部コピーだけどいいのかな… 9 10 // 対象の月を抽出 11 var monthList = copyValues.map(function(x) { 12 return x[14]; 13 }).filter(function(x, i, self) { 14 return self.indexOf(x) === i; 15 }); 16 17 // 月単位でコピーを実行する 18 monthList.forEach(function(x) { 19 var targetValues = copyValues.filter(function(f) { 20 return f[14] === x; 21 }); 22 var deptValues = targetValues.map(function(f) { 23 return [f[16]] 24 }); 25 26 var sheet_copyTo = ss.getSheetByName(x); 27 var newRow = sheet_copyTo.getLastRow() + 1; 28 sheet_copyTo.getRange(newRow, 5, targetValues.length, lc).setValues(targetValues); 29 sheet_copyTo.getRange(newRow, 3, deptValues.length).setValues(deptValues); 30 }); 31}

投稿2018/11/26 09:19

macaron_xxx

総合スコア3191

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問