- ベストアンサー
EXCELでの期待値までの集計方法について
A1~A100のセルには整数値が入っています。 A1、A2と順に加算し、その合計値がB1の値を超えたとき、A列のセル(アドレス)と合計値を求めたいのです。 マクロ等の知識がありませんので、ご指導のほどよろしくお願いします。 (例) A1:1、A2:2、A3:3、A4:4 B1:5 求めたい結果:A3、6
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
B2セルに =IF(AND($B$1>SUM($A$1:$A1),$B$1<=SUM($A$1:$A2)),"A"&ROW()&" "&SUM($A$1:$A2),"") をコピペして、選択したセルの右下の■をB5までドラックすると、B3セルに A3 6 と表示される様にしましたが、こんな感じではダメですか? それとも、特定のセルに表示させたいのであれば、もっと別な方法を考えますが。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
Vlookup関数(TRUE型)の応用で解いてみました。 範囲を検索するのが得意な関数だからです。少数点付き数だと思うようにならないかも知れませんが(下記注参照)、金額、個数とうならOKです。 式の複写が累積和の列だけと言う良い点があります。 (1)A列にデータがあるとして、B列に移します。 移す理由は、VLOOKUP関数の検索する表の値は、最左列にないといけないので、累積和(下記(2)の数)をA列に持ってくるため、明渡します。 (2)B1からの累積和が一定値を超えたかを問題にしているので、=SUM($B$1:B1) をA1に入れ、データ最下行まで複写します。 これでB1からその行までの累積和の値がA列に表示され(求まり)ます。 (3)C行を1列使います。C1に1を入れ、C2に2といれ、C1:C2を範囲指定して、オートフィル機能で連番が振れます。これでC1以下の行に行数の数を入れます。 この列を作る理由は、VLOOKUP関数ではROW(・)の値をを直接返させることは出来ず、具体的な行数の値を表の中に持っていて、その列を指定して、採ってくるよりほか無いからです。 (4)検索値はE1に置くものとします。本件では検索はこの一つの値だけです。E1はどこでも良く、下記(5)の関数式が変るだけです。 (5)求める結果の行数(第何行目でE1を越えるか)をセットするセルを 仮にF1とします。F1もデータのある場所以外ならどこでも良い。 F1セルの関数式は=VLOOKUP(E1,$A$1:$C$5,3,TRUE)+1 越えると言う条件のため+1した。 この例では、今はC5(5行)までしかデータが無い場合の式ですが、$c$5 の5を最終行の行数に直してください。 (6)後は、A列において、F1セルの示す行の値(その行までの和)を取れば良いので、=OFFSET($A$1,F1-1,0)とG1に入れれば良い。-1するのはOFFSETがズレ行数を指定する約束なので、例えば3行目は、ズレは2になります。 (注) VLOOKUP関数は、第4引数を省略すると、TRUE型と見なされる。 検索値が実数(小数点以下付き)の時は、切り捨てられる。 VLOOKUP関数のTRUE型は 100 x 200 y 300 z ・・・・・ と表があるとき、検索値を100とすると、「検索値100があればその行のxを選ぶ」。検索値を211とすれば、表にズバリ211は無いが、無ければ検索値211を越えない表の値の100、200のうち最大値200のyを選ぶ」が採られると言うクセがあるので注意が必要です。
お礼
お礼が遅くなって申し訳ありません。 懇切丁寧なご説明をいただき、よく理解できました。 ありがとうございました。
- nishi6
- ベストアンサー率67% (869/1280)
A B C D E F G __1 1 5 最初に越えたセル 最初に越えた時の計 式1 式2 __2 2 式3 式4 ↓ ↓ __3 3 コピー コピー __4 4 : : ↓ ↓ : : ↓ ↓ 100 100 ●上のような表で、 (式1)F1は = SUM($A$1:A1) (式2)G1は =IF($B$1<F1,ROW(),"") この式をF2:F100、G2:G100にコピーします。 (式3)C2は ="A"&MIN(G1:G100) (式4)D2は =INDIRECT("F"&MIN(G1:G100)) A列の総計を超えてB1に入力する場合は、下の式に変えてください。 C2は =IF(MIN(G1:G100)<>0,"A"&MIN(G1:G100),"なし") D2は =IF(MIN(G1:G100)<>0,INDIRECT("F"&MIN(G1:G100)),"A列の計は"&SUM(A1:A100)) F、G列を使ってみました。不要なら非表示にして下さい。 ●ユーザファンクションの例です。 C2に =CyoukaCell(B1) D2に =CyoukaTotal(B1) のようにして使います。他の設定(F、G列)はいりません。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。出てきたコードウインドウに下記マクロをコピーして貼り付けます。 ここから ↓ '// セル位置 Function CyoukaCell(supDt As Double) Dim rw As Integer '// 行カウンタ Dim TTL As Double '// 合計 CyoukaCell = "なし" For rw = 1 To 100 TTL = TTL + Cells(rw, 1) If supDt < TTL Then CyoukaCell = "A" & rw: Exit Function End If Next End Function '// 合計 Function CyoukaTotal(supDt As Double) Dim rw As Integer '// 行カウンタ Dim TTL As Double '// 合計 CyoukaTotal = "A列の計は" & Application.Sum(Range("A1:A100")) For rw = 1 To 100 TTL = TTL + Cells(rw, 1) If supDt < TTL Then CyoukaTotal = TTL: Exit Function End If Next End Function
お礼
お礼が遅くなり申し訳ありません。 ご親切に説明いただき、ありがとうございました。 今後のレベルアップの糧にさせていただきます。
お礼
お礼が遅くなり申し訳ありません。 シンプルで明快な方法を、ありがとうございました。 早速、活用させていただきます。