未分類
HyperFormula と Excel の互換性ガイド
概要
HyperFormula は、ビジネスWebアプリケーション向けのオープンソース計算エンジンで、395個以上のExcel互換関数をサポートしています。本ドキュメントでは、HyperFormulaの関数対応状況、特にExcelの最新機能(動的配列・スピル機能)の互換性について詳しく解説します。
バージョン情報
- 最新バージョン: v3.1.0(2025年時点)
- 対応関数数: 395個
- 対応言語数: 17言語
対応関数カテゴリ一覧
HyperFormulaは以下のカテゴリで395個の関数をサポートしています:
| カテゴリ | 関数数 | 主な関数 |
|---|---|---|
| 配列操作 | 3 | ARRAYFORMULA, FILTER, ARRAY_CONSTRAIN |
| 日付と時刻 | 25 | DATE, DATEVALUE, TODAY, NOW, NETWORKDAYS |
| エンジニアリング | 50 | 複素数、進数変換、ビット演算関数 |
| 情報 | 15 | ISBLANK, ISNUMBER, ISERROR, TYPE |
| 財務 | 28 | PMT, PV, FV, IRR, XNPV |
| 論理 | 13 | IF, IFERROR, IFNA, AND, OR, NOT, XOR, IFS |
| 検索と参照 | 14 | VLOOKUP, XLOOKUP, INDEX, MATCH, OFFSET |
| 数学と三角関数 | 75 | SUM, SUMIF, SUMIFS, ROUND, SQRT, SIN, COS |
| 行列関数 | 4 | MMULT, TRANSPOSE, MDETERM, MINVERSE |
| 演算子 | 16 | 基本的な算術・比較演算子 |
| 統計 | 81 | AVERAGE, AVERAGEIF, AVERAGEIFS, COUNT, COUNTIF, COUNTIFS, STDEV, MEDIAN, MAXIFS, MINIFS, PERCENTILE |
| テキスト | 25 | CONCATENATE, LEFT, RIGHT, MID, SUBSTITUTE |
Excel の新機能対応状況
✅ 対応済み機能
1. XLOOKUP関数(v3.0.0で追加)
Excel 365で追加された強力な検索関数に対応しています。
=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
2. スピル機能
配列の値が隣接セルに自動的に「スピル(溢れる)」する機能に対応しています。
=A1:A10 * 2 // 10個の結果が自動的にスピル
- #SPILL!エラー: スピル範囲がブロックされた場合のエラー処理に対応
3. FILTER関数(v1.0.0で追加)
条件に基づいて配列をフィルタリングする動的配列関数に対応しています。
=FILTER(array, include, [if_empty])
制限事項:
- 単一行(等幅)または単一列(等高)の配列のみ受け付け可能
4. ARRAYFORMULA関数
配列演算モードを有効にして、スカラー関数をベクトル化できます。
=ARRAYFORMULA(A1:A10 + B1:B10)
5. 配列演算モード
グローバル設定で配列演算を有効化できます:
HyperFormula.buildEmpty({
useArrayArithmetic: true
})
❌ 未対応機能
1. 動的配列関数(一部)
以下のExcel 365動的配列関数は未対応です:
- SORT: 配列を並べ替え
- SORTBY: 他の配列に基づいて並べ替え
- UNIQUE: 重複を削除
- SEQUENCE: 連続番号の配列を生成
- RANDARRAY: ランダム数の配列を生成
代替手段:
- ソート機能は、HyperFormulaのAPI(
setRowOrderメソッド)を使用してプログラム的に実装可能
hfInstance.setRowOrder(sheetId, newOrder)
2. その他の未対応機能
| 機能 | 説明 |
|---|---|
| 3D参照 | SUM(Sheet1:Sheet3!A1) のような複数シート参照 |
| 定数配列 | {1,2,3;4,5,6} 形式の配列リテラル |
| 非同期関数 | WEBSERVICE、STOCKHISTORY など |
| 構造化参照 | テーブル名を使った参照(例:Table1[Column1]) |
| 相対名前付き範囲 | 動的な名前付き範囲 |
互換性設定
HyperFormulaは、適切な設定によりExcelとほぼ完全な互換性を実現できます。
推奨設定(Excel US ロケール互換)
const config = {
licenseKey: 'gpl-v3',
useArrayArithmetic: true,
useColumnIndex: false,
caseSensitive: false,
accentSensitive: false,
caseFirst: 'lower',
ignorePunctuation: false,
localeLang: 'en-US',
functionArgSeparator: ',',
decimalSeparator: '.',
thousandSeparator: ',',
dateFormats: ['MM/DD/YYYY', 'MM/DD/YY'],
timeFormats: ['hh:mm', 'hh:mm:ss.sss'],
matchWholeCell: true,
smartRounding: true,
leapYear1900: true,
nullYear: 30
}
スピル機能の動作原理
スピルの仕組み
スピルの例
// A1セルに入力
=FILTER(B1:B100, C1:C100>50)
// 結果が10行の場合、A1:A10に自動的にスピル
実装における注意事項
1. 配列次元の一貫性
配列演算では、次元が一致している必要があります:
// ✅ OK: 3x3 + 3x3
=A1:C3 + D1:F3
// ❌ エラー: 3x3 + 2x2
=A1:C3 + D1:E2
2. 欠損値の処理
配列内の欠損値は #N/A として扱われます:
=A1:A5 + B1:B3 // B4, B5 は #N/A となる
3. ブロードキャスト
小さい配列は出力次元に合わせて繰り返されます:
=A1:A10 + B1 // B1の値が10回繰り返される
カスタム関数での制限
カスタム関数を実装する際の制限事項:
- 結果配列のサイズ自動調整不可: カスタム関数は結果配列のサイズを自動調整できない
- 名前付き範囲の相対参照不可: 相対参照は未対応
パフォーマンス考慮事項
一部の統計関数(CHISQ、GAMMAなど)は、大規模データセットでパフォーマンス制限があります。
最適化のヒント
- 配列演算の活用: ループの代わりに配列演算を使用
- 不要な再計算の回避: 揮発性関数(NOW、RANDなど)の使用を最小限に
- 適切な範囲指定: 必要以上に大きな範囲を指定しない
まとめ
✅ HyperFormulaの強み
- 395個の関数: Excelの主要関数をほぼ網羅
- XLOOKUP対応: 最新の検索関数に対応
- スピル機能: 動的配列の自動展開に対応
- FILTER関数: 条件付きフィルタリングに対応
- 高い互換性: 適切な設定でExcelとほぼ同等の動作
⚠️ 現在の制限
- SORT/UNIQUE未対応: API経由で実装が必要
- 3D参照未対応: 複数シートをまたぐ参照は不可
- 構造化参照未対応: Excelテーブル形式の参照は未対応
🔮 将来の展望
HyperFormulaは活発に開発が続いており、公式ドキュメントでは「現在の開発段階での制限」と明記されているため、将来的にはこれらの制限が改善される可能性があります。