Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Officeスクリプトでsumif/countifのような条件付き集計が可能か?

解決したいこと

Excel online上のブックのデータをofficeスクリプトにて、excel vbaのようなsumif,sumifs,countif,countifsのような条件付き集計をしたい。

例)
Excel2016でvbaのcountifsなどを使用し、条件に合うデータの集計をしています。
それをpower automate(クラウド版)とofficeスクリプトで実行しようとしていますが、
officeスクリプトで条件付き集計方法がなかなか見つかりません。
シート上の行数はカウントできたのですが、、、。

発生している問題・エラー

officeスクリプトでcountifs,sumifsなどの条件付き書式が見つからない。

例)excelでは以下の通りcountifsを使用し、条件に該当するセル数をカウントしている。

WorksheetFunction.CountIfs(Range("e:e"), "名古屋", Range("l:l"), "仕向け港")

または、問題・エラーが起きている画像をここにドラッグアンドドロップ
image.png

該当するソースコード

ソースコードを入力

例)officeスクリプトで最終行は取得できる。nonDoxという変数に最終行を入れて、power automateのアクションに渡している。

function main(workbook: ExcelScript.Workbook) {

    const sheet1 = workbook.getWorksheet('Shipment');
    const range=sheet1.getRange("A:A");
    // nonDoxの算出(a1)から数値が続くまでの最終行、nonDoxがa2から最終行の数
    let nonDox:number
    nonDox = sheet1.getCell(0.0).getRangeEdge(ExcelScript.KeyboardDirection.down).getRowIndex()-1;
return nonDox;
}

自分で試したこと

ネット、書籍などで調査。

0

2Answer

どうしてもOfficeスクリプトでやりたいということであれば、聞き流してください…。

Officeスクリプトを試せる環境がなく代替案になりますが、
Excel Online上でもCOUNTIFS関数やSUMIFS関数は用意されているので、こちらを利用するのはいかがでしょうか。

image.png

COUNTIFS

image.png

SUMIFS

image.png

1Like

Comments

  1. @takaekokaz

    Questioner

    ありがとうございます。
    やはりWORKSHEET関数はOFFICEスクリプトではそのまま使えないようですね、、。
    そこで、OFFICEスクリプトでシートのセルにSUMIFS関数を入れようとしているのですが、
    エスケープシーケンスがうまくいかないようでエラーが出ます。
    対策をご存じでしたらご教示いただけますと幸いです。
    / 各数値計算用関数を隣のセルに入れる。
    sheet.getCell(2, 24).setFormula(=countif("C2:C9","A12","E2:E9",B12));
    タイトルなし.png

  2. 計算式全体を文字列としてあげる必要があると思います。
    公式リファレンスにも書き方の例があるのでご参考ください。

    image.png

  3. せっかくスクリプトを使うのであれば、計算式をセルに埋め込むよりも、選択範囲をループして計算していっていった方が、汎用性や拡張性は上がると思います。

    @nak435さんのいう通り、選択範囲をループしながら計算していった方がスマートかと思うので、そちらのやり方もぜひご検討ください。

  4. @takaekokaz

    Questioner

    YottyPGさま
    ありがとうございます。
    getRangeで取得した範囲.setFormula("=COUNTIFS(C:C,¥"文字列¥")");
    にて、取得したセルに関数を入力することができました!
    計算もセル内でできます。
    条件の文字列ダブルクォーテーションを¥(officeスクリプト上はバックスラッシュ)をつけてエスケープすることによって可能となりました。
    教えてくださった公式リファレンスのお陰ですありがとうございます。

現時点ではOfficeスクリプトからワークシート関数を使うことはできないと思います(要望はあるようなので、将来はサポートされるかもしれませんが)。

Officeスクリプトで集計したいのであれば、対象のセル範囲をgetRangeして、ループしながら集計条件を判定して集計(加算)することになると思います。

1Like

Comments

  1. @takaekokaz

    Questioner

    nak435さま
    ありがとうございます。

    for文にてループさせましたが、行数が多すぎて(8000行)時間がかかります。
    上記の方法にて解決できました。

    この度はアドバイスありがとうございます

Your answer might help someone💌