部分一致による条件付き検索で集計する エクセルとの互換性も考慮

正規表現と、OpenOfficeCalcでの条件付き集計。部分一致でやる場合結構面倒くさい。で、部分一致の場合の条件付き集計の方法を紹介しましたが、面倒くさいだけではなく、条件の記述の独自仕様(?)のせいでエクセルとの互換性がありません。
そこで、OpenOfficeでもcalcでも使用できる部分一致の条件付き集計の数式を紹介します。

送信者 OpenOffice
例によって、SUMPRODUCT関数を用いています。
SUMPRODUCT関数は、本当に便利ですね。
上の例は、

1:(A1:A12セルに入力されているデータがAで始まっている)場合、
2:(B1:B12セルの数値)を集計する数式です。
1と2をそれぞれ、()でくくり、*で〓いで全体をSUMPRODUCT関数で括れば完成です。
下の画像で、その他、さまざまな場合の部分一致の設定方法を紹介します。



送信者 OpenOffice

  • このファイルは、SKYDRIVEからcalc138.odsをダウンロードしてください。
  • ダウンロードしていただき正規表現のタブをクリックすると、SUMPRODUCTを使用しない場合での処理を確認できます。なおその場合、ツールバーツール>オプションから、設定画面を開き、OpenOffice.Calc>数式で正規表現を使うにチェックを入れてください。
  • なお、検索条件の設定の仕方についてのファイルは、SKYDRIVEからcalc139.odsをダウンロードしてください。



上の手書きの例で青線を引いたところを変えると、いろいろな形で条件を設定できます。
条件の設定で使っているのは、LEFT関数、RIGHT関数、LEN関数などです。
(RIGHT(A1:A12;1)="3") :最後の1文字が3の場合を検索
(RIGHT(A1:A12;2)="56") :最後の2文字が56の場合を検索
(LEFT(A1:A12;2)="A1") :最初の2文字がA1の場合を検索
(MID(A1:A12;2;2)="12") :2-3文字目が12の場合を検索
(LEN(A1:A12)=4) :文字数が4文字の場合を検索
(LEN(A1:A12)>=5) :文字数が5文字以上の場合を検索
(RIGHT(A1:A12;2)>="45") :末尾が45以上の場合を検索
このようにさまざまな設定が可能になります。


上の手書きの例では、条件に合う場合に数値の集計を行なう数式を書きました。これは、SUMIF関数に当たるものです。
では、COUNTIF関数に当たる集計をするには、どうしたらいいでしょうか? この場合は、SUMIF関数に当たる集計をしたときに、*(B1:B12)と書いていた部分を*1に変更するだけでOKです。上の画像の下半分を確認してください。OpenOfficeで処理するだけなら*1は、必要ないのですが、エクセルでは*1がないと、集計されないようです。


エクセルとの互換性の問題を最初に書いたので、エクセルではどのように処理されるかを見てみます。
送信者 OpenOffice
上が、SUMPRODUCT関数を用いた場合です。
下は、SUMIF関数、COUNTIF関数を用いた場合です。
なお、下の画像の、条件の設定は、エクセルでの条件設定の仕様に従っています。当たり前ですが。
送信者 OpenOffice




ただし、どうしたらいいか分からないケースもあります。

  1. Aを含むデータの合計をSUMPRODUCTを使って集計する場合
  2. 末尾が45以上の場合を、SUMIF、COUNTIFを使って集計する場合

です。