人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

excel関数の質問です。

(例は補足で書きます)
・A列が0と1が並んだデータ
・B列に以下の条件の数値を出力
・・同じ行のA列が0の場合は、0
・・同じ行のA列が1の場合は、その上下の行で連続する1の数

以上のことをexcel関数で書くことはできますか?

※マクロでは書けると思うのでそちらの回答は必要ありません。

●質問者: Lhankor_Mhy
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

こんな感じです。

AB
00
00
00
00
11
00
13
13
13
00
00
00
12
12

1 ● gong1971
●200ポイント ベストアンサー

仮計算の列を使用すれば可能です。(条件に特に記載が無かったので…)

下記例では、A1からデータが始まっているとして、C列を仮計算に使用します。

C1: =A1
C2: =IF(A2=0,0,C1+1)
B1: =IF(C1=0,0,IF(C2=0,C1,B2))

※C2とB1の数式は、必要行数分、下方向にコピーしてください。
※仮計算に使用したC列は非表示にする事が可能です。
※数式を設定した最下行の直下の行は空白セルとしてください。


gong1971さんのコメント
kseikakuさんの回答を参考に、こんな書き方も可能でしたね。 C1: =A1 C2: =IF(A2,C1+1,0) B1: =IF(C1,IF(C2,B2,C1),0) ※元の回答と実質的には変わってません。

Lhankor_Mhyさんのコメント
ありがとうございます。 思った以上にすっきりした式でびっくりです。

2 ● kseikaku
●50ポイント

マクロは使用しないということで大分めんどくさい感じになっていますが。

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関数の開始/終了アドレスをとって集計しています。(工夫すれば、関数の入れ子でできるような気もしますが....)


gong1971さんのコメント
横から失礼します。色々な解法があって面白いですね、参考になります。 B列の数式については、下記の記述じゃないとエラーになりませんか? =IF(A2,SUM(INDIRECT(C2&":"&D2)),0) 入れ子を使うとすれば、G列の数式をC列に、H列の数式をD列に入れ、 更にC列、D列の数式をB列に入れる事が出来ますね。 可読性は落ちますが、↓こんな感じ。 =IF(A2,SUM(INDIRECT(ADDRESS(ROW()-E2,1)&":"&ADDRESS(ROW()-1+F2,1))),0)

Lhankor_Mhyさんのコメント
ありがとうございます。 自分でやってた時は「INDIRECTとか使わなきゃダメかなあ?」とかいろいろいじってる内に訳が分からなくなってしまいました。あの先に正解はあったんだなあ……

kseikakuさんのコメント
gong1971さんありがとうございます。 確かにINDIRECT抜けてました。入れ子の関数もつくってみたのですが、gong1971さんの回答のすっきりするのでアップやめてました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