コミュニティでの活動の履歴として、自身(Orator/魔界の仮面弁士)が掲示板・Mailing List・Newsgroup等へ発言した内容の中で、再利用できそうな物を拾い出して、掲載しています。

« [VB6]USBメモリ等が接続されたことを知る方法 | Main | [.NET]AxMSHFlexGridでMouseWheelイベントを実装 »
[VB6]列番号をExcelの列名形式に変更 / 2008年02月16日(土)

自然数を、Excel の(A1方式の)列名に変更するサンプルです。


幾つかのサイトで同様の物を見つけたのですが、「702列目(ZZ)」までは正常なのに、「703列目(AAA)」以上になると、正しい結果を返さない物が目立っていたので、作ってみました。

Public Function GetColumnName(ByVal ColIndex As Long) As String
	Const KEY As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	Dim length As Long
	length = Len(KEY)

	Dim num As Long, keta As Long, n As Long
	num = ColIndex
	n = 1
	Do Until num < n
		num = num - n
		n = n * length
		keta = keta + 1
	Loop

	Dim i As Long
	For i = 1 To keta
		n = n \ length
		GetColumnName = GetColumnName & Mid(KEY, (num \ n) + 1, 1)
		num = num Mod n
	Next
End Function

列名と列番号の対応表
列名番号備考
A1
B2
Z26
AA27
AZ52
BA53
IV256Excel 2003(Excel 2004:mac)までの最大列数
ZZ702
AAA703
XFD16,384Excel 2007(Excel 2008:mac)での最大列数
ZZZ18,278
AAAA18,279
ZZZZ475,254
AAAAA475,255
ZZZZZ12,356,630
AAAAAA12,356,631
ZZZZZZ321,272,406この関数がサポートする最大列数
Posted at 18:15 / Visual Basic / この記事のURL
コメント(1)
この記事のURL
http://yaplog.jp/orator/archive/77
コメントする
名前:
Email:
URL:
クッキーに保存
小文字 太字 斜体 下線 取り消し線 左寄せ 中央揃え 右寄せ テキストカラー リンク 絵文字

コメント

私、2004年11月12日に mixi で書いているんですけど。(^^;)
Public Function Xlex(ByVal TargetDec As Long) As String
  Dim iDigit As Long
  
  Xlex = ""
  If TargetDec <= 0 Then Exit Function
  
  Do
    iDigit = TargetDec Mod 26
    TargetDec = TargetDec \ 26
    
    If iDigit = 0 Then
      TargetDec = TargetDec - 1
    End If
    
    Xlex = Mid("ZABCDEFGHIJKLMNOPQRSTUVWXY", iDigit + 1, 1) & Xlex
  Loop Until (TargetDec = 0)
End Function

100 万まで試して一致。速度的には 1 万回で 0.24 と 0.22 で私の勝ち。(^▽^)
Posted by:藤代千尋 at 2008年02月28日(木) 23:00

P R

Microsoft Most Valuable Professional, Visual Developer - Visual BasicMSMVP for Visual Basic

   
Global Media Online INC.