アプリのパフォーマンス

以下に留意することで、より効率的に動作するアプリを作成することが出来ます。

シート上に配置する数式は必要最低限にする

シート上の数式は、表示された初回と、関連セルの値が変更されたタイミングに計算されます。

例えば、下図のようにセル A1 にセットされた数式が、画面表示範囲外( F 列以降)にある数式のセットされたセルを参照している場合、

セル A1 が表示されると、セル A1 で参照しているセルの数式も連鎖的に計算(※)され、処理に時間がかかります。

※ F1:F50が計算され、さらに、G1:J1 ~ G50:J50 の数式も全て計算されます。

../../../_images/img_01204.png

同様に、数式がデータを一覧表示している範囲に含まれるセルを参照している場合、

検索や一覧のクリアによって大量のセルの値が変更されることで、それらを参照している数式も全て再計算されます。

これらの要因で意図せず大量の数式が再計算されると、処理に時間がかかります。

使用する数式は必要最低限になるように注意してください。

他シートの参照とアクションセット呼び出しに注意する

シートが他のシートから参照されている場合、参照されているシートのいずれかのアクションセットが実行される都度、

参照しているシートの数式も再計算され時間がかかる場合があります。

例えば、シート X, Y がシート A を参照(「=シートA!A1」)している場合、シート A のセル値が変更される、または、

シート A のアクションセットが実行されると、シート X, Y の数式も再計算されます。

シート X, Y に多数の数式があると、これらの再計算に時間がかかります。

../../../_images/img_02170.png

この問題は、なるべくシートを一つにまとめるよう実装することで回避できます。

大量件数の登録、更新、および、削除では、「データ更新を一括実行する」アクションを使用する

データベースを操作するアクションは、実行の都度データベースへのアクセスと切断を行います。

連続でデータの登録、更新、および、削除を実行するような場合、それらを「データ更新を一括実行する」アクション内に配置することでデータベースへのアクセス回数が抑制され、処理速度が向上します。

参考

「データ更新を一括実行する」アクションについては トランザクションを制御する を参照してください。

インデックスを設定する

大量のデータが登録されているテーブルの検索には時間がかかる場合があります。

そのような場合、検索条件や、ソート条件としてよく使用されるカラムにインデックスを設定することで、処理速度の向上が見込まれます。

参考

インデックスについては テーブル検索を高速化する(インデックス設定) を参照してください。

特定の値を検索する場合、VLOOKUP を使用する

CELF の VLOOKUP は特別にチューニングされていて、高速に動作します。

例えば、一覧に指定した値が含まれているかの存在チェックを行う場合、COUNTIF を使用するよりも、VLOOKUP を使用した方がより高速です。

また、Excel では近似一致検索(第4引数:true)の方が高速ですが、CELF では完全一致検索(第4引数:false)のほうが高速に動作します。

注意

※検索値(第1引数)に、ワイルドカードを使用することは出来ません。
※検索値(第1引数)と検索範囲(第2引数)との一致判定は、セルの書式設定に関わりません。数字のみからなる値は数値として判定される点に注意してください。
例)
=VLOOKUP("123", …) とした場合に "00123" もヒットします。

連続したセル範囲に同一の処理を行う場合、セル範囲を指定する

連続したセル範囲に同一の処理を行う場合、繰り返しアクションを使用して一つずつ処理するよりも、セル範囲を指定してまとめて処理する方がより高速です。

例)セル範囲 C3:C100 に同じ書式を設定する場合
「セル [C3:C100] の書式を設定する」アクション1つで実行
例)セル範囲 W5:W100 に同一の値を設定する場合(クリアも同様)
「セル [W5:W100] に [=A5] をセットする」アクション1つで実行

注意

範囲の値を範囲へ設定することはできない点に注意してください。
例)
「セル [W5:W100] に [=A5:A100] をセットする」は =A5:A100 という数式の結果である #VALUE! が W5:W100 のすべてのセルにセットされます。

複数のテーブルを結合して集計やソートを行うと時間がかかる

データベースのデータの集計やソートは、データの内容や量によって大きな処理時間がかかる場合があります。

特に、複数のテーブルを結合して集計やソートを行う場合は注意が必要です。

これは、集計やソートのために、データベース内部で最大「結合する各テーブルのデータ件数を掛け算した件数のデータ」を処理する必要があるためです。

例えば、データ件数が100件のテーブルA、200件のテーブルB、300件のテーブルCの3つのテーブルを結合する場合、最大で100×200×300=6,000,000件のデータが処理されます。

../../../_images/img_03123.png

1つ1つのテーブルのデータ件数が少ない場合であっても、結合するテーブルが増えることによって処理に必要なデータ件数が急激に増加し、レスポンスが著しく悪化する場合があります。

隣接するセルの書式はなるべく統一する

書式設定されたセルが多い場合や、隣接するセルの書式が統一されていないレイアウトの場合は、シートのサイズが大きくなり表示に時間がかかります。

そのような場合は、書式設定を減らすか、もしくは隣接するセルは同じ書式となるようなレイアウトを検討してください。

../../../_images/img_04104.png

上記のレイアウトでは、左右のセルは表示形式が異なり、なおかつ上下のセルは背景色が異なっているため、隣接するセルの書式は統一されていません。

このような場合、一覧部分の背景色を同じにするなどして隣接するセルの書式を統一すれば、表示時間は短縮されます。

また、書式設定されたセルを減らすことでも表示時間を短縮することができます。

セルの書式を解除する場合は、表示形式は「標準」、フォントは「標準フォント」、罫線は「なし」、塗りつぶしは「色なし」を設定してください。

多数のデータを表示するためにシートを大きくしていることで書式設定されたセルが多くなってしまっている場合は ページング のテクニックでシートの大きさを小さくする方法があります。

ヒント

古いバージョン(3.2.2以前)のCELFで作成したシートは、保存し直すことで表示時間が改善する場合があります。