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

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

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

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

Q&A

解決済

1回答

377閲覧

1ファイルにある複数シートをそれぞれのファイルに転記する際のスキップ方法を教えてください

SaiTan

総合スコア17

Google Apps Script

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

0グッド

0クリップ

投稿2018/10/29 08:21

編集2018/11/01 01:36

1つのファイルの中にある複数シートをそれぞれのファイルに転記、
さらに、転記したファイルのシート名を転記した日に変更するところまでは
出来たのですが、例えば1つのファイルの中にある、あるシートが無い場合、転記する時はスキップさせる方法を教えてください

<例>
Wファイルの中にAシート、Bシート、Cシート Dシートが入っている

AシートをOフォルダにあるAファイルに転記し、そのシート名を転記日に変更
BシートをOフォルダにあるBファイルに転記し、そのシート名を転記日に変更
CシートをOフォルダにあるCファイルに転記し、そのシート名を転記日に変更
DシートをOフォルダにあるDファイルに転記し、そのシート名を転記日に変更

例えば・・
Wファイルの中にAシート、Bシート、Dシートが入っている(Cシートは無い)

AシートをOフォルダにあるAファイルに転記し、そのシート名を転記日に変更
BシートをOフォルダにあるBファイルに転記し、そのシート名を転記日に変更
Cシートは存在していないためスキップ
DシートをOフォルダにあるDファイルに転記し、そのシート名を転記日に変更

■ やったこと
1ファイルの中でシート一覧を取得し(関数:PutLinks)、そのシートだけで処理する構築を作成してみたのですが、
スキップ方法が分かりません。どなたかご教示ください。

============

◎ シート一覧取得
function PutLinks(){

// スプレッドシート内の全シートとスプレッドシートのID
var sheet = SpreadsheetApp.openById('1QaIr8E1s5Yp6LcX8DejCGGkcoIcKZxXqE2Pyyw6WreI').getSheetByName("一覧");
var sheets = SpreadsheetApp.getActive().getSheets();
var ssId = SpreadsheetApp.getActive().getId();

// ハイパーリンク文字列の配列
var linkList = [[]];

for(var i=0; i<sheets.length; i++) {
// シートのIDと名前
var sheetId = sheets[i].getSheetId();
var sheetName = sheets[i].getSheetName();

// シートのURLからハイパーリンク文字列を組み立て var url = "https://docs.google.com/spreadsheets/d/" + ssId + "/edit#gid=" + sheetId; var link = [ '=HYPERLINK("' + url + '","' + "リンク" + '")' ]; // ハイパーリンク文字列を配列に格納 linkList[i] = link; // ハイパーリンク文字列を入れる sheet.getRange(i + 2, 1).setValue(sheetName); sheet.getRange(i + 2, 2).setValue(link);

}

}

============

◎ コピー作業
// 1つのスプレットシートを各シートにセル単位で貼り付け
function SheetCopySample1() {

//Aファイル
var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var objDestSpreadsheet = SpreadsheetApp.openById("1Qp3VevQQoLgT_nk9dn_MaZlRSb7bG7WGte5dAwNFO40");
var objSheet = objSpreadsheet.getSheetByName("Aシート");
//シートをコピーしてシート名を今日の日付に変更
newSheet = objSheet.copyTo(objDestSpreadsheet).setName(Utilities.formatDate(new Date(), "Asia/Tokyo", "MM-dd"));;
//作成シートにカーソルをフォーカス
objDestSpreadsheet.setActiveSheet(newSheet);
//カーソルフォーカスされた作成シートを左から2番目に移動
objDestSpreadsheet.moveActiveSheet(2);

//Bファイル
var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var objDestSpreadsheet = SpreadsheetApp.openById("1CX2RfNIDhLCgt4VUNmdwHhlPcZ2g8HYcMgSudNrQUUg");
var objSheet = objSpreadsheet.getSheetByName("Bシート");
//シートをコピーしてシート名を今日の日付に変更
newSheet = objSheet.copyTo(objDestSpreadsheet).setName(Utilities.formatDate(new Date(), "Asia/Tokyo", "MM-dd"));;
//作成シートにカーソルをフォーカス
objDestSpreadsheet.setActiveSheet(newSheet);
//カーソルフォーカスされた作成シートを左から2番目に移動
objDestSpreadsheet.moveActiveSheet(2);

//Cファイル
var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var objDestSpreadsheet = SpreadsheetApp.openById("d/1xNr52XjhSRgQSG1-EJH_LqnN-Gd81N6iLiED1OLNDIw");
var objSheet = objSpreadsheet.getSheetByName("Cシート");
//シートをコピーしてシート名を今日の日付に変更
newSheet = objSheet.copyTo(objDestSpreadsheet).setName(Utilities.formatDate(new Date(), "Asia/Tokyo", "MM-dd"));;
//作成シートにカーソルをフォーカス
objDestSpreadsheet.setActiveSheet(newSheet);
//カーソルフォーカスされた作成シートを左から2番目に移動
objDestSpreadsheet.moveActiveSheet(2);

//Dファイル
var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var objDestSpreadsheet = SpreadsheetApp.openById("1GefKKvK29yBCbBuBPU9WfYsTb8rm_do0l9QL2qpzzPo");
var objSheet = objSpreadsheet.getSheetByName("Dシート");
//シートをコピーしてシート名を今日の日付に変更
newSheet = objSheet.copyTo(objDestSpreadsheet).setName(Utilities.formatDate(new Date(), "Asia/Tokyo", "MM-dd"));;
//作成シートにカーソルをフォーカス
objDestSpreadsheet.setActiveSheet(newSheet);
//カーソルフォーカスされた作成シートを左から2番目に移動
objDestSpreadsheet.moveActiveSheet(2);

}

============

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問の理解

W1スプレッドシートには、A,B,C,DシートがあるがW2スプレッドシートには、A,B,Dシートしかない。ということが任意のWnシートに対して、A,B,C,Dのいずれがかけるパターンもあり得る

→「発生している問題・エラーメッセージ」に記載がないですが、現状のコピーではCシートのところで、エラーが発生しているはず(undefinedのcopyToがありません、とか?)。

上記理解のもとでの回答

一部のみで仮にCがないパターンに対応するには、を書きます。
objSpreadsheetが、W1とかW2とかに該当するはずなので。

javascript

1//Cファイル 2var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3var objDestSpreadsheet = SpreadsheetApp.openById("d/1xNr52XjhSRgQSG1-EJH_LqnN-Gd81N6iLiED1OLNDIw"); 4var objSheet = objSpreadsheet.getSheetByName("Cシート"); 5if(objSheet) { 6 //シートをコピーしてシート名を今日の日付に変更 7 newSheet = objSheet.copyTo(objDestSpreadsheet).setName(Utilities.formatDate(new Date(), "Asia/Tokyo", "MM-dd"));; 8 //作成シートにカーソルをフォーカス 9 objDestSpreadsheet.setActiveSheet(newSheet); 10 //カーソルフォーカスされた作成シートを左から2番目に移動 11 objDestSpreadsheet.moveActiveSheet(2); 12}

今後は、コードはコードブロックに書いてください。

投稿2018/10/29 13:00

papinianus

総合スコア12705

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

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

SaiTan

2018/10/30 00:26

できました!!! ここに「if」を入れればいいんですね。。もっと勉強します。 今後、コードはコードブロックに書きます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問