Delphi Programming / Object Pascal
[掲載 2018年03月13日] [更新 2018年03月14日] エクセル操作フォームEx |
エクセル操作フォームEx 参考コード類
アクティブセルの取得と選択列数と行数の取得 |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010 |
現在アクティブなセルの行番号と列番号を取得するサンプルです.
アクティブなセルとは,直接入力可能なセルのことです.
TStringGrid でも,複数のセルを選択したように描画しても,入力フォーカスのセルは 1 つだけですが,エクセルのセルも,たとえ複数のセルが選択されている状態であっても,アクティブなセルは常に 1 つだけです. |
|
図1
実行結果の例
|
//=============================================================================
// 選択中のセルの行と列を知る
// 現在アクティブなセル取得
// アクティブなセルとは入力できるセルのこと
// 複数のセルが選択状態でも入力できるのは1つのセルだけ
//=============================================================================
procedure TplExcelFormEx1.Button1Click(Sender: TObject);
var
LRange : Txlf2000Range;
LRow : Integer;
LCol : Integer;
LText : string;
begin
LRange := xlfExcelApp.ActiveCell;
//行番号と列番号を取得
LRow := LRange.Row;
LCol := LRange.Column;
LText := '行 : ' + IntToStr(LRow) + sLineBreak
+ '列 : ' + IntToStr(LCol) + sLineBreak
+ Chr(LCol + Ord('A') - 1) + IntToStr(LRow);
MessageBox(Handle, PChar(LText), '情報', MB_ICONINFORMATION);
end;
現在選択中のセルの範囲を知りたい時の参考コードです. |
|
図2
実行結果の例 |
//=============================================================================
// 選択中のセルの行と列を取得
// 選択行数と選択列数も取得
//=============================================================================
procedure TplExcelFormEx1.Button2Click(Sender: TObject);
//---------------------------------------------------------------------------
// セルの番地をR1C1形式からA1形式に変換
//---------------------------------------------------------------------------
function ToA1Value(ARow, ACol: Integer): string;
begin
Result := Chr(ACol + Ord('A') - 1) + IntToStr(ARow);
end;
//---------------------------------------------------------------------------
var
LRange : Txlf2000Range;
LRow : Integer;
LCol : Integer;
LRows : Integer;
LCols : Integer;
LText : string;
begin
//以下でも同じ
//LRange := xlfExcelApp.ActiveWindow.Selection as Txlf2000Range;
LRange := xlfExcelApp.Selection[0] as Txlf2000Range;
//行番号と列番号
LRow := LRange.Row;
LCol := LRange.Column;
//選択行数と選択列数
LRows := LRange.Rows.Count;
LCols := LRange.Columns.Count;
LText := '行 : ' + IntToStr(LRow)
+ ' 選択行数 : ' + IntToStr(LRows) + sLineBreak
+ '列 : ' + IntToStr(LCol)
+ ' 選択列数 : ' + IntToStr(LCols) + sLineBreak
+ '選択範囲 '
+ ToA1Value(LRow, LCol) + ':' + ToA1Value(LRow + LRows - 1, LCol + LCols - 1);
MessageBox(Handle, PChar(LText), '情報', MB_ICONINFORMATION);
end;
|