# セルの自動マージ

## Content

Spread.Sheetsでは、自動マージがサポートされます。これにより、重複テキストが含まれた隣接するセルを自動的にマージされるように設定できます。自動マージによってデータが失われることはありません。

### 自動マージのメリット

自動マージ機能は、次の場合に役に立ちます。

* 大きなデータセット内のグループの見やすさを実現できます。
* データを失うことなく、同一のセルを結合します。
* 冗長性（テキストの繰り返し）を除いて、ワークシートの複雑さを取り除きます。
* 重複するセルを手動で確認して1つずつ結合する必要がなくなるため、時間と労力を節約します。

### 自動マージの処理方法

自動マージ機能は、同一のテキストを含む連続したセルを自動的にマージし、マージされたセルのテキスト位置を調整します。
本機能は、結合させるセルが指定範囲の一部でない場合に動作します。Spread.Sheetsで作業する際、範囲、行、列およびワークシート全体の指定範囲に自動マージ機能を適用するには、[autoMerge](/spreadjs/api/classes/GC.Spread.Sheets.Worksheet#autoMerge)メソッドを使用できます。セルを、行方向、列方向、および行と列の両方方向で結合できます。
Spread.Sheetsで自動マージを使用する際、次の2つのモードがサポートされます。

* **自由モード** \- 同じ値を持つセルが隣接するセルと自動的にマージされます。
* **制御モード** \- 同じ値を持つセルは、前の行または列の該当するセルがマージされている場合のみ、隣接するセルとマージされます。

**Worksheet** クラスの **autoMerge** メソッドの **SelectionMode** パラメータを使用すると、自動マージしたセルの選択方法を指定できます。
**SelectionMode** パラメータは、 **source** または **merged** のいずれかに設定できます。次は、これらのオプションについて説明します。

* **source** ：このモードでは、自動マージ範囲で個々のセルを選択できます。
* **merged** ：このモードでは、自動マージ範囲ででマージされたセル全体を選択できます。

### 使用例

ワークシートでデータを分析する際、データ表示を強化し、構造を改善するために、同一のテキストを含む複数のセルを結合することができます。
例えは、ワークシートを使用して、世界のさまざまな国のさまざまな都市や州での製品の売上高を分析しているシナリオを考えてみます。この場合、自動マージ機能を使用して値に基づいてセルを結合でき、 **SelectionMode** プロパティを使用してセル範囲と同じ選択効果を得ることができます。
次の例は、国のさまざまな都市や州で販売されているさまざまな製品を示します。同じ値を持つセルは、SelectionModeプロパティを使用して結合されます。ここで、「国」列のSelectionModeプロパティは **「Merged」** に設定され、「州」列は **「Source」** に設定されます。
![automerge](https://gcdocumentsitejp.blob.core.windows.net/document-site-files/images/0796d6bc-27f9-4afe-868b-c5805ab3d348/automerge.e47e06.gif)

### 自動マージと範囲指定したマージ

ワークシートの「セルの自動マージ」と「範囲指定したマージ」の実行の基本的な違いは次のとおりです。

* Spread.Sheetsで自動マージ機能を使用する場合、マージ操作が実行された後でもセルを移動および編集できます。一方で、セル範囲を指定してマージする場合、セルの値を変更すると、マージされたセルが自動的に調整されます。
* ユーザーがワークシートをスクロールすると、マージされたセル範囲のテキストは表示されたまま（固定表示）になります。 通常のマージされたセル範囲とは異なり、自動マージされたセルは同じ値を表示します。

> **注意:** 自動マージ機能には、次の制限事項があります。
>
> * スプレッドシートで次の操作を実行すると、自動マージ範囲が影響を受けます。
>     * 行または列の追加
>     * 行または列の削除
>     * 行数または列数の設定
> * savePDFメソッドを使用してPDFファイルの印刷または保存する際、結合されたすべてのセルは、自動的に通常のセル範囲として処理されます。
> * コピーまたは移動操作は自動マージ範囲に影響しません。

### コードの使用

次のコードは、[autoMerge](/spreadjs/api/classes/GC.Spread.Sheets.Worksheet#autoMerge)メソッドを使用して、同一の国、州、都市の名前を含むセルを自動マージする方法を示します。

```javascript
<script>
    var data = [
        {
            "国": "Canada",
            "州": "Ontario",
            "市": "Ottawa",
            "製品": "Kraft Grated Parmesan Cheese"
        },
        {
            "国": "Canada",
            "州": "Ontario",
            "市": "Belleville",
            "製品": "KIND Bars Almond & Coconut Gluten Free"
        },
        {
            "国": "Canada",
            "州": "Ontario",
            "市": "Alliston",
            "製品": "Kraft Grated Parmesan Cheese"
        },
        {
            "国": "Canada",
            "州": "Saskatchewan",
            "市": "Prince Albert",
            "製品": "Smartfood Popcorn"
        },
        {
            "国": "Canada",
            "州": "Alberta",
            "市": "Red Deer",
            "製品": "Smartfood Popcorn"
        },
        {
            "国": "Canada",
            "州": "Alberta",
            "市": "Calgary",
            "製品": "Planters Deluxe Whole Cashew"
        },
        {
            "国": "Canada",
            "州": "Alberta",
            "市": "Calgary",
            "製品": "Kraft Grated Parmesan Cheese"
        },
        {
            "国": "Canada",
            "州": "Alberta",
            "市": "Okotoks",
            "製品": "Smartfood Popcorn"
        },
        {
            "国": "India",
            "州": "Andhra Pradesh",
            "市": "Hyderabad",
            "製品": "Teddy Grahams Crackers"
        },
        {
            "国": "South Africa",
            "州": "Gauteng",
            "市": "Roodepoort",
            "製品": "Jaybee's Gourmet Nuts Gift Pack (3 Lb)"
        },
        {
            "国": "Finland",
            "州": "Ita-Suomen Laani",
            "市": "Kuopio",
            "製品": "Planters Deluxe Whole Cashew"
        },
        {
            "国": "Switzerland",
            "州": "Geneve",
            "市": "Vesenaz",
            "製品": "KIND Bars Almond & Coconut Gluten Free"
        },
        {
            "国": "Switzerland",
            "州": "Vaud",
            "市": "Lausanne",
            "製品": "Smartfood Popcorn"
        },
        {
            "国": "Switzerland",
            "州": "Vaud",
            "市": "Morges",
            "製品": "Kraft Real Mayo"
        },
        {
            "国": "Denmark",
            "州": "Frederiksborg",
            "市": "Helsingor",
            "製品": "Planters Deluxe Whole Cashew"
        },
        {
            "国": "Denmark",
            "州": "Kobenhavn",
            "市": "Kobenhavn",
            "製品": "Kraft Grated Parmesan Cheese"
        },
        {
            "国": "Denmark",
            "州": "Storstrom",
            "市": "Nakskov",
            "製品": "Kraft Grated Parmesan Cheese"
        }
    ]
</script>
<script>
    $(document).ready(function () {
        // Spreadを初期化します。
        var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });

        // アクティブシートを取得します。
        var activeSheet = spread.getActiveSheet();

        // データソースと連結します。
        activeSheet.setRowHeight(0, 30, 1);
        activeSheet.autoGenerateColumns = true;
        activeSheet.setDataSource(data);

        // AutoMergeDirectionがColumnに設定され、AutoMergeModeが制限モードに設定されている場合、完全なシートセルをマージします。
        var range = new GC.Spread.Sheets.Range(-1, -1, -1, -1);

        // SelectionModeがmergedに設定されます。
        activeSheet.autoMerge(range, GC.Spread.Sheets.AutoMerge.AutoMergeDirection.column, GC.Spread.Sheets.AutoMerge.AutoMergeMode.restricted, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.AutoMerge.SelectionMode.merged);

        // 列幅を設定します。
        for (var c = 0; c < activeSheet.getColumnCount(); c++)
            activeSheet.setColumnWidth(c, 130.0, GC.Spread.Sheets.SheetArea.viewport);
    });
</script>
```