code: private void correctMergedCell(final Sheet sheet, final RecordOperation recordOperation, final List<CellRangeAddress> mergedRegionList) {
  
          if(recordOperation.isNotExecuteRecordOperation()) {
              return;
          }
  
          // 操作をしていないセルの範囲の取得
          final CellRangeAddress notOperateRange = new CellRangeAddress(
                  recordOperation.getTopLeftPoisitoin().y,
                  recordOperation.getBottomRightPosition().y - recordOperation.getCountInsertRecord(),
                  recordOperation.getTopLeftPoisitoin().x,
                  recordOperation.getBottomRightPosition().x
                  );
  
          for(CellRangeAddress mergedRange : mergedRegionList) {
  
              if(notOperateRange.getLastRow() >= mergedRange.getFirstRow()) {
                  // 行の追加・削除をしている上方の範囲の場合
                  continue;
  
              } else {
                  /*
                   * 追加・削除をしている下方の範囲の場合、影響を受けているため修正する。
                   * ネストしている場合は、追加と削除の両方を行っているので考慮する
                   */
  
                  if(recordOperation.isInsertRecord() || recordOperation.isDeleteRecord()) {
                      //
                      CellRangeAddress correctedRange = new CellRangeAddress(
                              mergedRange.getFirstRow() + recordOperation.getCountInsertRecord() - recordOperation.getCountDeleteRecord(),
                              mergedRange.getLastRow() + recordOperation.getCountInsertRecord() - recordOperation.getCountDeleteRecord(),
                              mergedRange.getFirstColumn(),
                              mergedRange.getLastColumn());
  
                      if(!isOverMergedRegion(sheet, correctedRange)) {
                          sheet.addMergedRegion(correctedRange);
                      }
  
                  }
  
              }
  
          }
  
      }
docs: 挿入・削除前の情報を元に結合を再設定する
  
  @since 1.6
  @param sheet シート
  @param recordOperation 挿入・削除処理の情報
  @param mergedRegionList 挿入・削除処理を行う前の結合情報