ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュのIFを使ったROUNDOWN計算について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
WIN XP professinal Ver.2002 SP3
EXCEL 2007

先ほど参加したばかりですが何とぞ宜しくお願いします。

●質問

写真のような売上表を作っております。

F列からあとの列には、各社の支払金額を入力しています。

現在の入力の基本サンプルは・・・

=IF(ISBLANK(C3),"",ROUNDDOWN(XXXXX-(XXXXX*0.25),0))

○やりたいこと

1 C列とD列が入力された時に、F列以降の金額が入力出来る

2 今、XXXXXとなっているところが各社の該当物件に対する
  支払金額なのですが、今のままだと
  C列の「件名」が入力された時にIF以降の関数が出て来て
  一度、XXXXXの金額を修正して、入力しています。
  これを各社の支払金額を直接入力して、シートを完成させたい。

最近、関数等を知ったばかりなので説明不足などあると思いますが
何とぞよろしくお願いいたします。

コメント(16)

現状の式では、C3だけがブランクでない時にrounddownが実行されます。
従い、エクセルは言われたことを忠実に実行しているだけです。


やりたいことが、C3、D4ともにブランクでない時だけrounddownを実行させたいのだと思います。


ifの条件文の部分を、

isblank(C3)&isblank(D3)

なんて記述できるのかどうかよく知りませんが、理論上はそんなようなことが必要だと思います。
> 1 C列とD列が入力された時に、F列以降の金額が入力出来る
F列以降の入力はいつでもできます。

「C列とD列が入力された時にしか、F列以降の金額が入力出来ないように」であれば
数式の組み合わせだけではできません。

八神かかしさんのおっしゃる
> isblank(C3)&isblank(D3)
のようなことであれば、 and(isblank(C3),isblank(D3)) で実現できます。


> 2 今、XXXXXとなっているところが各社の該当物件に対する (以下略)

XXXXX を数式内でなく、セルに入力することで
入力の手間を省きたいというのが主旨であれば
XXXXX を入力させるための列を設け(例えばZ列)、
=IF(ISBLANK(C3),"",ROUNDDOWN(XXXXX-(XXXXX*0.25),0))
 ↓
=IF(and(isblank(C3),isblank(D3)),"",ROUNDDOWN(Z3-(Z3*0.25),0))
のようにすれば良いかと思います。

ただし、画面にある「シート追加ボタン」が気になります。
恐らくはこのボタンを押下した際にマクロが実行されて
デフォルトとなるシートのコピーを行ったりするのでしょうが、
上記のように XXXXX を外だしする際に列を追加した場合、
マクロの実行動作に影響がないことを確認することが必要です。
場合によってはマクロの動作(プログラム)を
書き換えないといけないことになるかもしれませんね。
皆様、早速のお返事ありがとうございます。

1番の回答について
八神かかしさん・まりぬこっぽいど、お二方の回答で実現出来ました。

2番の回答について
よっちゃんさんの

「入力専用の列を作る」と言うお話である種実現は出来ました。
が、これでは、会社が増える毎に入力専用列も増えるので
その分、ファイル自体が重くなったり、処理の問題が
後々出てこないのでしょうか?
(ちょっと見栄えも考えたりするのですが・・・)

「シート追加ボタン」は、「基本」のシートをコピーして
追加するだけなので、「基本」のシートに
上記のIF関数を書いておけば大丈夫かと・・・


短時間ですっごく前進したようで嬉しいです!!!
閉じ括弧忘れてるorz

ファイル自体は大して重くはなりませんね。
10桁あっても10byte(フォーマットデータを含まない数字なので、実際は2〜30byteなのかな?)なので。
シートに含まれる計算式が増えると再計算に時間がかかるようになるので、開いたときや何か変更したときに突っかかる感じがするかもしれません。
ただ、この場合計算式はrounddownのところだけなので、入力欄があってもなくてもほとんど変わりはないはずです。
あと、見栄えを気にするのであればセルを非表示にするとかいう方法もありますよ。
> が、これでは、会社が増える毎に入力専用列も増えるので

