▼ TSさん、こんちには。どうもです。
>Selection.CurrentRegion.Select
こんなのがあったのですね。知りませんでした。
yumapaさん、エクセル操作フォームの上でということで、いろいろコード
を書いてみましたので参考にして下さい。
//=============================================================================
// 選択範囲の範囲を取得 その1 個別に列番号と行番号を求める
//=============================================================================
procedure TplExcelForm2.Button2Click(Sender: TObject);
var
ARange : OleVariant;
Col1 : Integer;
Col2 : Integer;
Row1 : Integer;
Row2 : Integer;
i1 : Integer;
i2 : Integer;
AreaStr : String;
begin
//表示中のシートの選択範囲
ARange :=ExcelApp.Selection[0];
//左上と右下のセルの列と行を取得
Col1 := ARange.Column;
Col2 := ARange.Columns.Count-1+Col1;
Row1 := ARange.Row;
Row2 := ARange.Rows.Count-1+Row1;
//セル番地
i1 := Ord('A')+Col1-1;
i2 := Ord('A')+Col2-1;
AreaStr := Chr(i1)+IntToStr(Row1)+':'+Chr(i2)+IntToStr(Row2);
//確認表示
ShowMessage(AreaStr);
end;
//=============================================================================
// 選択範囲の範囲を取得 その2 Addressプロパティ使用
//=============================================================================
procedure TplExcelForm2.Button3Click(Sender: TObject);
var
ARange : OleVariant;
AreaStr : String;
begin
//表示中のシートの選択範囲
ARange:=ExcelApp.Selection[0];
//確認表示
AreaStr:=ARange.Address;
AreaStr:=StringReplace(AreaStr,'$','',[rfReplaceAll]);
ShowMessage(AreaStr);
end;
//=============================================================================
// データのある範囲を取得 その1 個別に列番号と行番号を求める
// データがあるどれかのセルがアクティブであれば、その範囲全体を知ることが可能
//=============================================================================
procedure TplExcelForm2.Button4Click(Sender: TObject);
var
ARange : OleVariant;
Col1 : Integer;
Col2 : Integer;
Row1 : Integer;
Row2 : Integer;
i1 : Integer;
i2 : Integer;
AreaStr : String;
begin
//選択中の範囲
ARange:=ExcelApp.Selection[0];
//データのある領域全体を選択状態にする
ARange.CurrentRegion.Select;
//左上と右下のセルの列と行を取得
Col1 := ARange.CurrentRegion.Column;
Col2 := ARange.CurrentRegion.Columns.Count-1+Col1;
Row1 := ARange.CurrentRegion.Row;
Row2 := ARange.CurrentRegion.Rows.Count-1+Row1;
//セル番地
i1 := Ord('A')+Col1-1;
i2 := Ord('A')+Col2-1;
AreaStr := Chr(i1)+IntToStr(Row1)+':'+Chr(i2)+IntToStr(Row2);
//確認表示
ShowMessage(AreaStr);
end;
//=============================================================================
// データのある範囲を取得 その2 Addressプロパティ使用
// データがあるどれかのセルがアクティブであれば、その範囲全体を知ることが可能
//=============================================================================
procedure TplExcelForm2.Button5Click(Sender: TObject);
var
ARange : OleVariant;
AreaStr : String;
begin
//選択中の範囲
ARange:=ExcelApp.Selection[0];
//データのある領域全体を選択状態にする
ARange.CurrentRegion.Select;
//確認表示
AreaStr:=ARange.CurrentRegion.Address;
AreaStr:=StringReplace(AreaStr,'$','',[rfReplaceAll]);
ShowMessage(AreaStr);
end;
//=============================================================================
// 選択範囲を印刷範囲として設定
// セル番地を個別に求める方法とCurrentRegionプロパティを使用する方法は省略
//=============================================================================
procedure TplExcelForm2.Button6Click(Sender: TObject);
var
ARange : OleVariant;
AreaStr : String;
begin
//表示中のシートの選択範囲
ARange :=ExcelApp.Selection[0];
AreaStr:=ARange.Address;
if Pos(':',AreaStr)<>0 then begin
//その範囲を印刷範囲とする
ExcelSheet.PageSetup.PrintArea:=AreaStr;
end;
end;
また、ブックに以下のマクロを登録しておけば、このブックを開いた時に
設定されている印刷範囲を選択状態にします。
Sub Auto_Open()
Dim AArea As String
AArea = ""
AArea = ActiveSheet.PageSetup.PrintArea
If AArea <> "" Then
Range(AArea).Select
Else
MsgBox "印刷範囲は設定されていません。"
End If
End Sub
|