teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ifやめよう

2018/08/03 16:46

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -1,5 +1,20 @@
1
1
  とりあえず、`if (out_time == (16,23,24) ){`を`if (out_time == 16 || out_time == 23 || out_time == 24) ){`としてください。話はそれからです。
2
2
 
3
+ -- iとjのifの件
4
+ `var j = trunc(i);`とするだけでこの膨大なifをやめることができます。
5
+ なおtruncは下記のように作りました(5に、iから6を引いて4ごとに3を足す、という意味と理解しました。そうでなくても意味を考えれば算数で求まるはずです)。
6
+
7
+ ```javascript
8
+ function testTrunc() {
9
+ Logger.log([6,7,8,9,10,11].map(function(element, index, array) {
10
+ return trunc(element);
11
+ }));
12
+ }
13
+ function trunc(i) {
14
+ return 5 + (Math.floor((i - 6) / 4) * 3);
15
+ }
16
+ ```
17
+
3
18
  -- 田中さんの件
4
19
  要件がわからなすぎます。
5
20
  test()内のシート1がコピー元シート名、シート2がコピー先シート名、範囲を指定するとコピーできます。

1

たなかさん

2018/08/03 16:46

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -1,1 +1,30 @@
1
- とりあえず、`if (out_time == (16,23,24) ){`を`if (out_time == 16 || out_time == 23 || out_time == 24) ){`としてください。話はそれからです。
1
+ とりあえず、`if (out_time == (16,23,24) ){`を`if (out_time == 16 || out_time == 23 || out_time == 24) ){`としてください。話はそれからです。
2
+
3
+ -- 田中さんの件
4
+ 要件がわからなすぎます。
5
+ test()内のシート1がコピー元シート名、シート2がコピー先シート名、範囲を指定するとコピーできます。
6
+ ただし、範囲は、両方のシートで同じで、全く同じデータ構成で、まるっと上書きすることが前提です。
7
+ (列の構成が違う場合は詳細な仕様を開示していただかないとサンプルコードは書くことができません)
8
+
9
+ (ちなみに田中さんが2人以上いたばあい、コピー元も先も最初に出て来た人からコピーし、最初に出て来た人にコピーする、という動きになります)
10
+
11
+ ```javascript
12
+ function test() {
13
+ CopyDat("シート1", "シート2", "A1:F3", "田中", 0);
14
+ }
15
+ function CopyDat(srcSheetName, dstSheetName, range , needle , col) {
16
+ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
17
+ var src = spreadsheet.getSheetByName(srcSheetName).getRange(range).getValues();
18
+
19
+ var filtered = src.filter(function(element, index, array) {
20
+ return (element[col] === needle);
21
+ });
22
+ if(filtered.length === 0) { spreadsheet.toast(needle + "が見つかりませんでした"); return; }
23
+ var dst = spreadsheet.getSheetByName(dstSheetName).getRange(range).getValues();
24
+ for(var i = 0; i < dst.length; i++) {
25
+ if(dst[i][col] != needle) { continue; }
26
+ dst[i] = filtered[0];
27
+ }
28
+ spreadsheet.getSheetByName(dstSheetName).getRange(range).setValues(dst);
29
+ }
30
+ ```