会社(顧客?)によって ROUNDDOWN(XXXXX-(XXXXX*0.25) の計算式が変わるということですか?
そうでなく XXXXX の値が変わるだけでしたら、
「会社が増える毎に入力専用列も増える」は誤解ではないでしょうか。


> その分、ファイル自体が重くなったり、処理の問題が
> 後々出てこないのでしょうか?

もちろんマシンのスペックに依存するところはあるでしょうが、
今回の場合ではさほど動作に影響に出ることではない(体感できないレベル)と思います。
1つのワークブック内に会社ごとのシートが並ぶのであれば、
シート数の影響の方が大きいと思いますし。
見積もりのようですので行数が1万とかになることは恐らくないですよね。

試しに1万行などの「さすがにここまでデータが入ることはないだろう」的な
データを作ってみて、動作を確認されることをおすすめします。
元の場合と作業用の列を設ける場合とで、それぞれ千行や1万行のデータを入力し、
動作(再計算の速さ・ファイルを開く速度等)の違いやファイルの容量の違いなどを比べてみてください。


> (ちょっと見栄えも考えたりするのですが・・・)

うまくデザインできない場合や元々のデザインが好ましい場合は、
提出時に不要な列を非表示にするなどの運用で対応されるのはいかがでしょう。
本当に凄い早さでお返事頂けて申し訳ありません。

まりぬこっぽいどさん

確かに、何万も会社が増えるわけではないので・・・・
ちょっと視点を変えて見たら
「非表示」と言う手があるんだって!!!
目から鱗って言うより自分の勉強不足を感じます。とほほ。


よっちゃんさん

計算式は確かに変わらないのですが、
一個の物件に対して数社が仕事をする場合があるので
入力対象列が複数個になります。
そうすると、「入力専用列」も増えるのではないでしょうか?


F3(A社)の入力専用列をQ3
G3(B社)の入力専用列をR3
・・・・・
> ROUNDDOWN(XXXXX-(XXXXX*0.25)

とりあえず、これを
ROUNDDOWN(XXXXX*0.75
にしてみてはいかがでしょうか。

無駄に計算を大変にしている気がしますw
そもそもF列より右のセルに、各社の「支払金額×0.75」の金額を「入力」したいというだけの話で、IF関数も不要という話なのでは?

電卓でも叩いて「支払金額×0.75」の金額を入力してもいいところだけれど、その計算は、エクセルにやらせるとして、小数点以下を切り捨てでいいなら、F列より右に入力する数式は

=INT(○*0.75)

で十分。
IF関数では、C列とD列にデータが入力されていなかったら、「表示」させないようにすることができるだけで、「入力」できないようにするわけではありません。この点の誤解はないでしょうか。
しのさん

支払金額に0.75かけた方が綺麗ですね。

まじんさん

「0」を見せずに表を完成させようと最初に考えたのが「IF〜」でした。
10
>「0」を見せずに表を完成させようと最初に考えたのが「IF〜」でした。
であれば、その表全体の設定を「0」を非表示にさせるテもあります。

今のif関数の結果得られる「非表示」は、それをさらに計算の対象にさせるとエラーが発生します。「""」は全くのブランクとは言い切れません。


表の目的によって、使いわけが必要です。


それから、int関数とrounddown関数は、全く同一のものではありません。プラスの値なら今の使い方であれば、同一とみなして構いませんが、マイナスの値に対しては全く逆の結果を出力します。
>>7 3Weyesさん

> 計算式は確かに変わらないのですが、
> 一個の物件に対して数社が仕事をする場合があるので
> 入力対象列が複数個になります。
> そうすると、「入力専用列」も増えるのではないでしょうか?

うーん、確かに3Weyesさんの場合はそのようになってしまいますね^^;
きちんと正規化しろとまではもちろん言いませんが、1件の見積もりを入力するのに
1行に対して数社分のデータを入力するのは表として使いにくくありませんか?
その社数がもし今用意されている列数より多くなってしまった場合(絶対にないですか?)は
同様に列を追加しなければならないかと思います。
今のうちに(あとあと困らない形に)変更することはできないのでしょうか。
八神かかしさん

表全体の0を非表示・・・
ヘルプを見てわかりました。
0を表示させないは、これで解決出来ます。
・・・と、言うことは、この式(ISBLANK)って意味がなかったんだ。
勉強が足らないですね・・・。

金額を入れていく上で当然「-」も生じてきます。
INTの場合だと「-」の値は、切り捨てすると値がかわってしまいますね。
(ヘルプ参照)
で、あるなら、このままの式でも構わないのでしょうか?


よっちゃんさん

この表は、見積ではなく、物件に対しての支払金額が
どれだけで、何社使ってるの?という表です。
なので、物件毎に数社使う可能性があるのです。
なんとか、金額を該当セルに直接入力して
希望の結果を出す数式をと試みたのですが・・・

表示自体は、幾らでも変更可能な物なのです。
自分で後から修正が出来るような環境であれば。
(以前、マクロを組んでいて色々合体させたら
途中で何をどう修正したのかわからなくなってしまって)
>金額を入れていく上で当然「-」も生じてきます。
>INTの場合だと「-」の値は、切り捨てすると値がかわってしまいますね。

式の途中にマイナスが出てくるということでしたら、関係のない話です。
計算結果がマイナスになるのかどうか。「支払金額」ということでしたので、マイナスになることはないだろうという判断のもと、より短いINT関数を提案しました。もし、「支払金額」がマイナスになることがあるのなら、元のROUNDDWN関数かTRUNC関数を使います。

一方で、「0」が表示されるというのは、あらかじめ関数を入力しているからですよね。そもそも、「XXXXX-(XXXXX*0.25)」で、「XXXXX」の部分をその都度変更するのでしたら、あらかじめ関数を入力しておくのではなく、その都度入力したほうが、むしろ効率がよろしいのでは? IF関数も不要ですし。
13
>で、あるなら、このままの式でも構わないのでしょうか?
例えば、仕入れ金額を計算する時、「単価 x 数量」で計算しますよね。
で、返品した場合は数量がマイナスで表現され、金額がマイナス値になります。このようにマイナス数値があるときには、rounddownを使うのが正しい選択です。

truncというのは知りませんでした。


ちなみにintのしていることは、次のことです。
「与えられた数値よりも小さい整数にする」です。

結果的に、-1.5はそれよりも小さい-2として出力されます。
15の表現が正しくありません!!

「与えられた数値よりも大きくない整数のうち、最大のものにする」
これが正しい!!

1に対して0になったんじゃあ理屈が合わない。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。