• #HyperFormula
  • #Excel
  • #互換性
  • #動的配列
  • #スピル
  • #関数リスト
未分類

HyperFormula と Excel の互換性ガイド

概要

HyperFormula は、ビジネスWebアプリケーション向けのオープンソース計算エンジンで、395個以上のExcel互換関数をサポートしています。本ドキュメントでは、HyperFormulaの関数対応状況、特にExcelの最新機能(動的配列・スピル機能)の互換性について詳しく解説します。

バージョン情報

  • 最新バージョン: v3.1.0(2025年時点)
  • 対応関数数: 395個
  • 対応言語数: 17言語

対応関数カテゴリ一覧

HyperFormulaは以下のカテゴリで395個の関数をサポートしています:

カテゴリ関数数主な関数
配列操作3ARRAYFORMULA, FILTER, ARRAY_CONSTRAIN
日付と時刻25DATE, DATEVALUE, TODAY, NOW, NETWORKDAYS
エンジニアリング50複素数、進数変換、ビット演算関数
情報15ISBLANK, ISNUMBER, ISERROR, TYPE
財務28PMT, PV, FV, IRR, XNPV
論理13IF, IFERROR, IFNA, AND, OR, NOT, XOR, IFS
検索と参照14VLOOKUP, XLOOKUP, INDEX, MATCH, OFFSET
数学と三角関数75SUM, SUMIF, SUMIFS, ROUND, SQRT, SIN, COS
行列関数4MMULT, TRANSPOSE, MDETERM, MINVERSE
演算子16基本的な算術・比較演算子
統計81AVERAGE, AVERAGEIF, AVERAGEIFS, COUNT, COUNTIF, COUNTIFS, STDEV, MEDIAN, MAXIFS, MINIFS, PERCENTILE
テキスト25CONCATENATE, 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など)は、大規模データセットでパフォーマンス制限があります。

最適化のヒント

  1. 配列演算の活用: ループの代わりに配列演算を使用
  2. 不要な再計算の回避: 揮発性関数(NOW、RANDなど)の使用を最小限に
  3. 適切な範囲指定: 必要以上に大きな範囲を指定しない

まとめ

✅ HyperFormulaの強み

  • 395個の関数: Excelの主要関数をほぼ網羅
  • XLOOKUP対応: 最新の検索関数に対応
  • スピル機能: 動的配列の自動展開に対応
  • FILTER関数: 条件付きフィルタリングに対応
  • 高い互換性: 適切な設定でExcelとほぼ同等の動作

⚠️ 現在の制限

  • SORT/UNIQUE未対応: API経由で実装が必要
  • 3D参照未対応: 複数シートをまたぐ参照は不可
  • 構造化参照未対応: Excelテーブル形式の参照は未対応

🔮 将来の展望

HyperFormulaは活発に開発が続いており、公式ドキュメントでは「現在の開発段階での制限」と明記されているため、将来的にはこれらの制限が改善される可能性があります。

参考リンク