# 【kintone】テーブルの数値列に空欄が存在する状態で合計を出す方法は？

**URL:** <https://community.cybozu.dev/t/topic/2149>\
**Category:** kintone 開発相談\
**Created:** [2015 年 7 月 2 日午前 7:23 UTC](https://community.cybozu.dev/t/topic/2149 "2015-07-02T07:23:38Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account2112](https://avatars.discourse-cdn.com/v4/letter/l/77aa72/32.png) [@Legacy\_Account2112](https://community.cybozu.dev/u/Legacy_Account2112)\
**Post date:** [2015 年 7 月 2 日午前 7:23 UTC](https://community.cybozu.dev/t/topic/2149/1 "2015-07-02T07:23:38Z")

</div>

初めて質問させていただきます。  
見積書のテーブルの各行に「単価」「数量」とそれを自動計算した「小計」が存在します。そして、テーブル外に「小計」を自動計算した「総合計」を出しています。  
プリントクリエイタで印刷する際に、見積書の項目として金額部分が空欄としたいものがあります。  
そのため、同じテーブル内に「単価コピー」「数量コピー」「小計コピー」欄を作成し、それぞれに値を入れる際に「0」ならば空欄となるよう、以下のようにJSを作成しましたが、更新画面を開いても期待する動作とならず、保存もできなくなります。

/\*\*  
\* テーブル名：table  
\* 数値フィールド：tan 単価  
\* 数値フィールド：tan\_0 単価コピー  
\* 数値フィールド：kaz 数量  
\* 数値フィールド：kaz\_0 数量コピー  
\* 計算フィールド：kin 小計  
\* 数値フィールド：kin\_0 小計コピー  
\*/  
(function() {  
“use strict”;  
// 登録時、編集時のsubmit前処理  
kintone.events.on([“app.record.edit.submit”, “app.record.create.submit”], function(event) {  
var tableRecords = event.record.table.value;  
var a = tableRecords.value.tan.value;

```
// aが0の時は空欄にする
if (a = 0) {
    tableRecords.value.tan_0.value = "";
} else {
    tableRecords.value.tan_0.value = a;
}

var b = tableRecords.value.kaz.value;

// bが0の時は空欄にする
if (b = 0) {
    tableRecords.value.kaz_0.value = "";
} else {
    tableRecords.value.kaz_0.value = b;
}

var c = parseFloat(tableRecords.value.kin.value);

// cが0の時は空欄にする
if (c = 0) {
    tableRecords.value.kin_0.value = "";
} else {
    tableRecords.value.kin_0.value = c;
}

return event;

```

});

})();

ご教授いただけますでしょうか。よろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2115](https://avatars.discourse-cdn.com/v4/letter/l/e9bcb4/32.png) [@Legacy\_Account2115](https://community.cybozu.dev/u/Legacy_Account2115)\
**Post date:** [2015 年 7 月 2 日午前 8:00 UTC](https://community.cybozu.dev/t/topic/2149/2 "2015-07-02T08:00:52Z")

</div>

sawa さん

[こちら](https://cybozudev.zendesk.com/hc/ja/articles/202166330-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E5%BD%A2%E5%BC%8F)に書いてある通り、テーブルの取得時のレスポンスでは\<フィールドコード\>.valueは配列となっています。

そのためtableRecordsは配列なのでtableRecordsの各要素に対して操作を行う必要があると思われます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2112](https://avatars.discourse-cdn.com/v4/letter/l/77aa72/32.png) [@Legacy\_Account2112](https://community.cybozu.dev/u/Legacy_Account2112)\
**Post date:** [2015 年 7 月 2 日午前 9:17 UTC](https://community.cybozu.dev/t/topic/2149/3 "2015-07-02T09:17:32Z")

</div>

瀧ヶ平 さん

早速のお返事、ありがとうございます。

アドバイス通りに以下のように修正してみました。（ｂ、ｃも同様に修正）

```
// aが0の時は空欄にする
if (a = 0) {
    tableRecords.value['koumoku'].value = ;
    tableRecords.value['tan'].value = ;
    tableRecords.value['kaz'].value = ;
    tableRecords.value['dropdown'].value = ;
    tableRecords.value['kin'].value = ;
    tableRecords.value['tan_0'].value = "";
    tableRecords.value['kaz_0'].value = ;
    tableRecords.value['kin_0'].value = ;
    tableRecords.value['bikou'].value = ;
} else {
    tableRecords.value['koumoku'].value = ;
    tableRecords.value['tan'].value = ;
    tableRecords.value['kaz'].value = ;
    tableRecords.value['dropdown'].value = ;
    tableRecords.value['kin'].value = ;
    tableRecords.value['tan_0'].value = a;
    tableRecords.value['kaz_0'].value = ;
    tableRecords.value['kin_0'].value = ;
    tableRecords.value['bikou'].value = ;
}

```

今回は修正画面から保存はできるようになりました。ただし、期待する動作とはなりませんでした。  
他にお気づきの点ありましたら、お願いいたします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2115](https://avatars.discourse-cdn.com/v4/letter/l/e9bcb4/32.png) [@Legacy\_Account2115](https://community.cybozu.dev/u/Legacy_Account2115)\
**Post date:** [2015 年 7 月 2 日午前 10:18 UTC](https://community.cybozu.dev/t/topic/2149/4 "2015-07-02T10:18:40Z")

</div>

sawa さん

tableRecordsは配列となっており、テーブルの各行のデータがtableRecordsの要素となり、tableRecords[n]のような形でn番目の行のデータオブジェクトを取得することになります。

また、一つ前では指摘し忘れていたのですが、JavaScriptでは’=‘は代入の演算子のため、この場合は条件式には’='ではなく '=='を 使うのが適切です。

そのため、 var tableRecords = … 以下のコードを

```
for(var i =0; i < tableRecords.length; i++){
  var data = tableRecords[i];
  var a = data.tan.value;
  if(a == 0){
    data.tan_0.value = "";
  } else {
    data.tan_0.value = a;
  }

  var b = data.kaz.value;
  if(b == 0){
    data.kaz_0.value = "";
  } else {
    data.kaz_0.value = b;
  }

  var c = parseFloat(data.kin.value);
  if(c == 0){
    data.kin_0.value = "";
  } else {
    data.kin_0.value = c;
  }
}

return event;

```

の様にすれば解決すると思います。

なにか問題がありましたらお気軽にご質問ください。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2112](https://avatars.discourse-cdn.com/v4/letter/l/77aa72/32.png) [@Legacy\_Account2112](https://community.cybozu.dev/u/Legacy_Account2112)\
**Post date:** [2015 年 7 月 3 日午前 12:42 UTC](https://community.cybozu.dev/t/topic/2149/5 "2015-07-03T00:42:33Z")

</div>

瀧ヶ平 さん

ご教授いただいたように、以下のように作成してみましたが、やはりうまく動作しませんでした。

(function() {  
“use strict”;  
// 登録時、編集時のsubmit前処理  
kintone.events.on([“app.record.edit.submit”, “app.record.create.submit”], function(event) {  
var tableRecords = for(var i =0; i \< tableRecords.length; i++){  
var data = tableRecords[i];  
var a = data.tan.value;  
if(a == 0){  
data.tan\_0.value = “”;  
} else {  
data.tan\_0.value = a;  
}

```
var b = data.kaz.value;
if(b == 0){
  data.kaz_0.value = "";
} else {
  data.kaz_0.value = b;
}

var c = parseFloat(data.kin.value);
if(c == 0){
  data.kin_0.value = "";
} else {
  data.kin_0.value = c;
}

```

}

return event;

});

})();

「tan」のみでもやってみましたがだめなようです。（保存はできます。）  
何か手がありましたらお教えください。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2115](https://avatars.discourse-cdn.com/v4/letter/l/e9bcb4/32.png) [@Legacy\_Account2115](https://community.cybozu.dev/u/Legacy_Account2115)\
**Post date:** [2015 年 7 月 3 日午前 1:17 UTC](https://community.cybozu.dev/t/topic/2149/6 "2015-07-03T01:17:49Z")

</div>

sawa さん

説明が不足して申し訳ありません。

var tableRecords = event.record.table.value;

の行以下を先ほどのコードに差し替える、という意味です。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2112](https://avatars.discourse-cdn.com/v4/letter/l/77aa72/32.png) [@Legacy\_Account2112](https://community.cybozu.dev/u/Legacy_Account2112)\
**Post date:** [2015 年 7 月 3 日午前 1:37 UTC](https://community.cybozu.dev/t/topic/2149/7 "2015-07-03T01:37:16Z")

</div>

瀧ヶ平 さん

お返事ありがとうございます。  
たぶんそういう意味かなあ、と思い、「var tableRecords = event.record.table.value;」の次の行から埋め込んだのですが、そうすると保存もできなくなったため、あのように置換しました。  
今もう一度指示通りにしてみましたが、やはり保存もできませんでした。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2115](https://avatars.discourse-cdn.com/v4/letter/l/e9bcb4/32.png) [@Legacy\_Account2115](https://community.cybozu.dev/u/Legacy_Account2115)\
**Post date:** [2015 年 7 月 3 日午前 4:40 UTC](https://community.cybozu.dev/t/topic/2149/8 "2015-07-03T04:40:22Z")

</div>

sawaさん

すいません私のコードにミスがありました。

```
var data = tableRecords[i];

```

の部分を

```
data = tableRecords[i].value;

```

とすれば問題ないと思います。また問題ありましたらご質問ください。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2112](https://avatars.discourse-cdn.com/v4/letter/l/77aa72/32.png) [@Legacy\_Account2112](https://community.cybozu.dev/u/Legacy_Account2112)\
**Post date:** [2015 年 7 月 3 日午前 4:50 UTC](https://community.cybozu.dev/t/topic/2149/9 "2015-07-03T04:50:33Z")

</div>

瀧ヶ平 さん

ありがとうございました！  
最初はだめでしたが、  
「data = tableRecords[i].value;」の前に「var」をつけて  
「var data = tableRecords[i].value;」としたところ、完璧に動作しました！  
本当にありがとうございました！^^

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2115](https://avatars.discourse-cdn.com/v4/letter/l/e9bcb4/32.png) [@Legacy\_Account2115](https://community.cybozu.dev/u/Legacy_Account2115)\
**Post date:** [2015 年 7 月 3 日午前 5:05 UTC](https://community.cybozu.dev/t/topic/2149/10 "2015-07-03T05:05:17Z")

</div>

たびたびコードにミスがあり申し訳ありません。

解決したようでよかったです。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2025 年 8 月 18 日午前 6:27 UTC](https://community.cybozu.dev/t/topic/2149/11 "2025-08-18T06:27:35Z")

</div>

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
