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

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

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

Q&A

2回答

1273閲覧

excel ifで自動出力させたい

MG1986

総合スコア21

0グッド

0クリップ

投稿2016/07/30 22:20

編集2016/07/31 00:07

画像の目的は合計額を出すためのものです。

単価は固定です。
B列各行*C列各行がD列各行に入ってます。
数量は手入力です。

毎回、数量への手入力がしんどいので開始レベルと目標レベルを入力して数量を自動で出力させるようにしたいのです。

右の開始レベルは最小1からで
目標レベルは最大30まで入力します。

画像のものだと8~20なので画像の数量の通りになります。
この、各数量を自動で出力させるようにしたいです。

今まで数量を手入力していたのを
レベルの2か所を入力するだけで数量を自動算出させようというものです。

イメージ説明

01~10の行の数量は下記のifを入れています。

=IF(G1<10,10-G1,0)

開始レベルが4なら数量は6になります。

11~14以降のifが思いつかないのですが
分かる方いましたら教えていただけますと助かります。

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

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

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

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

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

asahina_dev

2016/07/30 23:08

意図不明、もっと詳細を書くべき、 あとPHPタグは不要ですよねこれ
MG1986

2016/07/31 00:08

毎回、数量への手入力がしんどいので開始レベルと目標レベルを入力して数量を自動で出力させるようにしたいのです。 と何がしたいのか記載してあったのですが訂正しました。
asahina_dev

2016/07/31 00:54

とりあえずいまはいっている計算式をだすのじゃ
asahina_dev

2016/07/31 01:04 編集

て11~がか・・・ ルールがわからない以上誰にも回答ができないと思いますよ 横:「開始レベル 目標レベル」 縦:「TL(個数)」 のマトリクス表を作成してだせばルールはおのずと出てきます。 つくって LOOKUP関数 をつかったほうがいいきがするが
guest

回答2

0

数量の計算について

例えば画像のように8~20の場合、
「1~10」は8・9・10の3つ、「11~14」では11・12・13・14の4つ、、という値が数量に入るのではないかと推測しましたが、どうでしょう?

「1~10」が2という時点で違っているのですが、これは単純に引き算のミスと推測しました。
(もしくは開始レベルの値は含まない?)
・・・はずしていたらすみません。。

以下、上記を前提としてアドバイスを進めます。

1~10に入れた式ですが、前述のとおり8・9・10で3個という値を求めたいのであれば
10-G1+1としなければなりません。

また、開始レベルに対する判定はできていますが、目標値に対する判定が足りないようです。
目標値が10未満の時にも10からの減算になってしまうと思います。

やるべきこと

こんがらがってしまうような条件も、ひとつずつ整理すると作るべきものも明らかになってきます。

①各行の最小値より目標レベルが小さい場合は0
②各行の最大値より開始レベルが大きい場合は0
③各行の最大値と目標レベルを比較して、小さい値をAとする
④各行の最小値と開始レベルを比較して、大きい値をBとする
⑤A-Bが各行の数量となる

また、各行の最小・最大をH,I列に出しておくと、以下のように式を共通化することができます。
'H1:「1~10」の最小値(1)
'I1:「1~10」の最大値(10)
'G$1:開始レベル
'G$2:目標レベル

=IF(G$2<H1,0,IF(G$1>I1,0,IF(I1<G$2,I1,G$2)-IF(H1>G$1,H1,G$1)+1))

H列 I列
1 10
11 14
15 15
16 18
19 20


投稿2016/08/01 02:28

編集2016/08/01 04:15
jawa

総合スコア3013

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

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

0

数式から推測すると、「1~10」の行の数量(C2セル)には、既に"開始レベル"個(8個)の品物がある時に、いくつ足せば10に達するかを書く、ということかと思われます。

これが正しいとすると
A1セルは、TLではなく「個数の範囲」、F1セルは開始レベルではなく「最初から有った品物の個数」、F2セルは目標レベルではなく「品物の総数(この個数に達するところまで計算する)」というように意味が伝わる項目名になっているべきです。そういう項目名が書けないのは、作業内容の理解が不足しているからだと思います。

3行目以降の(「11~14」以降)の数値を計算する式ですが、質問に書かれたデータでは行ごとに個別に書くしかありませんから、すこし修正を加えます。
どのようにするかというと、A列は個数の上限の数値だけを書くようにします。具体的には、A2からA6を以下のような数値にします。A7からA16のセルも数値にしてください(A7セルは、質問の表では"21"という文字列になっていますが、それを 21 という数値にするということです)
そして、3行目は、A3が14、A2が10なので、「10個より大きくて、14個以下」についての行と理解してください。(11~14という意味は、変わっていません)

A2 : 10
A3 : 14
A4 : 15
A5 : 18
A6 : 20

この修正が終わったら、C3セルに以下の式を入力してください。

=IF(($G$1+SUM($C$2:$C3) < $G$2), IF($G$2>=$A3, $A3-$A2,$G$2-$A2) , 0)

この式の意味:
最初のIFは、「最初から有った品物の個数」と、上側の行にある個数の合計を求めて、それが「品物の総数」を超えていなければ個数を計算(式の中のIF文)し、超えていれば0にする。
式の中のIFは、「品物の総数」がこの行の個数の上限(A3セル:値は14)を超えていれば前の行の上限(A2セル:値は10)との差(14-10=4)、超えていなければ個数の上限と前の行の上限との差を求めています。

あとは、C3セルをコピーして、C4~C16セルにコピーすればOKです。
式の中に$を多く使っているのは、コピーした時に自動的に変化する部分($がついていない)と変化させない部分($がついている)があるからです。
このような式の書き方を覚えると、式を1回書いて、残りはコピーで済むので作業が楽になりますよ。

ちなみに、C3セルをコピーして、C4セルにコピーすると、C4セルには次のような式が入ります。
C3セルの式と比べて、$がついていない行の番号が1つ増えている事に気づくかと思います。

=IF(($G$1+SUM($C$2:$C4) < $G$2), IF($G$2>=$A4, $A4-$A3,$G$2-$A3) , 0)

試してみてください。

投稿2016/07/31 01:20

coco_bauer

総合スコア6915

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

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

asahina_dev

2016/07/31 01:46

C4にその式がはいると循環参照エラーになるはずですが
coco_bauer

2016/07/31 03:59

おっしゃる通りですね。 C3セルに入れる正しい式は、”=IF(($G$1+SUM($C$2:$C2) < $G$2), IF($G$2>=$A3, $A3-$A2,$G$2-$A2) , 0)” です。 訂正いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問