Delphi Programming / Object Pascal

[掲載 2020年10月14日] [更新 2020年10月14日] エクセル操作フォームEx |
エクセル操作フォームEx 参考コード類
A1 形式のセル番地と行番号と列番号 |
| 動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010 |
|
セルの指定には主に 'A12' 等の A1 形式の文字列を使用します。Cells プロパティを使用して行番号と列番号を使用した方が便利なことがあります。
エクセル操作フォームEx には、A1 形式のセルの番地から行番号と列番号を取得するメソッドを用意していますが、以下のような関数を作成して処理することもできます。
以下の関数で扱える列数は 702 までです。これは、A1 形式の ZZ に相当します。ただし、Excel 2010 のシートで扱える列数は 256 までです。A1 形式では IV になります。
Excel 2010 のシートで扱える最大行数は 65536 です。この値は、符号なし 16 ビット整数型 (UInt16 等) の最大値に 1 を加算した値です。エクセルのシートの行番号は 1 からです。符号なし整数値の最小値は 0 です。そのため 1 つだけ大きな値になっています。
|
//---------------------------------------------------------------------------
// セルの番地の行番号と列番号からA1形式に変換
// ACol の値が 702 以下に限る
//---------------------------------------------------------------------------
function ToA1Value(ARow, ACol: Integer): string;
var
LOrdA : Integer;
Ldiv : Integer;
LMod : Integer;
begin
LOrdA := Ord('A');
Ldiv := ACol div 26;
if Ldiv = 0 then begin
Result := Chr(ACol + LOrdA - 1) + IntToStr(ARow);
end else begin
LMod := ACol mod 26;
Result := Chr(Ldiv + LOrdA - 1) + Chr(LMod + LOrdA - 1) + IntToStr(ARow);
end;
end;
//---------------------------------------------------------------------------
// セルの番地をA1形式からR1C1形式の行番号と列番号に変換
// A1 の最初と 2 番目の文字が A から Z の場合に限る
//---------------------------------------------------------------------------
function ToR1C1Value(A1: string): TPoint;
var
LOrdA : Integer;
LIdx : Integer;
begin
LOrdA := Ord('A');
LIdx := 2;
Result.X := Ord(A1[1]) - LOrdA + 1;
if (A1[2] >= 'A') and (A1[2] <= 'Z') then begin
Result.X := Result.X * 26 + Ord(A1[2]) - LOrdA + 1;;
LIdx := 3;
end;
Result.Y := StrToInt(Copy(A1, LIdx, Length(A1) - (LIdx - 1)));
end;
|