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
実行結果の例
  • A1 形式でも取得

リスト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
実行結果の例

リスト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;