マージ解除後にすべてのセルに値を復帰する方法(WorkBook/Sheet)

文書番号 : 17418     文書種別 : 使用方法     最終更新日 : 2005/04/29
文書を印刷する
対象製品
El Tabelle for .NET 3.0J
詳細
El Tabelle の UnMerge メソッドを使用してマージされているセルを解除すると、マージされていたセルの値は左上のセルにのみ保持されます。
左上のセルを含むすべてのセルに対して値を保持するには、次のようにコーディングします。

[Visual Basic]
Imports GrapeCity.Win.ElTabelle
Imports GrapeCity.Win.ElTabelle.Editors

Private Sub Button1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button1.Click

  'テストデータの入力
  Sheet1(0, 0).Text = "AAA"
  Sheet1(0, 0).BackColor = Color.LightBlue
  Sheet1(0, 0).Editor = New ComboBoxEditor

  'セルをマージする
  Sheet1.Merge(New Range("A1:B2"))

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button2.Click

  Dim range As Range
  Dim rangeSelected As Range()
  'マージされているセル範囲を取得する
  rangeSelected = Sheet1.GetBlocks(BlocksType.Merge)
  'セルのマージを解除する
  For Each range In rangeSelected
    UnmergeDivideEqually(Sheet1, range)
  Next

End Sub

'マージを解除し、解除後の各セルに情報を複製する
Private Sub UnmergeDivideEqually( _
  ByRef target As Sheet, _
  ByVal mergedRange As Range)

  Dim intColumn, intRow As Integer
  Dim objSourcePosition As Position
  Dim objDestPosition As Position

  'マージを解除する
  target.UnMerge(mergedRange)
  '左上のセルの位置を保存する
  objSourcePosition = New Position( _
    mergedRange.LeftColumn, mergedRange.TopRow)

  '左上以外のセルに左上のセルの情報をコピーする
  For intColumn = mergedRange.LeftColumn To mergedRange.RightColumn
    For intRow = mergedRange.TopRow To mergedRange.BottomRow
      objDestPosition = New Position( _
        intColumn, intRow)
      '左上のセル以外を処理する
      If objSourcePosition.Equals(objDestPosition) = False Then
        target.Copy(objSourcePosition.ToRange, _
          objDestPosition, DataTransferMode.All)
      End If
    Next
  Next

End Sub


[C#]
using GrapeCity.Win.ElTabelle;
using GrapeCity.Win.ElTabelle.Editors;

private void button1_Click(object sender, System.EventArgs e)
{
  //テストデータの入力
  sheet1[0, 0].Text = "AAA";
  sheet1[0, 0].BackColor = Color.LightBlue;
  sheet1[0, 0].Editor = new ComboBoxEditor();

  //セルをマージする
  sheet1.Merge(new Range("A1:B2"));
}

private void button2_Click(object sender, System.EventArgs e)
{
  sheet1.Redraw = false;

  Range[] rangeSelected;
  //マージされているセル範囲を取得する
  rangeSelected = sheet1.GetBlocks(BlocksType.Merge);
  //セルのマージを解除する
  foreach(Range range in rangeSelected)
  {
    UnmergeDivideEqually(sheet1, range);
  }

  sheet1.Redraw = true;
}

//マージを解除し、解除後の各セルに情報を複製する
private void UnmergeDivideEqually(Sheet target,
  Range mergedRange)
{
  int intColumn, intRow;
  Position objSourcePosition;
  Position objDestPosition;

  //マージを解除する
  target.UnMerge(mergedRange);
  //左上のセルの位置を保存する
  objSourcePosition = new Position(
    mergedRange.LeftColumn, mergedRange.TopRow);

  //左上以外のセルに左上のセルの情報をコピーする
  for(intColumn = mergedRange.LeftColumn;
    intColumn <= mergedRange.RightColumn;intColumn++)
  {
    for(intRow = mergedRange.TopRow;
      intRow <= mergedRange.BottomRow;intRow++)
    {
      objDestPosition = new Position(
        intColumn, intRow);
      //左上のセル以外を処理する
      if(objSourcePosition.Equals(objDestPosition) == false)
      {
        target.Copy(objSourcePosition.ToRange(),
          objDestPosition, DataTransferMode.DataOnly);
      }
    }
  }
}
キーワード
HowTo

この文書は、以前は次のFAQ IDで公開されていました : 6978