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

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

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

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

Q&A

解決済

1回答

2218閲覧

GASのfor文について

.s156412v

総合スコア12

Google Apps Script

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

0グッド

0クリップ

投稿2018/08/03 03:39

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)GoogleAppsScriptでシフト自動作成システムを作っています。
提出されたシフトを一度整理する機能を実装中に問題が発生しました。

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

とりあえず退勤時間の方を整理しようとしています。3行目に16・23・24時までというデータが入っているので16,23,24という数字が入っているのですが、24しか検知されず、24のところだけは正常に整理することができます。

該当のソースコード

var ss = SpreadsheetApp.getActiveSpreadsheet();

var scf= ss.getSheetByName('import'); //scF=sheet_copyFrom
var lr = scf.getLastRow();
var lc = scf.getLastColumn();

var sct = ss.getSheetByName('Arrange_data'); //sct=sheet_copyTo
var lr1 = sct.getLastRow();
var lc1 = sct.getLastColumn();

var name = scf.getRange(lr,2,1,1).getValues();
// Logger.log(name);
var name_write = sct.getRange(lr1+1,2,1,1).setValues(name);

for ( var i=3 ; i<lc ; i++ ){

var out_time = scf.getRange(lr,i,1,1).getValues(); Logger.log(i); Logger.log(j); Logger.log(out_time); if (out_time == (16,23,24) ){ if(i<=6){ var j=5 } else if(i<=10){ var j=8} else if(i<=14){ var j=11} else if(i<=18){ var j=14} else if(i<=22){ var j=17} else if(i<=26){ var j=20} else if(i<=30){ var j=23} else if(i<=34){ var j=26} else if(i<=38){ var j=29} else if(i<=42){ var j=32} else if(i<=46){ var j=35} else if(i<=50){ var j=38} else if(i<=54){ var j=41} else if(i<=58){ var j=44} else if(i<=62){ var j=47} else { var j=50}; var out_time = scf.getRange(lr,i,1,1).getValues(); //Logger.log(i); //Logger.log(j); Logger.log(out_time); var out_time_write = sct.getRange(lr1+1,j,1,1).setValues(out_time); } else { //Logger.log(i); //Logger.log(j); //Logger.log(out_time); }

}

GAS

試したこと

out_timeをforの外に出したりしましたがダメでした。

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

もしろよろしければ、Aシートのどこかの行にある田中という苗字を検知し、その行のデータをコピーし、Bシートの固定された田中の行にコピーさせる為にはどうすればいいでしょうか。こちらも併せて教えていただきたいです。

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

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

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

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

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

hot-lemoned

2018/08/03 04:18

var out_time = scf.getRange(lr,i,1,1).getValues(); で取得した値はどのようになっているのでしょうか?もしくは引用元のシート(import)の内容を追記していただけますか?
macaron_xxx

2018/08/03 04:26

ちょっとその日本語ではどこにどんなデータが入っていて何がしたいのか理解できません。もう少し整理して落ち着いて質問内容を考えてください。
.s156412v

2018/08/04 01:42

ありがとうございます!始めたばっかりで、こちらのサイトを使わせて頂いたので、自分でもよくわからない質問だと自負しております。考えていただきありがとうございました!
guest

回答1

0

ベストアンサー

とりあえず、if (out_time == (16,23,24) ){if (out_time == 16 || out_time == 23 || out_time == 24) ){としてください。話はそれからです。

-- iとjのifの件
var j = trunc(i);とするだけでこの膨大なifをやめることができます。
なおtruncは下記のように作りました(5に、iから6を引いて4ごとに3を足す、という意味と理解しました。そうでなくても意味を考えれば算数で求まるはずです)。

javascript

1function testTrunc() { 2 Logger.log([6,7,8,9,10,11].map(function(element, index, array) { 3 return trunc(element); 4 })); 5} 6function trunc(i) { 7 return 5 + (Math.floor((i - 6) / 4) * 3); 8}

-- 田中さんの件
要件がわからなすぎます。
test()内のシート1がコピー元シート名、シート2がコピー先シート名、範囲を指定するとコピーできます。
ただし、範囲は、両方のシートで同じで、全く同じデータ構成で、まるっと上書きすることが前提です。
(列の構成が違う場合は詳細な仕様を開示していただかないとサンプルコードは書くことができません)

(ちなみに田中さんが2人以上いたばあい、コピー元も先も最初に出て来た人からコピーし、最初に出て来た人にコピーする、という動きになります)

javascript

1function test() { 2 CopyDat("シート1", "シート2", "A1:F3", "田中", 0); 3} 4function CopyDat(srcSheetName, dstSheetName, range , needle , col) { 5 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 6 var src = spreadsheet.getSheetByName(srcSheetName).getRange(range).getValues(); 7 8 var filtered = src.filter(function(element, index, array) { 9 return (element[col] === needle); 10 }); 11 if(filtered.length === 0) { spreadsheet.toast(needle + "が見つかりませんでした"); return; } 12 var dst = spreadsheet.getSheetByName(dstSheetName).getRange(range).getValues(); 13 for(var i = 0; i < dst.length; i++) { 14 if(dst[i][col] != needle) { continue; } 15 dst[i] = filtered[0]; 16 } 17 spreadsheet.getSheetByName(dstSheetName).getRange(range).setValues(dst); 18}

投稿2018/08/03 15:56

編集2018/08/03 16:46
papinianus

総合スコア12705

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

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

.s156412v

2018/08/04 01:43

ありがとうございます!! 始めたばかりで右も左も分からない状態なのでもう少し勉強してきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問