teratail header banner
teratail header banner
質問するログイン新規登録
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Q&A

2回答

559閲覧

シートの内容を転記したいが問題が

hitct2460

総合スコア11

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

0グッド

1クリップ

投稿2023/06/20 00:53

0

1

シートの内容を転記したいので、下記のコードを書きました。

GAS

1コード 2```function sample() { 3 //コピー先のスプレッドシート取得 4 var ss = SpreadsheetApp.openById('1Xa6mMu0rY33iAvvKvSnKzaNPSdRGwCfSh9xOL1foh1w'); 5 6 //コピー元のコピーしたいシートを取得 7 var sheet_main = SpreadsheetApp 8 .openById('1x5VtIGhBbcFtJBPuhI7NOlfHXExPJCW89fC5LnE9zQ4').getSheetByName('前半'); 9 10 //シートをコピー 11 copySheet = sheet_main.copyTo(ss); 12 13 //コピーしたシート名を変更 14 copySheet.setName('前半転記'); 15 16 //シートを任意の場所に移動 17 ss.setActiveSheet(copySheet); 18 ss.moveActiveSheet(1); //コピーしたシートを左から1番目に移動 19} 20

ですが、問題があります。
①まずはコピー元は関数が反映されているので、コピー先がREFになります。
なので値だけコピーをしたいです。
②コピー元の値が変更された時、再度コピーするのにはコピー先の「前半転記」を1回削除しなければならないこと。

この2つについてどなたかご教授願います。

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

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

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

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

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

hitct2460

2023/06/20 01:59

function sample() { //コピー先のスプレッドシート取得 const sheet = SpreadsheetApp.openById('1Xa6mMu0rY33iAvvKvSnKzaNPSdRGwCfSh9xOL1foh1w'); const trashSheet = sheet.getSheetByName("前半転記"); //削除するシートの名前を引数に記入 sheet.deleteSheet(trashSheet); //スプレッドシートを削除 //コピー先のスプレッドシート取得 var ss = SpreadsheetApp.openById('1Xa6mMu0rY33iAvvKvSnKzaNPSdRGwCfSh9xOL1foh1w'); //コピー元のコピーしたいシートを取得 var sheet_main = SpreadsheetApp .openById('1x5VtIGhBbcFtJBPuhI7NOlfHXExPJCW89fC5LnE9zQ4').getSheetByName('前半'); //シートをコピー copySheet = sheet_main.copyTo(ss); //コピーしたシート名を変更 copySheet.setName('前半転記'); //シートを任意の場所に移動 ss.setActiveSheet(copySheet); ss.moveActiveSheet(1); //コピーしたシートを左から1番目に移動 } と書く事でシートを削除する事が出来ました。 値だけコピーする方法をご教授願います
YellowGreen

2023/06/20 04:42

上のコードをそのままお使いになりたいのであれば、 とりあえずは、上のコードに続けて以下のコードを追加すると値だけを転記(上書き)できると思います。 var values = sheet_main.getDataRange().getValues(); if (values.length > 0) { copySheet.getRange(1, 1, values.length, values[0].length).setValues(values); }
guest

回答2

0

copyTo(spreadsheet) にあるようにシートのcopyToではコピーする内容を指定することができません。

RangeのcopyToであればcopyTo(destination, copyPasteType, transposed) copyTo(destination, options)のようにコピーする内容を指定することができます。

JavaScript

1// コピー元のデータのある範囲を取得 2let src = sheet_main.getDataRange(); 3// コピー先の左上のセル 4let dst = copySheet.getRange('A1'); 5 6// データ範囲をコピー(書式のみ) 7src.copyTo(dst,SpreadsheetApp.CopyPasteType.PASTE_FORMAT,false); 8// データ範囲をコピー(数式のみ) 9src.copyTo(dst,SpreadsheetApp.CopyPasteType.PASTE_FORMULA,false); 10// データ範囲をコピー(値のみ) 11src.copyTo(dst,SpreadsheetApp.CopyPasteType.PASTE_VALUES,false); 12// データ範囲をコピー(カラールールのみ) 13src.copyTo(dst,SpreadsheetApp.CopyPasteType.PASTE_CONDITIONAL_FORMATTING,false); 14// データ範囲をコピー(列の幅のみ) 15src.copyTo(dst,SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS,false); 16 17// データ範囲をコピー(コンテンツのみ) 18src.copyTo(dst,{contentsOnly:true}); 19// データ範囲をコピー(フォーマットのみ) 20src.copyTo(dst,{formatOnly:true}); 21

上記のうちコピーしたい物のみを実行すればよろしいかと思います。

投稿2023/06/20 02:56

YAmaGNZ

総合スコア10674

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

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

0

コメントに記載したとおりの二つの方法を選んで複写するスクリプトの例です。
どちら方法でも計算式は値のみで複写します。
ご希望の動作と異なるようでしたらごめんなさい。

JavaScript

1function sample() { 2 //複写モードの指定 3 //1:コピーモード 既存のシートがあれば削除して新たなシートに罫線、セル結合等も複写 4 //0:転記モード 既存のシートがあれば罫線等はそのままで値のみを転記 5 const mode = 0; 6 //コピー元・コピー先のシート名 7 const nameFrom = '前半'; 8 const nameTo = '前半転記'; 9 //コピー元のコピーしたいシートを取得 10 const sheetFrom = SpreadsheetApp 11 .openById(FROM_ID) 12 .getSheetByName(nameFrom); 13 //コピー先のスプレッドシートからコピー先のシートを取得 14 const ssTo = SpreadsheetApp.openById(TO_ID); 15 const sheet = ssTo.getSheets().find(v => v.getName() == nameTo); 16 //指定の方法で値のみを複写 17 if (mode) { 18 if (sheet) { 19 sheet.activate(); 20 ssTo.deleteActiveSheet(); 21 } 22 } 23 const sheetTo = mode ? sheetFrom.copyTo(ssTo).setName(nameTo) : sheet ? sheet : ssTo.insertSheet(nameTo); 24 const values = sheetFrom.getDataRange().getValues(); 25 if (values.length > 0) { 26 sheetTo.clearContents(); 27 sheetTo.getRange(1, 1, values.length, values[0].length) 28 .setValues(values); 29 } 30 //シートを任意の場所に移動 31 sheetTo.activate(); 32 ssTo.moveActiveSheet(1); //コピーしたシートを左から1番目に移動 33}

投稿2023/06/20 02:24

YellowGreen

総合スコア868

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問