検索と置換
v1.5.0 から、Ctrl/Cmd+F(検索)と Ctrl/Cmd+H(置換)で組み込みの検索バーが開きます。一致したセルはすべてキャンバス上でハイライトされ、Enter で順に移動でき、全置換は 1 手で undo できます。
両エディションで利用可能です — 検索・置換はコピー/貼り付けと同じ基本編集機能という位置づけです。
組み込みの検索バー
設定は不要です。グリッドにフォーカスがある状態で Ctrl/Cmd+F を押してください。バーには次のオプションがあります。
- 大文字と小文字を区別する
- セル内容が完全に同一 — セルのテキスト全体がクエリと一致する場合のみヒット
- 正規表現 — クエリを JavaScript の正規表現として扱う
- 範囲 —
シート/選択範囲/ブック
Enter / Shift+Enter で次/前の一致に移動し、Escape でバーを閉じてハイライトを解除します。
ブック範囲では全シートを走査し、一致が見つかったシートをアクティブにします(ステータスは 2/4 · Sheet1 のように表示されます)。
import { createReogrid } from '@reogrid/pro'
const grid = createReogrid({ workspace: '#app' })
grid.showFindBar() // 検索タブで開く
grid.showFindBar('replace') // 置換タブで開く
grid.hideFindBar()
独自の UI で操作したい場合は、組み込みバーを無効にして以下の API を使います。
const grid = createReogrid({ workspace: '#app', showFindBar: false })
プログラムからの検索
// 一致を順に辿る — `find` が検索セッションを開始し、`findNext` が進めます
const first = grid.find('東京') // FindMatch | null → { row, column, text }
grid.findNext()
grid.findPrevious()
// セッションを開始せずに一致をすべて取得
const all = grid.findAll('東京', { matchCase: true })
grid.clearFind() // セッションを終了しハイライトを解除
find は一致セルを選択してスクロールします。findAll は読み取りのみです。
FindOptions
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
matchCase | boolean | false | 大文字と小文字を区別する。 |
wholeCell | boolean | false | セルのテキスト全体がクエリと一致する場合のみヒット。 |
useRegex | boolean | false | クエリを JavaScript の正規表現として扱う。 |
lookIn | 'formula' | 'value' | 'formula' | 生の入力値(=SUM(A1:A3))と表示テキストのどちらを比較対象にするか。 |
order | 'byRow' | 'byColumn' | 'byRow' | 走査順。 |
range | FindRange | null | null | { topRow, leftColumn, bottomRow, rightColumn } の矩形に限定。 |
includeHidden | boolean | false | ユーザーまたはフィルターで非表示にした行・列も対象に含める。 |
scope | 'sheet' | 'selection' | 'workbook' | 'sheet' | インスタンスレベルのみ。検索対象の範囲。 |
lookIn: 'value' は画面上の見た目(数式の計算結果、数値書式適用後)を検索します。置換は Excel と同様に常に生の入力値へ書き戻すため(Excel の置換も数式に対して働きます)、計算結果が一致しただけの数式セルが書き換わることはありません。
置換
grid.replace('東京', '大阪') // 現在の一致のみ
const n = grid.replaceAll('東京', '大阪') // → 変更されたセル数
// 検索と同じオプションを指定できます
grid.replaceAll('cat', 'dog', { matchCase: true, wholeCell: true })
いずれも 1 手で undo でき(Ctrl/Cmd+Z で日付を含め置換前のテキストが正確に復元されます)、保護されたシートのロックされたセルはスキップします。
置換は Excel と同様にセル内のすべての出現箇所を書き換えます — replaceAll('a', 'x') は banana を bxnxnx にします。値全体を対象にしたい場合は wholeCell を使ってください。
正規表現
grid.replaceAll('\\s+', ' ', { useRegex: true }) // 連続する空白を 1 つに
grid.findAll('^INV-\\d{4}$', { useRegex: true }) // 請求書番号
不正なパターンは SyntaxError を送出します。組み込みバーでは例外にせず Invalid pattern と表示します。
検索対象から除外されるもの
- 非表示の行・列(
includeHidden: trueで含められます) - 結合セルの従属セル — データは結合の左上セルにあり、そちらが走査されます
- 遅延ロードデータソースの未ロード行(走査すると 1 行ごとにフェッチが発生するため)
行・列の挿入/削除といった構造変更を行うと検索セッションは解除されます(ハイライトが座標で管理されているため)。構造を変えたあとは再検索してください。
ワークシート単位の API
アクティブシートに追従させるのではなく、特定のシートを明示的に対象にしたい場合は、同じ操作がワークシートにもあります。
const ws = grid.worksheet
ws.findAll('東京')
ws.find('東京')
ws.replaceAll('東京', '大阪')
ws.clearFind()
インスタンスレベルのメソッド(grid.find など)は範囲指定の処理を担い、undo を正しいシートのスタックに振り分けます。アプリではこちらを推奨します。