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

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

ただいまの
回答率

88.59%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,002

SaiTan

score 17

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/ツールのバージョンなど)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

 質問の理解

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

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

 上記理解のもとでの回答

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/30 09:26

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

    本当にありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る