こちらでいかがでしょう?
説明はコード内のコメントに記載させていただきましたが、わかりにくい部分があればおっしゃってくださいませ。
補足説明いたします。


javascript
1function writeJobs() {
2 const ss = SpreadsheetApp.getActiveSpreadsheet();
3
4 const sheetA = ss.getSheetByName('SheetA');
5 const sheetB = ss.getSheetByName('SheetB');
6
7 // シートAのA列(名前)だけ取得し、1次元配列化する
8 const namesA = sheetA.getRange('A2:A').getValues().flatMap(arr => arr[0] || []);
9 // [ '田中', '佐藤', '岡田' ]
10
11 // シートBの値を全て取得する(1行目は項目名なので除く)
12 const valuesB = sheetB.getDataRange().getValues().slice(1);
13 // [ [ '鈴木', '学生' ],
14 // [ '田中', '会社員' ],
15 // [ '山田', '無職' ],
16 // [ '岡田', 'しゃちょー' ] ]
17
18 // シートBの値を名前だけの1次元配列化する
19 const namesB = valuesB.map(([name]) => name);
20 // [ '鈴木', '田中', '山田', '岡田' ]
21
22 // 職業名の2次元配列を新しく生成する
23 const jobsToWrite = namesA.map(name => {
24 // シートAの名前がBの名前リストの何番目にあるかインデックスを取得
25 // 配列.indexOf(値)メソッドは、値が配列に存在する場合はインデックス番号を、ない場合は-1を戻す
26 const index = namesB.indexOf(name);
27
28 // 番号が−1でなかったら、シートBの値の2次元配列の、該当するインデックス番号の、B列の値を配列にいれる
29 // 番号が−1(存在しない)場合は、空文字を配列にいれる
30 return index != -1 ? [valuesB[index][1]] : [''];
31 });
32 // [ [ '会社員' ], [ '' ], [ 'しゃちょー' ] ]
33
34 // シートAのC列に職業名を一括で書き込む
35 sheetA.getRange(2, 3, jobsToWrite.length, 1).setValues(jobsToWrite);
36}
(コメント欄のご質問への回答)
③8行目のarrや19行目のnameは宣言不要で使えるものでしょうか?
そちらはアロー関数の引数ですので宣言しません。
宣言するのは変数や定数ですよね。
アロー関数に関しては先人等が分かりやすい説明をたくさん残してくださっていますので、ぜひ検索してみてください。
javascript
1// アロー関数
2const namesA = sheetA.getRange('A2:A').getValues().flatMap(arr => arr[0] || []);
3
4// 普通の関数
5const namesA = sheetA.getRange('A2:A').getValues().flatMap(function(arr) {return arr[0] || []});
①8行目「シートAのA列(名前)だけ取得し、1次元配列化する」の箇所の以下のコードですが、flatをmapメソッドで配列全体に実行しているものと推察しますが、flatMapの後の()内で何をしているのかが良くわかりません。=>や||はどういった意味を持つのでしょうか。 =>は「~より大きい」のような比較演算子ではないですよね?
追記:もしかしてこれがアロー関数ってやつですかね…?
const namesA = sheetA.getRange('A2:A').getValues().flatMap(arr => arr[0] || []);
回りくどいこのやり方じゃない方が分かりやすかったなぁ…と後悔しておりますすみません…。
おっしゃる通りアロー関数です。
=>や||はどういった意味を持つのでしょうか。
=>
は、アロー関数の記号です。等号・不等号<=
ではありません。
||
は、論理和です。
if文でいずれかに該当するかどうかtrue/falseを判定したいときによく使われると思いますが、
左辺がtrueっぽい値なら左辺の値を、左辺がfalseっぽい値で右辺がtrueっぽい値なら右辺の値を、どちらもfalseっぽい値ならfalseを戻すのにも使えます。
javascript
1const a = '';
2const b = 'bbb';
3
4console.log(a || b); // 'bbb'
私のコードの8行目では、A列の値を.getValues()で取得しています。
[ ['田中'], ['佐藤'], ['岡田'], [''], [''], [''], [''], [''], [''], [''], [''], [''] ]
取得できる値は2次元配列配列で、↑という状態なので、['']
を削除しつつ、['田中']
たちを1次元配列化しています。
.flatMap()
メソッド自体については、ご存知でなければ一度お調べになってください。
②30行目 returnの後の ? [valuesB[index][1]] : ['']; の?と: ['']はどういった意味を持つのでしょうか。 ※記号(?)で検索を掛けても記事が見つからず…
?
と:
記号は、三項演算子という、if文を1行でかける記法です。
詳細は三項演算子について一度お調べください。
javascript
1条件 ? trueの時の処理や値 : falseの時の処理や値;
['']
については、シートBに該当する名前がないので職業欄になにも入力しないので、空文字''
を配列の中にいれています。