UFO ET IT

열 이름의 Excel 열 번호

ufoet 2020. 11. 16. 23:18
반응형

열 이름의 Excel 열 번호


Excel 매크로를 사용하여 Excel의 열 이름에서 열 번호를 얻는 방법은 무엇입니까?


이걸 원하는 것 같아요?

열 이름에서 열 번호로

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

후속 조치

맨 위에 급여 필드가있는 경우 C (1,1) 셀에서 파일을 변경하고 급여 열을 다른 곳으로 이동하면 F (1,1)이라고 말하면 코드를 수정해야합니다. 코드가 Salary를 확인하고 열 번호를 찾은 다음 해당 열 번호에 따라 나머지 작업을 수행하기를 원합니다.

이 경우 .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

스냅 사진

여기에 이미지 설명 입력


VBA 솔루션을 찾고있는 동안 공식 솔루션을 찾을 때 Google에서 최고의 결과를 얻었으므로 여기에 온 모든 사람을 위해 다음과 같이 추가하겠습니다.

열 문자에서 숫자 를 반환하는 Excel 수식 (위의 @A. Klomp의 주석), 여기서 셀 A1에는 열 문자가 있습니다.

= column (indirect (A1 & "1"))

간접 함수는 휘발성이므로 셀이 변경 될 때마다 다시 계산되므로 이러한 함수가 많으면 통합 문서 속도가 느려질 수 있습니다. 65에서 'A'로 시작하는 ASCII 문자의 번호를 제공하는 'code'함수와 같은 다른 솔루션을 고려하십시오. 이렇게하려면 열 이름에 몇 자릿수가 있는지 확인해야합니다. 'A', 'BB'또는 'CCC'에 따라 결과를 변경합니다.

Excel formula to return the column letter from a number (From this previous question How to convert a column number (eg. 127) into an excel column (eg. AA), answered by @Ian), where A1 holds your column number:

=substitute(address(1,A1,4),"1","")

Note that both of these methods work regardless of how many letters are in the column name.

Hope this helps someone else.


Write and run the following code in the Immediate Window

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

For example ?cells(,"BYL").column will return 2014. The code is case-insensitive, hence you may write ?cells(,"byl").column and the output will still be the same.


You could skip all this and just put your data in a table. Then refer to the table and header and it will be completely dynamic. I know this is from 3 years ago but someone may still find this useful.

Example code:

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

You can also use :

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

You can even use this reference system in worksheet formulas as well. Its very dynamic.

Hope this helps!


Based on Anastasiya's answer. I think this is the shortest vba command:

Option Explicit

Sub Sample()
    Dim sColumnLetter as String
    Dim iColumnNumber as Integer

    sColumnLetter = "C"
    iColumnNumber = Columns(sColumnLetter).Column

    MsgBox "The column number is " & iColumnNumber
End Sub

Caveat: The only condition for this code to work is that a worksheet is active, because Columns is equivalent to ActiveSheet.Columns. ;)


Here's a pure VBA solution because Excel can hold joined cells:

Public Function GetIndexForColumn(Column As String) As Long
    Dim astrColumn()    As String
    Dim Result          As Long
    Dim i               As Integer
    Dim n               As Integer

    Column = UCase(Column)
    ReDim astrColumn(Len(Column) - 1)
    For i = 0 To (Len(Column) - 1)
        astrColumn(i) = Mid(Column, (i + 1), 1)
    Next
    n = 1
    For i = UBound(astrColumn) To 0 Step -1
        Result = (Result + ((Asc(astrColumn(i)) - 64) * n))
        n = (n * 26)
    Next
    GetIndexForColumn = Result
End Function

Basically, this function does the same as any Hex to Dec function, except that it only takes alphabetical chars (A = 1, B = 2, ...). The rightmost char counts single, each char to the left counts 26 times the char right to it (which makes AA = 27 [1 + 26], AAA = 703 [1 + 26 + 676]). The use of UCase() makes this function case-insensitive.


In my opinion the simpliest way to get column number is:
Sub Sample() ColName = ActiveCell.Column MsgBox ColName End Sub

참고 URL : https://stackoverflow.com/questions/10106465/excel-column-number-from-column-name

반응형