Google Apps Script(以降、GAS)でもできますし、trueさんも言及されているように、ARRAYFORMULAでもできます。後者はややトリッキーですが。
いずれにしましても、機械的に判断するためにVLOOKUPの指数部分の移動(といいますか変動)に法則性がある、という前提となります。
※B列が2月、C列が3月より参照先のテーブルがA:Lであると仮定
GAS
数式をセットするためだけの setFormula()
というメソッドがありますが、setValue()
や appendRow()
でも数式文字列をそのままセットできます。数式にはARRAYFORMULAを使わず、当初の通り、都度、数式をセットします。
よって、最終行と現在月を取得できれば以下のように組み立てることができます。
javascript
1function doGet(e){
2 //変数定義
3 /*省略*/
4 var formulaE, formulaF, idx;
5
6 //設定・情報取得
7 /*省略*/
8 idx = stL.getLastRow()+1;
9 formulaE = "=VLOOKUP(B" + idx + ",'所属一覧'!A:L," + (Today.getMonth()+1) + ",0)";
10 formulaF = '=TEXT(A' + idx + ',"yyyymm")';
11 //反映
12 stL.appendRow([Today, UserID, PageName, PageURL, formulaE, formulaF]);
13}
ARRAYFORMULA
ややトリッキーですが、配列を使用し、ヘッダも含め出力します。
VLOOKUPの指数部分はMONTHで求めます。
E1:={"所属組織";ARRAYFORMULA(IF(A2:A<>"",VLOOKUP(B2:B,'所属一覧'!A:L,MONTH(A2:A),0),""))}
F1:={"日付変換";ARRAYFORMULA(IF(A2:A<>"",TEXT(A2:A,"yyyymm"),""))}
※上記応用でE1にまとめて記述することも可能ですが、視認性が悪くなるため列ごとにまとめています。
動作確認はしておりませんので、参考までに。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/05 01:14
退会済みユーザー
2018/03/05 01:41