ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュの連続しない○の個数を数える関数は?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
E11からY11まで、○が入っている行があります。
この中から、○が連続しないで単独で出ている個数を数えて表示させる関数をZ11に入れたいのですが、どのような関数を入れたらよいですか?
下の例ですと、GとPが単独で現われており、二個になりますので、Z11には2という風に表示させたいのです。
関数に詳しい方、宜しくお願い致します。

E  F  G  H  I  J  K  L  M  N  O  P  Q・・・
× × ○ × ○ ○ × ○ ○ ○ × ○ ×・・・

コメント(29)

作業行でIF関数などを使って判定し算出するとか
上手く行くか分かりませんがSUMPRODUCT関数を
上手く使って算出するとかでしょうか
単独で○が出現→注目セルの値は○で、その前後は非○
であれば良いので、対象範囲の隣接セルに変な値が入らない前提ならば
そのまま立式して
 =sumproduct((D11:X11<>"○")*(E11:Y11="○")*(F11:Z11<>"○"))
みたいにしても算出出来そうですね。
連続しない○の個数...コレが厄介なんだと思います。
具体的に数えたいものを書き換えると、"×○×"になり、コレを探して数える関数を使えばよさそうです。
ユーザー定義関数を作ってはいかがでしょう。
>>[2]

その数式で試してみましたが、何処か間違っていたのか、上手く出来ませんでした。
>>[1]

その関数を示してもらえるといいのですが・・・。
>>[3]

まさに、そうなんですが・・・。
何か、適切な関数はないでしょうかね?
>>[4]

それは、どのようにして作るのですか?
僕は、その関数を自作できないのです。
ワークシート関数でやろうとすると、どうしてもZまでが計算対象になりますが、その数式をZに入れると循環参照になりエラーになりますね。
あぁ、今回の表のレイアウトだと、>>2で挙げた前提を守れないんですね…。

それならSUMPRODUCT関数に渡す範囲を一つ分狭めて、端っこだけ別計算した値と
合算するなどの工夫をしてみては?
>>[6]
>その関数を示してもらえるといいのですが・・・。
どのような関数を入れたら良いかは提示したつもりですが・・・(SUMPRODUCT関数)

数式としては
Z11セル =SUMPRODUCT((D11:W11<>"○")*(E11:X11="○")*(F11:Y11<>"○"))+IF(AND(X11<>"○",Y11="○"),1,0)


因みに
>それは、どのようにして作るのですか?
>僕は、その関数を自作できないのです。
VBA(マクロ)を使えば自作できますよ
>>[7]
ググルと出てくるので試してみてください。
まだ皆さんから出てきていない関数で出来ましたよ。
ただし関数に合わせてデータをチョットいじりましたが。
ちょっとめんどくさいかもしれないけど考えてみました。
まず○と×を数字に置き換えてユーザー定義で設定します。
[=1]"○";[=0]"×"
こうすると○は1で×は0という数字になります。

次に隠しセルをE12に作り、こう入れます。
=IF(E11=1,E11+D11+F11,0)
これをQ12までドラッグして下さい。

するとあら不思議。単独の○の所だけ1になりましたよね?!あとはこれを数えるだけです!!
いかがですか?
>>[9]

そう言えば、「循環参照・・・」という警告が出ていました。
>>[10]

僕は勘違いしていました。
貴方にご教示頂いた関数を、再度、試してみましたところ、所期の結果が出ました。
有り難うございました。
>>[11]

ご回答、有り難うございました。
その数式も用いて、試してみます。
>>[12]

そうですか。
検索してみますね。
○×を数値に置き換えなくても、作業行を使うのであれば
E12セル =IF(AND(D11<>"○",E11="○",F11<>"○"),1,0)
E12セルをY12セルまでコピー又はオートフィル
Z11セル =SUM(E12:Y12)
で出来るはずですが
>>[13]

ご回答、有り難うございました。
試してみます。
>>[19]

