マージ解除後にすべてのセルに値を復帰する方法(WorkBook/Sheet)
対象製品
El Tabelle for .NET 3.0J
詳細
El Tabelle の UnMerge メソッドを使用してマージされているセルを解除すると、マージされていたセルの値は左上のセルにのみ保持されます。
左上のセルを含むすべてのセルに対して値を保持するには、次のようにコーディングします。
[Visual Basic]
[C#]
左上のセルを含むすべてのセルに対して値を保持するには、次のようにコーディングします。
[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
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);
}
}
}
}
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