Excel列標與列號轉換

2021-09-25 01:31:50 字數 2803 閱讀 6110

熟悉excel操作的使用者都知道在工作表中列標題有列標(字母形式)和列號(數字形式)兩種,如下圖所示。

cells的第二個引數,即可以使用數字列號,也可以使用列標字母,然而對於range來說引數為字串,也就是使用列標形式。

cells(6,3)

cells(6,"c")

range("c6")

在**中使用變數的示例。

strcol = "c"

intcol = 3

cells(6, intcol)

cells(6, strcol)

range(strcol & "6")

在vba**靈活選擇單元格的引用形式,將使得**簡潔高效。某些場景中,可能還是需要實現列標和列號的轉換,此時可以使用自定義函式。

列標字母編號由單個字母開始a,b,c,…,z,之後為aa,ab,…,zz,接下來為aaa,aab,…,xfd,可以看作是26進製編碼的表示形式,和其他的進製轉換類似,也是採用除以26取餘數的方式進行計算,此處需要額外多一步的處理是,對於餘數要轉換為字母形式。

列號轉列標的自定義函式**如下。

function num2name1(byval colnum as long) as string

dim i as long

dim intmod as integer

num2name1 = ""

i = colnum

do while i > 0

intmod = iif(i \ 26 = i / 26, 26, i mod 26)

num2name1 = chr$(intmod + 64) + num2name1

i = (i - intmod) / 26

loop

end function

【**解析】

第7行**判斷迴圈變數i是否可以被26整除,如果可以,那麼intmod賦值為26,否者賦值為餘數。

第8行**使用chr函式將1~26的數字轉換為大小字母,並和前面步驟已經得到的結果組合為新的字串。

第9行**獲得下一次迴圈需要處理的數字,如果i<=0,則終止迴圈。

列標轉列號的方法是上述的逆運算,自定義函式**如下。

function name2num1(byval colname as string) as long

dim i as integer

dim intlen as integer

name2num1 = 0

intlen = len(colname)

if intlen > 0 then

colname = ucase$(colname)

for i = 1 to intlen

name2num1 = name2num1 + (asc(mid(colname, i, 1)) - 64) * 26 ^ (intlen - i)

next i

end if

end function

【**解析】

第5行**獲取列標字串的長度。

第7行**將列標轉換為大寫字母。

第9行**中使用mid函式逐位讀取列標字元,使用asc函式轉換為ascii碼,減去64實現了將字母變換為1~26的陣列序列,根據所在位置不同,乘以26 ^ (intlen - i)轉換為相應的數值進行累加。

使用如下**可以測試兩個自定義函式的結果。

sub demo()

debug.print name2num1("xfd")

debug.print num2name1(16384)

end sub

上述兩個自定義過程利用進製原理轉換實現了列標和列號的轉換,但是在vba中靈活利用物件的屬性可以更簡潔的實現這個功能。

function num2name(byval colnum as long) as string

num2name = ""

on error resume next

num2name = split(cells(1, colnum).address, "$")(1)

end function

【**解析】

第4行**使用cells(1, colnum).address獲取列號為colnum的列中第乙個單元格的絕對引用位址(例如:$abc$1),split函式使用$作為分隔符將絕對引用位址拆分具有3個元素的陣列(下標從零開始),第2個元素為列標。

function name2num(byval colname as string) as long

name2num = 0

on error resume next

name2num = cells(1, colname).column

end function

【**解析】

第4行**使用使用單元格的column返回列號。

Excel裡數字列號轉換為字元標籤列

在進行資料庫匯出到excel時,常會用到將列,如 第1列轉換為 a,第2列轉換為 b 的情況。這時你就要寫演算法了。哈哈,我這裡有現成的了。先上 後解析。function celltoref const x,y integer string function getref const x integ...

PHP序號轉Excel列號A IV

在轉出excel的時候需要把序號轉換為excel的列值,a,aa ab等,一直到iv,為什麼到iv呢?因為iv的序號是256是2的10次方。function getexcelcolumn index if a1 0 s chr 64 yu return s echo index s 記得不要超過25...

Golang 數字轉換為Excel列A Z

具體需求為匯出excel時,資料只能行數與列數只能為數字,因此在修改制定單元格時無法直觀的定位,要麼修改固定的單元格,要麼就只能通過特殊標識來循壞獲取單元格之後進行修改。或者通過excel工具包中的addrow或者addcell來插入資料。通過以下兩種方法 遞迴和for迴圈 可以做到以下格式的轉換 ...