2 返信 最新の回答 日時: Sep 4, 2009 10:14 AM ユーザー:d.o

    ExcelにおけるCountif関数的な処理

    d.o

      タイトル

      ExcelにおけるCountif関数的な処理

      フォーラムに投稿

      みなさんこんにちは

       

      たとえばですが..

      テーブルA

      フィールド1 フィールド2

      A      あ

      A      あ

      A      い 

      B      あ

      B      い

      B      い

       

      上のようなデータに対して別テーブルを作って以下のように集計したいとします。 

       

      テーブルB

      フィールド1 あの個数 いの個数

      A      2     1

      B      1     2

       

      とりあえず思いつくのは

      テーブルBにリレーション用のグローバルフィールドを2つ作りそれぞれに「あ」「い」といれる

      テーブルAのテーブルオカレンスを2つ作る

      1つはテーブルBとフィールド1=フィールド1 フィールド2=あ

      1つはテーブルBとフィールド1=フィールド1 フィールド2=い

      とリレーションします

       

      テーブルBの「あの個数」「いの個数」フィールドにそれぞれcount関数を設定

       

      という方法で出来ると思います。

       

      しかし、この方法では テーブルAのフィールド2の値の種類が「う」「え」..と増えていくとその数だけテーブルBにグローバルフィールドとテーブルAのテーブルオカレンスが増えていくわけで...あまりスマートでないように思います。

       

      ExcelにはCountifという関数がありますよね。

      条件に従うセルの個数を返す関数です。

       

      このCountif関数のようにリレーション先のレコードの特定のフィールドを見て、条件に合うレコードの個数だけを求めるような処理は出来ないでしょうか?

      これが出来るとリレーションが1つですむので組むのが楽になると思います。

       

      よろしくお願いします。 

       

        • 1. Re: ExcelにおけるCountif関数的な処理
          Hiro
            

          [879]番 過去レス

          正規化されたDBから表形式にするには?

           

          のサンプルで示したように、集計処理は、元データのあるテーブルのレコード上(云うなれば現場で)で行うのが楽です。

          その素材(集計結果)の中から必要に応じたものだけリレーションで関連付けして参照すれば良いです。

           

          例えば、

          テーブルA

          F1 F2  F1+F2集計 F1集計(|あ|い| | |・・・|)

          A  あ   2     |2|1|

          A  あ   2     |2|1|

          A  い   1     |2|1|

          B  あ   1     |1|2|

          B  い   2     |1|2|

          B  い   2     |1|2|

           

          上のようなデータに対して別テーブルを作って、フィールドF1のリレーションで集計結果を参照すれば、以下のように集計結果が得られます。

           

          テーブルB

          F1 参照:F1集計(|あ|い| | |・・・|)

          A |2|1|

          B |1|2|

           

          この方法なら、Bテーブルに用意するのはF1だけです。

          • 2. Re: ExcelにおけるCountif関数的な処理
            d.o
              

            Hiroさん

            いろいろとありがとうございます

             

             やはり「現場で」が良いんですね。

            今回の例でいうとテーブルAに計算フィールド等を追加してリレーションすればよさそうですね

             

            以前「余計な計算フィールドは作らないのがスマート」みたいなことを聞いたことがあったので、データのテーブルに本質的には関係ないフィールドは極力作らないようにしていたのですが... 。ケースバイケースってことでしょうね。