セルが選択されているかどうか判断するには?
対象製品
El Tabelle for .NET 3.0J
詳細
指定したセルがユーザーによって選択されているか判断し、選択されている場合にのみ処理を行うには Sheet クラスの GetBlocks メソッドで選択されているセルの範囲を取得し、Range 構造体の Contains メソッドでセルが含まれているか否かを確認します。
[Visual Basic]
[C#]
なお、Sheet クラスの SelectionType プロパティが Single に設定されている場合はセル範囲を考慮する必要がありません。このため、次のコードだけで確認できます。
[Visual Basic]
[C#]
さらに、Sheet クラスには SelectionSizeChanged というイベントがあります。このイベントの引数で、ユーザーが選択したセルを取得できるため、処理によってはこのイベント引数を使うほうが効率的です。
常にユーザーが選択したセル(アクティブなセル)に対して、必ず処理を行うのであれば Sheet クラスの ActiveCell プロパティを使うのが簡単です。
[Visual Basic]
Dim bolSelected As Boolean = False
Dim objRange, objRanges() As GrapeCity.Win.ElTabelle.Range
'選択されているセル範囲をすべて取得する
objRanges = Sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection)
For Each objRange In objRanges
'A1セルを含むセル範囲がないか確認する
If objRange.Contains(New GrapeCity.Win.ElTabelle.Position("A1")) = True Then
'含むセルがある場合
Debug.WriteLine("A1セルは" & objRange.Expression & "で選択されています")
bolSelected = True
Exit For
End If
Next
'含むセルがなかった場合
If bolSelected = False Then
Debug.WriteLine("A1セルを含むセル範囲はありません")
End If
Dim objRange, objRanges() As GrapeCity.Win.ElTabelle.Range
'選択されているセル範囲をすべて取得する
objRanges = Sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection)
For Each objRange In objRanges
'A1セルを含むセル範囲がないか確認する
If objRange.Contains(New GrapeCity.Win.ElTabelle.Position("A1")) = True Then
'含むセルがある場合
Debug.WriteLine("A1セルは" & objRange.Expression & "で選択されています")
bolSelected = True
Exit For
End If
Next
'含むセルがなかった場合
If bolSelected = False Then
Debug.WriteLine("A1セルを含むセル範囲はありません")
End If
[C#]
bool bolSelected = false;
GrapeCity.Win.ElTabelle.Range[] objRanges;
//選択されているセル範囲をすべて取得する
objRanges = sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection);
foreach(GrapeCity.Win.ElTabelle.Range objRange in objRanges)
{
//A1セルを含むセル範囲がないか確認する
if(objRange.Contains(new GrapeCity.Win.ElTabelle.Position("A1")) == true)
{
//含むセルがある場合
System.Diagnostics.Debug.WriteLine("A1セルは" + objRange.Expression + "で選択されています");
bolSelected = true;
break;
}
}
//含むセルがなかった場合
if(bolSelected == false)
{
System.Diagnostics.Debug.WriteLine("A1セルを含むセル範囲はありません");
}
GrapeCity.Win.ElTabelle.Range[] objRanges;
//選択されているセル範囲をすべて取得する
objRanges = sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection);
foreach(GrapeCity.Win.ElTabelle.Range objRange in objRanges)
{
//A1セルを含むセル範囲がないか確認する
if(objRange.Contains(new GrapeCity.Win.ElTabelle.Position("A1")) == true)
{
//含むセルがある場合
System.Diagnostics.Debug.WriteLine("A1セルは" + objRange.Expression + "で選択されています");
bolSelected = true;
break;
}
}
//含むセルがなかった場合
if(bolSelected == false)
{
System.Diagnostics.Debug.WriteLine("A1セルを含むセル範囲はありません");
}
なお、Sheet クラスの SelectionType プロパティが Single に設定されている場合はセル範囲を考慮する必要がありません。このため、次のコードだけで確認できます。
[Visual Basic]
If Sheet1.ActivePosition.Expression = "A1" Then
Debug.WriteLine("A1セルは選択されています")
Else
Debug.WriteLine("A1セルは選択されていません")
End If
Debug.WriteLine("A1セルは選択されています")
Else
Debug.WriteLine("A1セルは選択されていません")
End If
[C#]
if(sheet1.ActivePosition.Expression == "A1")
{
System.Diagnostics.Debug.WriteLine("A1セルは選択されています");
}
else
{
System.Diagnostics.Debug.WriteLine("A1セルは選択されていません");
}
{
System.Diagnostics.Debug.WriteLine("A1セルは選択されています");
}
else
{
System.Diagnostics.Debug.WriteLine("A1セルは選択されていません");
}
さらに、Sheet クラスには SelectionSizeChanged というイベントがあります。このイベントの引数で、ユーザーが選択したセルを取得できるため、処理によってはこのイベント引数を使うほうが効率的です。
常にユーザーが選択したセル(アクティブなセル)に対して、必ず処理を行うのであれば Sheet クラスの ActiveCell プロパティを使うのが簡単です。
キーワード
HowTo
この文書は、以前は次のFAQ IDで公開されていました : 6992