(例は補足で書きます)
・A列が0と1が並んだデータ
・B列に以下の条件の数値を出力
・・同じ行のA列が0の場合は、0
・・同じ行のA列が1の場合は、その上下の行で連続する1の数
以上のことをexcel関数で書くことはできますか?
※マクロでは書けると思うのでそちらの回答は必要ありません。
仮計算の列を使用すれば可能です。(条件に特に記載が無かったので…)
下記例では、A1からデータが始まっているとして、C列を仮計算に使用します。
C1: =A1
C2: =IF(A2=0,0,C1+1)
B1: =IF(C1=0,0,IF(C2=0,C1,B2))
※C2とB1の数式は、必要行数分、下方向にコピーしてください。
※仮計算に使用したC列は非表示にする事が可能です。
※数式を設定した最下行の直下の行は空白セルとしてください。
仮計算の列を使用すれば可能です。(条件に特に記載が無かったので…)
下記例では、A1からデータが始まっているとして、C列を仮計算に使用します。
C1: =A1
C2: =IF(A2=0,0,C1+1)
B1: =IF(C1=0,0,IF(C2=0,C1,B2))
※C2とB1の数式は、必要行数分、下方向にコピーしてください。
※仮計算に使用したC列は非表示にする事が可能です。
※数式を設定した最下行の直下の行は空白セルとしてください。
kseikakuさんの回答を参考に、こんな書き方も可能でしたね。
C1: =A1
C2: =IF(A2,C1+1,0)
B1: =IF(C1,IF(C2,B2,C1),0)
※元の回答と実質的には変わってません。
ありがとうございます。
思った以上にすっきりした式でびっくりです。
マクロは使用しないということで大分めんどくさい感じになっていますが。
B列,C列,D列,E列,F列,G列,H列に以下のような関数を書きます。(2行目に書くとして記載します)
B列 =IF(A2,SUM(C2+":"+D2),0)
C列 =ADDRESS(G2,1)
D列 =ADDRESS(H2,1)
E列 =IF(A2,E1+A2,0)
F列 =IF(A2,F3+A2,0)
G列 =ROW()-E2
H列 =ROW()-1+F2
こうすれば、B列にお望みの形で表示されるとおもいます。
E列、F列で上から連続と下から連続を計算し、それを元にSUM関数の開始/終了アドレスをとって集計しています。(工夫すれば、関数の入れ子でできるような気もしますが....)
ありがとうございます。
自分でやってた時は「INDIRECTとか使わなきゃダメかなあ?」とかいろいろいじってる内に訳が分からなくなってしまいました。あの先に正解はあったんだなあ……
gong1971さんありがとうございます。
確かにINDIRECT抜けてました。入れ子の関数もつくってみたのですが、gong1971さんの回答のすっきりするのでアップやめてました。
kseikakuさんの回答を参考に、こんな書き方も可能でしたね。
2012/09/28 14:48:29C1: =A1
C2: =IF(A2,C1+1,0)
B1: =IF(C1,IF(C2,B2,C1),0)
※元の回答と実質的には変わってません。
ありがとうございます。
2012/09/29 18:08:06思った以上にすっきりした式でびっくりです。