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

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

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

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

2152閲覧

スプレッドシートの指定範囲を別シートにコピーする方法

ran_net

総合スコア17

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2018/12/17 08:08

実現したいこと

スプレッドシート上で、指定した範囲のみを別シートにコピーする方法を教えていただきたいです。

作成したい表は、1つのシートに全部署が載っていて
部署ごとにフィルタをかけ、その部署ごとの行に合わせて範囲を指定してシートのコピー作成
そして、PDF化したいと考えています。
(全部署の業務担当者が、このシートを閲覧できるようにしているので
普通のフィルタをかけてしまうと他の人もそのフィルタに引っ張られてしまうため、
フィルタ表示は個別のフィルタになると思いますが・・。)

部署ごとの範囲を指定してPDF化をしたかったのですが使用上ムリなようです。

現状

下記のコードで、シートのコピーは可能でした。
しかし、範囲が指定されていないので全てがそのままコピーされている状態です。

該当のソースコード

gs

1 2function shthukusei() { 3 //スプレッドシートAppを取得 4 var ss = SpreadsheetApp.getActiveSpreadsheet(); 5 // 現在開いているスプレッドシートのIDを取得 6 var ssid = ss.getId(); 7 // 現在開いているスプレッドシートのシートIDを取得 8 var sheetid = ss.getActiveSheet().getSheetId(); 9 // getActiveSheetの後の()を忘れると、TypeError: オブジェクト function getActiveSheet() {/* */} で関数 getSheetId が見つかりません。 10 11 var range = SpreadsheetApp.getActiveSheet().getDataRange(); 12 range.activate(); 13 14 //シートを複製 15 ss.duplicateActiveSheet(); 16 17} 18 19/*複製したシートに名前を指定する*/ 20function sheethukusei2(){ 21//スプレッドシートAppを取得 22var ss = SpreadsheetApp.getActiveSpreadsheet(); 23//シートの名前を新シート100に 24var sht = ss.renameActiveSheet('新シート100'); 25//複製したシートの名前を「新シート」に 26ss.duplicateActiveSheet().setName('部署'); 27} 28 29/*ドキュメントの名前を変更して複製する*/ 30function shtrenamehukusei(){ 31//スプレッドシートAppを取得 32 var ss = SpreadsheetApp.getActiveSpreadsheet(); 33 //新シートをshtnameに定義 34 var shtname = "新シート" 35 //shtnameをshtに格納 36 var sht = ss.getSheetByName(shtname); 37 38//既に同じシート名(sht)があったら削除// 39if(!sht){ 40Browser.msgBox('シートを複製してPDF用に命名します'); 41//複製したシートの名前を変更する 42ss.duplicateActiveSheet().setName('PDF用'); 43//そうでなかったら同じシートを削除する 44}else{ 45 46Browser.msgBox('新シートがあるから削除します'); 47ss.deleteSheet(sht);//shtを削除 48return; 49} 50} 51

解決したいこと

・指定した範囲のみコピーされた新しいシートを作成したい。
あわよくば・・
(・コピーされたシート名を自分で変更できたら・・)←無理そうですが・・

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

あわよくばのほうは容易に実現可能です

javascript

1 //シートを複製 2var newsh = ss.duplicateActiveSheet(); 3newsh.setName("PDF用");

ただ、やりかたとしては、
0. 新しいシートを作る→var newsh = ss.insertSheet() // duplicateActiveSheet()ではなく
コピーしてから消すのはつらいから
0. 選択範囲をRangeにして、コピーする
→SpreadsheetApp.getActiveSheet().getSelection().getActiveRange().copyTo(newsh.getRange(1,1));

検証してないので、2つ目はあやしいですが、手順としては、新シート作成→(リネーム)→選択範囲をコピーの順です。いきなり複製するのだと面倒(前回の回答者様も最後に新シート、コピーと書いておられます)

投稿2018/12/17 08:28

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問