車の維持費を色々比べたいと思ったらGASに夢中になって比較表つくちゃった

# 開発経緯

車の所有方法って色々あるなかで、何が安いのだろうか。。。
購入？カーリース？サブスク？
カーリースとサブスクは色々込み込みだからいいとして、購入の場合、ローンだの車検だの保険だのと考慮すること多くてまとまらず、カーリース、サブスクと比較しにくい！！ってなったのでgoogleSpreadSheetにまとめました。

何を思ったかまとめるだけでいいのにGASなるのものを知ってしまい。。。
つくちゃったよね。笑

物はこちらです↓

https://docs.google.com/spreadsheets/d/1aH_8FuvlPqlsBw-VOVqBPfzRqMyrSVI-S18YJVsJeZs/edit?usp=sharing

使い方、ダウンロード方法など全部ありますので使ってみてください！

# ソースコードを一部紹介

メインのやつ

```コード.gs
function buttonClick() {
  let msg = Browser.msgBox('実行確認','実行します。よろしいですか？',Browser.Buttons.OK_CANCEL);
  if (msg == 'ok') {
    // 車両本体情報の取得
    carResp = getCarValue();
    console.log('carResp', carResp);
    if (!carResp) {
      return
    }
    // 保険情報の取得
    insuResp = getInsuValue();
    console.log('insuResp', insuResp);
    if (!insuResp) {
      return
    }
    // 車検情報の取得
    carRepResp = getCarRepValue();
    console.log('carRepResp', carRepResp);
    if (!carRepResp) {
      return
    }
    // 自動車税情報の取得
    carTaxResp = getCarTaxValue();
    console.log('carTaxResp', carTaxResp);
    if (!carTaxResp) {
      return
    }
    // 自動車税重量情報の取得
    carWeightTaxResp = getCarWeightTaxValue();
    console.log('carWeightTaxResp', carWeightTaxResp);
    if (!carWeightTaxResp) {
      return
    }
    // 燃料情報の取得
    fuelResp = getFuelValue();
    console.log('fuelResp', fuelResp);
    if (!fuelResp) {
      return
    }
    // 駐車場情報の取得
    parkResp = getParkValue();
    console.log('parkResp', parkResp);
    if (!parkResp) {
      return
    }
    // 書き込み開始位置の確認
    startRange = confirmStartCell();
    if (!startRange) {
      return
    }
    // 車両本体情報の書き込み
    writeCarValue(startRange, carResp)
    // 保険情報書き込み
    writeInsuValue(startRange, insuResp)
    // 車検情報書き込み
    writeCarRepValue(startRange, carRepResp)
    // 自動車税情報書き込み
    writeCarTaxValue(startRange, carTaxResp)
    // 自動車重量税情報書き込み
    writeCarWeightTaxValue(startRange, carWeightTaxResp)
    // 燃料情報書き込み
    writeFuelValue(startRange, fuelResp)
    // 駐車場情報書き込み
    writeParkValue(startRange, parkResp)
  }
  else{
    Browser.msgBox('キャンセルが押されました。');
  }
  return
}
```

情報取得系のやつ
```getCarValue.gs
function getCarValue() {
  // スプレッドシート＆シートを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('概要');

  // 車両本体範囲選択
  let range = sheet.getRange("B2:I5");
  let values = range.getValues();
  let checkedCount = 0;

  let value;
  for( let i = 0; i < values.length; i++ ) {
    if( values[i][7] === true ) {
      value = {"本体価格": values[i][0], "金利": values[i][1], "返済期間": values[i][2], "総支払額": values[i][4], "返済額/月": values[i][5]}
      checkedCount += 1
    }
  }
  if (checkedCount != 1) {
    Browser.msgBox("車両本体項目から1ヶ所選択してください");
    return false
  }
  return value
}
```

書き込み系のやつ

```writeCarValue.gs
function writeCarValue(startRange, value) {
  //
  console.log('startRange', startRange)
  console.log('value', value)
  // スプレッドシート＆シートを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('比較表');

  // 書き込みセルの取得
  let range0 = sheet.getRange(`C${startRange}`);
  let range1 = sheet.getRange(`D${startRange}`);
  let range2 = sheet.getRange(`E${startRange}`);

  // 書き込み
  range0.setValue(value['本体価格'])
  range1.setValue(value['金利'])
  range2.setValue(value['返済期間'])

}
```

関数自体は「車両本体」、「保険」、「車検」、「自動車税」、「自動車重量税」、「燃料」、「駐車場」で各々取得と書き込みがあるのでもっとありますが紹介しているものほとんど同じなので割愛します。
詳しくみたい方は以下を参照して下さい。
![スクリーンショット 2022-09-18 22.27.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645779/d2e3deda-3d2d-258e-588b-f32ad4267e02.png)

# どんな比較表なのか

以下の2つの使い方が可能です！

## 項目毎に比較したり
![スクリーンショット 2022-09-18 22.34.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645779/76ec746e-b2ef-138e-fb81-b15decf66f33.png)

## 項目毎に決定した条件で比べたり
![スクリーンショット 2022-09-18 22.37.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645779/cd75d1a1-3c0e-66f3-6f67-2835f56a2323.png)



# まとめ

さぁ、これからやっと比較する...笑
8時間かかった。。。