質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

773閲覧

値が0の時だけシートに記入されないようにしたい

tarataia

総合スコア17

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/06/21 05:34

#実現したいこと
Google Apps Scriptでhtmlフォームを作ってその内容をスプレットシートに送信して値を格納し、特定のセルだけを別のシートに抜き出すようなコードにおいて、基本的にはC列の値を抜き出したいが必要に応じてC列の代わりにD列のセルを抜き出したいですがうまくいきません。
D列の段に値が格納されているときのみD列が入るような条件分岐文を作ればうまくいきそうなのですが、フォームで入力する時に別の値の合計を計算して実際にかかった合計費用から先に支払った金額を計算するようなコードをスプリプトにいれた時に差額が0であっても0が入力されてしまうので、まず値が0であるとき格納しないようなコードを考えているのですがうまくいかないのでご教授いただければ幸いです。

## 発生している問題・エラーメッセージ
コードが機能しない

## 概要のソースコード
【javascript.HTML】
```
function dateKeisan() {
document.getElementById("ListData").onclick=function() {
var date3K=document.getElementById("date1").value;
var date6K=document.getElementById("date2").value;
var date7K=document.getElementById("date3").value;
var date8K=document.getElementById("date4").value;
var date9K=document.getElementById("date5").value;
var dateSum=date3K*date7K;
var dateSum1=date3K-1;
var dateSum2=dateSum1 *date6K;
var dateSum3=dateSum+dateSum2;
var dateSum4 = document.getElementById("exdate01").value;
var dateSum5 = document.getElementById("exdate02").value;
var dateSum6 = document.getElementById("exdate03").value;
var dateSum7 = document.getElementById("exdate04").value;
var dateSum8 = document.getElementById("exdate05").value;
var dateSum9 = document.getElementById("exdate06").value;
var dateSum10 = parseInt(dateSum3) + parseInt(dateSum4) + parseInt(dateSum5) + parseInt(dateSum6) + parseInt(dateSum7) + parseInt(dateSum8) + parseInt(dateSum9);
var dateSum11 = parseInt(dateSum10) - parseInt(date9K);
document.getElementById("date7").value=dateSum;
document.getElementById("date6").value=dateSum2;
document.getElementById("date8").value=dateSum10;
document.getElementById("date10").value=dateSum11;
if(dateSum11 === 0) {
dateSum11= null;
}
}
}

## 試したこと  ``` if(dateSum11===0) { dateSum11= null; }

他のコード部分は問題なく動作しているのでここの文章に問題があると思うのですが条件によって値が入らないようにするコードが思いつきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/21 05:37

>dateSum11= null; 変数にnullと入れているだけで何もしていないように思いますが、これは?
tarataia

2019/06/21 05:50

nullには代入すると変数を初期化するといった役割があると書いてあったのでとりあえず入れてみたのですがこの後が調べてもわからず手詰まりという状態でした
m.ts10806

2019/06/21 05:52

変数は初期化されるというかnullが代入されます。 でもそのあとに何もしてないので何もなっていないだけに見えます。 下記より前に記述するとか、それではできませんか? document.getElementById("date10").value=dateSum11;
tarataia

2019/06/21 06:02

いれて試したところdateが0の時に値が入らないようにさせることができました。 コードの順番には十分気を付けようと思います・・・ありがとうございました。
guest

回答2

0

ベストアンサー

コメント欄ではコードブロック使えないので回答として投稿します。


こういう書き方もできます。

js

1document.getElementById("date10").value = (dateSum11 === 0)?null:dateSum11;

計算式時点でまとめることもできます(長いですけど)

js

1var dateSum11 = ((parseInt(dateSum10) - parseInt(date9K)) === 0)?null:(parseInt(dateSum10) - parseInt(date9K));
  • [条件 (三項) 演算子

](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Conditional_Operator)

投稿2019/06/21 06:21

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarataia

2019/06/21 06:26

ご丁寧に追記ありがとうございます。 さっそく使って試してみてどのように使っているか確認してみたいと思います
m.ts10806

2019/06/21 06:27

結果は同じですよ。 短く表現しただけなのです
tarataia

2019/06/21 06:33

冗長なコードはできるなら避けたほうがいいって聞きますし上の方の書き方のほうがきれいにまとまっているように思えるので使い方がわかりそうならさっそく取り入れていきたいと考えています
m.ts10806

2019/06/21 06:36

三項演算子は処理の流れがわかりづらくなったりするので多用は避けた方がいいとも聞きます。 あくまで今回のように単一要件のときのみにとどめてください。
tarataia

2019/06/21 06:48

https://qiita.com/stkdev/items/cbb83cbd9921b9f755a4 こちらのページ様なども参考にさせていただいた感じだと確かに多用は避けるべきであるということは間違いなさそうですね・・・ただそもそもこの書き方を知らないとコードを見た時に何かすらわからないので知識として参考にさせていただきます。
m.ts10806

2019/06/21 06:51

はい。なるべく「処理を書くときはifで」というのを頭に置いておけば良いと思います。使うときは必ず意図や意味をもって。 三項演算子はあくまで省略的な記法でありifを超えるものではありません(ifで表現できないことを三項演算子で表現できるわけではないので)
tarataia

2019/06/21 07:10

小さな個人や自社向けの物を作るときはまだしも大きなものを作るときは特にわかりやすい文章になるように意識する必要さがわかりました。重ね重ねになりますがありがとうございます。
m.ts10806

2019/06/21 07:12 編集

そうですね。 大小はあまり関係ないとは思うのですが全ては積み重ねで出来ていますから
guest

0

if(dateSum11===0) { dateSum11= null; } document.getElementById("date10").value=dateSum11;

先にIF文がないとgetElementByIdの中身にnull代入できない順番ミスです
お手数をおかけして申し訳ないです

投稿2019/06/21 06:09

編集2019/06/21 06:13
tarataia

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/21 06:10

これだとミスのコードのままでは?
tarataia

2019/06/21 06:15

申し訳ございません、修正しました
m.ts10806

2019/06/21 06:22

用途が単一なのでifを直接書かないやり方を別途回答としてサンプルコード投稿しておきました。 参考まで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問