2012-04-11 63 views
52

如何使用Excel宏從Excel列名中獲取列號?列名中的Excel列號

+1

有一個看起來這個問題:http://stackoverflow.com/q/22708/390819有一個VBA解決方案有太多 – GolfWolf 2012-04-11 13:05:52

+1

列姓名在信件中還是在標題中? – Fionnuala 2012-04-11 13:16:50

+2

@wolf:這就是OP想要的結果:) – 2012-04-11 13:48:55

回答

130

我想你想要這個?

列名列數

Sub Sample() 
    ColName = "C" 
    Debug.Print Range(ColName & 1).Column 
End Sub 

編輯:也包括你想要什麼

列號列名

Sub Sample() 
    ColNo = 3 
    Debug.Print Split(Cells(, ColNo).Address, "$")(1) 
End Sub 

遵循反向UP

一樣,如果我在最高層的薪水字段允許在小區C(1,1)現在,如果我改變文件和工資柱轉移到其他地方說,F(1說, 1)那麼我將不得不修改代碼,所以我想要代碼來檢查工資並找到列號,然後根據該列號執行其餘的操作。

在這種情況下,我會建議使用.FIND見下

Option Explicit 

Sub Sample() 
    Dim strSearch As String 
    Dim aCell As Range 

    strSearch = "Salary" 

    Set aCell = Sheet1.Rows(1).Find(What:=strSearch, LookIn:=xlValues, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 

    If Not aCell Is Nothing Then 
     MsgBox "Value Found in Cell " & aCell.Address & _ 
     " and the Cell Column Number is " & aCell.Column 
    End If 
End Sub 

快照

enter image description here

+2

+1像往常一樣的細節:) – 2012-04-11 16:24:44

+0

像如果我有工資領域在最頂部讓我們說在單元格C(1,1)現在,如果我改變文件和移動薪金列到其他地方說F(1,1)然後我將不得不修改代碼,所以我想要代碼來檢查薪水和找到列號,然後根據該列號做其餘的操作。 – 2012-04-12 05:53:55

+0

@Paritosh Ahuja:我已更新該帖子。 – 2012-04-12 10:43:12

4

當你正在尋找一個VBA解決方案,這這個例子是我在谷歌尋找公式解決方案時的首要結果,所以我會添加此爲任何人來到這裏像我這樣的人:

Excel公式返回號碼從一個列字母(從@A。上述Klomp的的評論),在單元格A1握着你的列字母(S):

=列(間接(A1 & 「1」))

由於間接作用是揮發性的,它重新計算時任何單元格都會更改,所以如果您有很多這樣的單元格,它可能會減慢您的工作簿。考慮另一種解決方案,例如'code'函數,它給出了ASCII字符的編號,以'A'開始,編號爲65.請注意,要執行此操作,您需要檢查列名稱中有多少個數字,並且根據「A」,「BB」或「CCC」更改結果。

Excel公式從多個返回列字母(從這個前一個問題How to convert a column number (eg. 127) into an excel column (eg. AA),通過@Ian回答),其中A1握着你的列號:

=代用品(地址(1,A1 ,4),「1」,「」)

請注意,無論列名中有多少個字母,這兩種方法都可以工作。

希望這可以幫助別人。

+0

@ExcelHero你錯過了上述觀點 - 在我的解決方案中,單元格A1 *包含* Letter/Number列。您的解決方案硬編碼解決方案將「A」轉換爲1,或1轉換爲「A」。我的版本簡單地展示瞭如何動態地做到這一點(儘管如果你想硬編碼,是的,這也是可能的)。請進去實際嘗試這些,因爲我已經證實他們的工作。 – 2015-08-21 12:24:21

0

你可以跳過所有這些,只是把你的數據放在一個表中。然後參考表格和標題,它將是完全動態的。我知道這是來自3年前,但有人可能仍然覺得這有用。

示例代碼:

Activesheet.Range("TableName[ColumnName]").Copy 

您還可以使用:

activesheet.listobjects("TableName[ColumnName]").Copy 

您可以在工作表中公式甚至利用這個參考系統爲好。它非常有活力。

希望這會有所幫助!

-1

編寫和運行下面的代碼在立即窗口

?cells(,"type the column name here").column 

例如?cells(,"BYL").column將回到2014年的代碼是區分大小寫的,因此您可以寫信?cells(,"byl").column,輸出仍然是相同的。

-1

在我看來,以獲得列數simpliest方法是:
Sub Sample() ColName = ActiveCell.Column MsgBox ColName End Sub