[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ある値に合計が達した日付を返す』(あや)
A B
2/1 100
2/9 150
3/5 10
4/8 500
4/15 200
A列に日付B列にランダムな数字があります。
B列の累計が200を超えたとき(200単位というのでしょうか?)の日付を返したいのですが。
例えば上記の表で行くと、100+150=250で200を超えるので、2/9を返す。
次は400を超えたときの日付を返したいので、100+150+10+500=760で4/8を返す。
次は600なので4/8を返すということなのですが。
宜しくお願いいたします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
Dim ctr As Long, strctr As Long, cl As Range strctr = 200 For Each cl In Intersect(ActiveSheet.Columns(2).Cells, ActiveSheet.UsedRange) ctr = ctr + Val(cl.Value) Do If ctr > strctr Then MsgBox cl.Offset(, -1) & Chr(10) & strctr strctr = strctr + 200 Else Exit Do End If Loop Next cl End Sub (mm) 2016/02/08(月) 18:07
ベタベタですが、
C1 : =IF(B1>=200,A1,"")
C2 : =IF(AND(SUM(B$1:B1)<200*QUOTIENT(SUM(B$1:B2),200),SUM(B$1:B2)>=200*QUOTIENT(SUM(B$1:B2),200)),A2,"")
C2 を下にフィルコピー。
これで、該当の行に日付が表示されると思います。 これを上詰めでということならエキスパートさんの回答をお待ちください。
(β) 2016/02/08(月) 19:38
ちょっと練習してみました。
たとえば、
G1 : =IF(B1>=200,TRUE) G2 : =IF(AND(SUM(B$1:B1)<200*QUOTIENT(SUM(B$1:B2),200),SUM(B$1:B2)>=200*QUOTIENT(SUM(B$1:B2),200)),TRUE)
G2 を下にフィルコピーしておいて
H1 : =IFERROR(INDEX(A$1:A$10,SMALL(IF(G$1:G$10=TRUE,ROW(G$1:G$10)),ROW(A1))),"")
これを Ctrl/Shift/Enter で確定し、下にフィルコピーすれば H列に上詰めで該当の日付が表示されますね。
(β) 2016/02/08(月) 19:44
こんな感じかな
C1=SUM($B$1:B1) D1=INDEX(A:A,MATCH(ROW(A1)*200,C:C)+1) C1:D1 を下にフィルコピー
(AAA) 2016/02/08(月) 20:50
C1セルに =IFERROR(INDEX(A$1:A$100,MATCH(1,INDEX((SUBTOTAL(9,INDIRECT("B1:B"&ROW(B$1:B$100)))>=(ROW(A1))*200)*1,0),0)),"") と入力して下へフィルコピーではどうか?
(ねむねむ) 2016/02/08(月) 21:11
あぁ、一挙に大きくなった時の経過である 400 等も表示するんですね。 では、素人の作ったβ数式は無視してください。
(β) 2016/02/08(月) 21:28
=IFERROR(INDEX(A$1:A$100,MATCH(1,INDEX((SUMIF(INDIRECT("B1:B"&ROW(B$1:B$100)),"<>")>=(ROW(A1))*200)*1,0),0)),"") でも。 (ねむねむ) 2016/02/09(火) 08:42
過去にいくつか回答がついているのに放置している質問があるがこれも放置になるんだろうか。 (ねむねむ) 2016/02/10(水) 10:37
=IFERROR(INDEX(A$1:A$100,MATCH(TRUE,INDEX(SUMIF(A$1:A$100,"<="&A$1:A$100,B$1:B$100)>=ROW(A1)*200,0),0)),"")
でもええかも? ※A列昇順 ダブリなし前提。 (GobGob) 2016/02/10(水) 11:09
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.