Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年06月17日] [更新 2013年12月15日] エクセル操作フォームEx
エクセル操作フォームEx   参考コード類
セルの結合
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010







セルの結合 - Range オブジェクト


結合セルの Range オブジェクトで指定する場合です.
Range オブジェクトの MergeCells プロパティを True にすると結合します.


図1
実行画面

リスト1 
procedure TplExcelFormEx1.Button1Click(Sender: TObject);
var
  ARange : Txlf2000Range;
begin
  ARange := xlfExcelSheet.Cells.Range['B2', 'C5'];
  ARange.MergeCells := True;
end;


R1C1 形式でセル範囲を指定したい場合は,R1C1 形式の値を A1 形式に変換してもいいですが,以下のような方法もあります.このコードは,R2C2 から R5C7 の範囲のセルを結合します.
このサンプルでは結合したセルの行数と列数を取得して表示するコードを追加しています.


図2
実行画面

リスト2 
procedure TplExcelFormEx1.Button2Click(Sender: TObject);
var
  ARange    : Txlf2000Range;
  StartCell : OleVariant;
  FinalCell : OleVariant;
  RowCnt    : Integer;
  ColCnt    : Integer;
  strText   : String;
begin
  StartCell := xlfExcelSheet.Cells.Item[2, 2];
  FinalCell := xlfExcelSheet.Cells.Item[5, 7];

  ARange := xlfExcelSheet.Cells.Range[StartCell, FinalCell];
  ARange.MergeCells := True;

  //指定セルの結合行数と列数を調査
  //調査するセルの指定を1つだけにしないとエラーが発生する
  ARange := xlfExcelSheet.Cells.Range['B2', 'B2'];

  if ARange.MergeCells then begin
    RowCnt  := ARange.MergeArea.Rows.Count;
    ColCnt  := ARange.MergeArea.Columns.Count;
    strText := '結合行数は ' + IntToStr(RowCnt) + ' です' + sLineBreak +
               '結合列数は ' + IntToStr(ColCnt) + ' です';
    MessageBox(Handle, PChar(strText), '結合した行数と列数', MB_ICONINFORMATION);
  end else begin
    strText := 'このセルは結合されていません';
    MessageBox(Handle, PChar(strText), '結合した行数と列数', MB_ICONINFORMATION);
  end;
end;




セルの結合 - 選択状態にしてから結合


結合するセルを選択状態にしてから結合します.


図3
実行画面

リスト3 
procedure TplExcelFormEx1.Button3Click(Sender: TObject);
var
  ARange  : Txlf2000Range;
  RowCnt  : Integer;
  ColCnt  : Integer;
  strText : String;
begin
  ARange := xlfExcelSheet.Cells.Range['B2', 'C5'];
  ARange.Select;
  ARange.MergeCells := True;

  //指定セルの結合行数と列数を調査
  //調査するセルの指定を1つだけにしないとエラーが発生する
  ARange := xlfExcelSheet.Cells.Range['B2', 'B2'];
  if ARange.MergeCells then begin
    RowCnt  := ARange.MergeArea.Rows.Count;
    ColCnt  := ARange.MergeArea.Columns.Count;
    strText := '結合行数は ' + IntToStr(RowCnt) + ' です' + sLineBreak +
               '結合列数は ' + IntToStr(ColCnt) + ' です';
    MessageBox(Handle, PChar(strText), '結合した行数と列数', MB_ICONINFORMATION);
  end else begin
    strText := 'このセルは結合されていません';
    MessageBox(Handle, PChar(strText), '結合した行数と列数', MB_ICONINFORMATION);
  end;
end;




セルの結合 - 選択中のセルを結合


現在選択中のセルを結合します.


リスト4 
procedure TplExcelFormEx1.Button4Click(Sender: TObject);
var
  ARange : Txlf2000Range;
begin
  //選択セルのRangeオブジェクトを取得して結合
  ARange := Txlf2000Range(xlfExcelApp.Selection[0]);
  ARange.MergeCells := True;
end;




セルの結合 - コマンド ID を使用した選択中のセル結合


上と同じく現在選択中のセルを結合します.コマンド ID を使用した方法です.
このコマンド ID は選択中のセルを結合して,文字列の書式を左右中央揃えにします.


リスト5 
procedure TplExcelFormEx1.Button5Click(Sender: TObject);
var
  objCmdBars : OleVariant;
begin
  objCmdBars := xlfExcelApp.CommandBars;
  try
    objCmdBars.FindControl(ID := 402).Execute;
  except
  end;
end;




セルの結合を解除


結合したセルを解除するには,UnMerge メソッドを実行します.下のコードは,結合したセルを 2 秒後に結合を解除します.


リスト6 
procedure TplExcelFormEx1.Button1Click(Sender: TObject);
var
  ARange : Txlf2000Range;
begin
  ARange := xlfExcelSheet.Cells.Range['B2', 'C5'];
  ARange.MergeCells := True;

  Sleep(2000);
  ARange.UnMerge;
end;