Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2020年10月14日] [更新 2020年10月14日] エクセル操作フォームEx
   
エクセル操作フォームEx   参考コード類
A1 形式のセル番地と行番号と列番号
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010







A1 形式のセル番地と行番号と列番号


セルの指定には主に 'A12' 等の A1 形式の文字列を使用します.Cells プロパティを使用して行番号と列番号を使用した方が便利なことがあります.
エクセル操作フォームEx には,A1 形式のセルの番地から行番号と列番号を取得するメソッドを用意していますが,以下のような関数を作成して処理することもできます.
以下の関数で扱える列数は 702 までです.これは,A1 形式の ZZ に相当します.ただし,Excel 2010 のシートで扱える列数は 256 までです.A1 形式では IV になります.

Excel 2010 のシートで扱える最大行数は 65536 です.この値は,符号なし 16 ビット整数型 (UInt16 等) の最大値に 1 を加算した値です.エクセルのシートの行番号は 1 からです.符号なし整数値の最小値は 0 です.そのため 1 つだけ大きな値になっています.



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