残高スクリプトはこちらでできています。
環境はGASで、【確定申告_暗号資産数量計算シート】で作っています。
それとは別に合計を計算したデータとクリプタクト上のデータの突合、差分を作るスクリプトを書きました。
用は人間業では不可能になると思われますので。
確定申告_暗号資産数量計算シートに、中間Dataシートを作成しました。ここに計算結果を出すことにします。
元データはマニュアルでコピーします。
A1:Cryptact_web_貼付説明
メモ内容
A1:Cryptact_web_貼付説明
メモ:
クリプタクトから通貨一覧コピー、
フォーマットは以下
ーーーーーーーーー
1
ネクスト NXT
208.54175065 0.4792 +4.08% 31.9473 99.9356 -6,562
2
デジバイト DGB
82.85082873 1.1262 +0.93% 4.3408 93.3057 -266
3
オミセゴー OMG
66.94169324 137.8163 -0.26% 539.7042 9,225.6551 -26,903
A2:メモ設定貼付CELL
メモ欄にクリプタクトのWEBからコピペします。
F,G,Hカラム。
計算結果シートから手動でコピペします。
ここまでを元データとしてスクリプトで計算します。
JからNまで:計算した結果を出力します。
J:存在場所:detailのコピー
コイン名:各コインのアルファベットのみ
計算結果残高:合計計算シート上の残高
クリプタクト残高:クリプタクト上の残高
差分:クリプタクト上で誤差としてプラスマイナスする予定の残高。
スクリプトの内容
function onOpen() {//メニュー追加、変更
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('追加したメニュー');
menu.addItem('計算実行', 'myFunction');
menu.addItem('中間データ差分計算', 'totsugoData');
menu.addToUi();
}
function cryptact_diff_calc_result(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("中間Data");
range = sheet.getRange(2,6,sheet.getLastRow(),3);
var datas = range.getValues();
return datas;
}
function totsugoData(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("中間Data");
var range = sheet.getRange(2,1,1,1);
var data = range.getNote();
var data_ar1 = data.split("\n");
var cryptact_mod_out = [];
for(var i=0;i<data_ar1.length;i++){
if(i%5=="0.0"){//項目ごと
var crypt_each_ar = [];
crypt_each_ar[0]=data_ar1[i].replace(" ","");
var crypt_name_ar = data_ar1[i+2].split(" ");
crypt_each_ar[1]=crypt_name_ar[crypt_name_ar.length - 1];
var quantity_ar = data_ar1[i+4].split(" ");
crypt_each_ar[2]=quantity_ar[0];
cryptact_mod_out.push(crypt_each_ar);
}
}
//クリプタクト残高出力
var out_range = sheet.getRange(2,2,cryptact_mod_out.length,cryptact_mod_out[0].length);
out_range.deleteCells(SpreadsheetApp.Dimension.ROWS);
out_range.setValues(cryptact_mod_out);
var calc_result_ar = cryptact_diff_calc_result();
var out_diff_calc_ar = [];
for(var i=0;i<calc_result_ar.length;i++){
if(calc_result_ar[i][0] == ""){
break;
}
var match_array = [];
match_array[0]=calc_result_ar[i][2];
match_array[1]=calc_result_ar[i][0];
match_array[2]=parseFloat(calc_result_ar[i][1]);
for(var k=0;k<cryptact_mod_out.length;k++){
var cryptact_zandaka = 0;
if(calc_result_ar[i][0] == cryptact_mod_out[k][1]){
cryptact_zandaka = cryptact_mod_out[k][2];
break;
}
}
match_array[3]=cryptact_zandaka.toString().replace(",","");
match_array[4]=-1 * parseFloat(match_array[3]*1 - match_array[2]*1);
out_diff_calc_ar.push(match_array);
}
//逆にCryptactだけにあるやつを追加
for(var k=0;k<cryptact_mod_out.length;k++){
match_flg = 0;
for(var i=0;i<calc_result_ar.length;i++){
if(calc_result_ar[i][0] == cryptact_mod_out[k][1]){
match_flg = 1;
break;
}
}
if(match_flg == 0){
var match_array = [];
match_array[0]="Cryptact上にしかない";
match_array[1]=cryptact_mod_out[k][1];
match_array[2]=0;
match_array[3]=parseFloat(cryptact_mod_out[k][2]);
match_array[4]=-1 * parseFloat(cryptact_mod_out[k][2]);
out_diff_calc_ar.push(match_array);
}
}
var out_range = sheet.getRange(2,10,out_diff_calc_ar.length,out_diff_calc_ar[0].length);
out_range.deleteCells(SpreadsheetApp.Dimension.ROWS);
out_range.setValues(out_diff_calc_ar);
}
合計を計算する時に「中間」と付くやつを除外しないといけない。若干修正。
function myFunction() {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheet_ar = [];
if (sheets.length > 0){
for(sheet of sheets){
if(sheet.getName()=="計算結果"){
}
else if(sheet.getName().match("中間")!=null){
}
else{
data = get_sheet_data_merge(sheet.getName());
for(var i=0;i