度々のご回答、有り難うございました。
その方法も、試してみます。
皆さん、ご回答、有り難うございました。
所期の結果を得ることができましたので、このトピを締め切らせて頂きます。
また、何か疑問が生じましたら、宜しくお願い致します。
締め切ったところ申し訳ありませんが循環になるのを忘れていました
E12セル =IF(AND(D11<>"○",E11="○",F11<>"○"),1,0)
E12セルをX12セルまでコピー又はオートフィル
Y12セル =IF(AND(X11<>"○",Y11="○"),1,0)
Z11セル =SUM(E12:Y12)
>>[23]

度々のご回答、有り難うございます。
その数式も、試してみたいと思います。
トピを締め切ったところ申し訳ありません。
「トピを締め切る」=「トピ主さんがトピ主としての責務を果たした」
というくらいに勝手に解釈させて頂き、コメントをします ^^;
完全に趣味の世界なので特に必要なければスルーして下さい。


1.まずは >>[11] マリ男さん の式を参考にして無関係なD11セルの参照も回避してみました。

Z11= =AND(E11="○",F11<>"○")+SUMPRODUCT((E11:W11<>"○")*(F11:X11="○")*(G11:Y11<>"○"))+AND(X11<>"○",Y11="○")


2.次に作業セルを使ったもの。シンプルな計算。

E12= =IF(E11="○",1,0)
F12:Y12にE12をコピペ
E13= 1
F13= =IF(E11<>"○",1,0)
G13:Y13にF13をコピペ
E14= =IF(F11<>"○",1,0)
F14:X14にE14をコピペ
Y14= 1
Z11= =SUMPRODUCT(E12:Y12*E13:Y13*E14:Y14)


3.その次、MMULT関数で配列を左右にシフトして片端だけを1にするタイプ。
計算過程で21*21の配列が使われるのがもの凄く無駄な気がしますが。

Z11= =SUMPRODUCT((E11:Y11="○")*(MMULT(0+(E11:Y11<>"○"),0+(COLUMN(INDIRECT("r1c1:r21c21",0))-ROW(INDIRECT("r1c1:r21c21",0))=1))+(COLUMN(INDIRECT("r1c1:r1c21",0))=1))*(MMULT(0+(E11:Y11<>"○"),0+(COLUMN(INDIRECT("r1c1:r21c21",0))-ROW(INDIRECT("r1c1:r21c21",0))=-1))+(COLUMN(INDIRECT("r1c1:r1c21",0))=21)))


4.最後はINDEX関数とMOD関数で配列を左右にシフト(ビット演算的に言うと「ローテート」でしょうか)。
OR関数が使えないので逆の条件同士を掛けて結果をNOT。
ただLibreOffice3では使えましたがエクセル2000では使えませんでした。
INDEX関数が他の関数の引数になった時に配列を返してくれないのが原因かと思います。
(作業セルを使えば同じ方法のものもエクセルで可能です。)

Z11= =SUMPRODUCT((E11:Y11="○")*NOT(INDEX(0+(E11:Y11="○"),MOD(COLUMN(INDIRECT("r1c1:r1c21",0))-1-1,21)+1)*(COLUMN(INDIRECT("r1c1:r1c21",0))<>1))*NOT(INDEX(0+(E11:Y11="○"),MOD(COLUMN(INDIRECT("r1c1:r1c21",0))-1+1,21)+1)*(COLUMN(INDIRECT("r1c1:r1c21",0))<>21)))
>>[25]

> Z11= =AND(E11="○",F11<>"○")+SUMPRODUCT((E11:W11<>"○")*(F11:X11="○")*(G11:Y11<>"○"))+AND(X11<>"○",Y11="○")

この式は論理演算子(AND)と算術演算子(*)が混ざっていますね。
どちらかに統一したほうがいいと思いますよ。
>>[26]

確かに。統一感がありませんね。全て算術演算子でやってみます。
あと後半の配列を使った式と関連性を持たせるため冗長にして順番を変えました。

Z1= =(E11="○")*(F11<>"○")*1+SUMPRODUCT((F11:X11="○")*(G11:Y11<>"○")*(E11:W11<>"○"))+(Y11="○")*1*(X11<>"○")
後出しですけど、自分ならこうします。
これなら、○でも×でも△でも連続しないものを数えることができます。
トピ主です。
締め切った後も、いろいろな方法を提示頂き、有り難うございます。
それぞれの方法、試してみて、より効率的な方法を見つけようと思います。

ログインすると、残り1件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。