GetBlocks メソッドで取得したセル範囲を並び替えるには?(WorkBook/Sheet)

文書番号 : 17427     文書種別 : 使用方法     最終更新日 : 2005/04/29
文書を印刷する
対象製品
El Tabelle for .NET 3.0J
詳細
Sheet クラスの GetBlocks メソッドを使用するとエンドユーザーが選択したセル範囲を Range 構造体のコレクションとして取得できます。ただし、このコレクションはエンドユーザーが選択操作を行った順にセル範囲を格納します。セル範囲を行番号や列番号の順に並び替える場合には次のような処理を行います。

[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

[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;
  }
}

通常、エンドユーザーが1行目、4行目、2行目の順で行を選択すると、結果は 1:1、4:4、2:2 となります。しかし、ソートを行った結果は 1:1、2:2、4:4 となります。
関連情報
キーワード
HowTo

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