GetBlocks メソッドで取得したセル範囲を並び替えるには?(WorkBook/Sheet)
対象製品
El Tabelle for .NET 3.0J
詳細
Sheet クラスの GetBlocks メソッドを使用するとエンドユーザーが選択したセル範囲を Range 構造体のコレクションとして取得できます。ただし、このコレクションはエンドユーザーが選択操作を行った順にセル範囲を格納します。セル範囲を行番号や列番号の順に並び替える場合には次のような処理を行います。
[Visual Basic]
[C#]
通常、エンドユーザーが1行目、4行目、2行目の順で行を選択すると、結果は 1:1、4:4、2:2 となります。しかし、ソートを行った結果は 1:1、2:2、4:4 となります。
[Visual Basic]
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim range As GrapeCity.Win.ElTabelle.Range
Dim rangeSelected As GrapeCity.Win.ElTabelle.Range()
Dim objRowComparer As New RowComparer
'選択されているセル範囲を取得する
rangeSelected = Sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection)
'セル範囲を行番号順に並び替える
rangeSelected.Sort(rangeSelected, objRowComparer)
For Each range In rangeSelected
Debug.WriteLine(range.Expression)
Next
End Sub
'ソート方法を定義するクラス
Public Class RowComparer
Implements System.Collections.IComparer
Public Function Compare(ByVal x As Object, _
ByVal y As Object) As Integer Implements IComparer.Compare
Return CType(x, GrapeCity.Win.ElTabelle.Range).TopRow - _
CType(y, GrapeCity.Win.ElTabelle.Range).TopRow
End Function
End Class
ByVal e As System.EventArgs) Handles Button1.Click
Dim range As GrapeCity.Win.ElTabelle.Range
Dim rangeSelected As GrapeCity.Win.ElTabelle.Range()
Dim objRowComparer As New RowComparer
'選択されているセル範囲を取得する
rangeSelected = Sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection)
'セル範囲を行番号順に並び替える
rangeSelected.Sort(rangeSelected, objRowComparer)
For Each range In rangeSelected
Debug.WriteLine(range.Expression)
Next
End Sub
'ソート方法を定義するクラス
Public Class RowComparer
Implements System.Collections.IComparer
Public Function Compare(ByVal x As Object, _
ByVal y As Object) As Integer Implements IComparer.Compare
Return CType(x, GrapeCity.Win.ElTabelle.Range).TopRow - _
CType(y, GrapeCity.Win.ElTabelle.Range).TopRow
End Function
End Class
[C#]
private void button1_Click(object sender, System.EventArgs e)
{
GrapeCity.Win.ElTabelle.Range[] rangeSelected;
RowComparer objRowComparer = new RowComparer();
//選択されているセル範囲を取得する
rangeSelected = sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection);
//セル範囲を行番号順に並び替える
System.Array.Sort(rangeSelected, objRowComparer);
foreach(GrapeCity.Win.ElTabelle.Range range in rangeSelected)
{
System.Diagnostics.Debug.WriteLine(range.Expression.ToString());
}
}
public class RowComparer : System.Collections.IComparer
{
public int Compare(object x, object y)
{
return ((GrapeCity.Win.ElTabelle.Range)x).TopRow -
((GrapeCity.Win.ElTabelle.Range)y).TopRow;
}
}
{
GrapeCity.Win.ElTabelle.Range[] rangeSelected;
RowComparer objRowComparer = new RowComparer();
//選択されているセル範囲を取得する
rangeSelected = sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection);
//セル範囲を行番号順に並び替える
System.Array.Sort(rangeSelected, objRowComparer);
foreach(GrapeCity.Win.ElTabelle.Range range in rangeSelected)
{
System.Diagnostics.Debug.WriteLine(range.Expression.ToString());
}
}
public class RowComparer : System.Collections.IComparer
{
public int Compare(object x, object y)
{
return ((GrapeCity.Win.ElTabelle.Range)x).TopRow -
((GrapeCity.Win.ElTabelle.Range)y).TopRow;
}
}
通常、エンドユーザーが1行目、4行目、2行目の順で行を選択すると、結果は 1:1、4:4、2:2 となります。しかし、ソートを行った結果は 1:1、2:2、4:4 となります。
関連情報
キーワード
HowTo
この文書は、以前は次のFAQ IDで公開されていました : 6987