Mencari Nama Kolom Excel dari Nomor Urut Kolom (How to convert a column number (eg. 127) into an excel column (eg. AA))

by A Rahman

Lagi mau bikin program export ke excel dari suatu tabel yang kolomnya banyak pakai OLE, awalnya menemui kesulitan menentukan judul kolomnya dari nomor urut kolom tertentu.

Untunglah menemukan pembahasan “How to convert a column number into an excel column” di stackoverflow.

Fungsi aslinya dalam VBA seperti ini :

Function GetColumnName(colNum As Integer) As String     
Dim d As Integer     
Dim m As Integer     
Dim name As String     
d = colNum     
name = ""     
Do While (d > 0)         
 m = (d - 1) Mod 26         
 name = Chr(65 + m) + name         
 d = Int((d - m) / 26)     
 Loop     
 GetColumnName = name 
End Function

Akhirnya aku coba convert ke Delphi dan aku coba dengan program test kecil, lumayan bisa jalan.  Source lengkapnya yang sudah aku buat seperti di bawah  ini.  O iya ini program aku bikin pakai Delphi XE2, makanya di bagian usesnya ada sedikit perbedaan.

unit FormGetColumnNameExcel;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,system.Math;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    edNumber: TEdit;
    Label1: TLabel;
    bGetColumn: TBitBtn;
    procedure bGetColumnClick(Sender: TObject);
  private
    { Private declarations }
    Function GetColumnName(colNum:Integer):String;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.bGetColumnClick(Sender: TObject);
var i:integer;
begin
  memo1.Lines.Clear;
  for I := 0 to strtoint(edNumber.Text) do
    Memo1.Lines.Add(GetColumnName(i+1));

end;

function TForm1.GetColumnName(colNum: Integer): String;
var
   d       : Integer;
   m,hasil : word;

   name: String;
begin
    d    := colNum;
    name := '';
     While (d > 0) do
     begin
        DivMod(d-1,26,hasil,m);
        name := chr( 65+m)+name;
        d    := trunc((d-m)/26);
     end;
   result:=name;
end;

end.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s