V4 V5

結合はセル値とは別の側テーブル ws.MergesMergeTable)が保持します。 結合していないセルはこのテーブルに一切現れないため、コストは結合の個数にのみ比例します。

B2:D3 を結合したセル。内側のグリッド線は引かれない

結合と解除

using unvell.ReoGrid.Core;

ws.MergeRange(RangePosition.Parse("B2:D3"));

bool merged = ws.Merges.IsMerged(1, 1);
bool isAnchor = ws.Merges.IsAnchor(1, 1);      // 左上セルかどうか

ws.UnmergeAt(1, 1);                            // 範囲内のどのセルを指してもよい

結合すると、範囲の**左上セル(アンカー)**の値と書式が表示に使われます。 UnmergeAt は範囲内のどのセルを指しても、その結合全体を解除します。

内容の確認

if (ws.Merges.TryGetAt(1, 1, out var range))
	Console.WriteLine(range.ToAddress());      // "B2:D3"

int count = ws.Merges.Count;
foreach (var r in ws.Merges.Ranges)
	Console.WriteLine(r.ToAddress());

TryGetAt は範囲内のどのセルからでも、その結合の範囲全体を返します。

選択範囲を結合単位へ広げる

// 選択範囲が結合セルを部分的に含む場合、結合全体まで広げる
RangePosition full = ws.Merges.ExpandToIncludeMerges(selection);

コピーや書式適用の対象範囲を決めるときに使います。結合の一部だけを対象にすると 表示と実データが食い違うため、Excel と同じく範囲を広げるのが既定の挙動です。

挿入・削除との関係

行や列を挿入・削除すると、結合範囲は自動的に追従します。削除によって結合範囲が 完全に消える場合は、その結合自体が取り除かれます。

制限

  • 結合範囲に対する範囲ソートはできません。 ソート は結合を含む 範囲を拒否します。Excel と同じ制限です

主なメンバー(MergeTable

メンバー内容
IsMerged(r, c)そのセルが結合に含まれるか
IsAnchor(r, c)結合の左上セルか
TryGetAt(r, c, out range)そのセルを含む結合範囲
Ranges / Count結合の一覧と個数
ExpandToIncludeMerges(range)範囲を結合単位へ拡張
Clear()すべて解除

追加・解除は ws.MergeRange(...) / ws.UnmergeAt(...) を使ってください (テーブルを直接操作すると、関連する更新が漏れます)。

次に読む

ページの内容は役に立ちましたか?