programing

열 번호를 문자로 변환하는 기능?

telecom 2023. 4. 20. 20:02
반응형

열 번호를 문자로 변환하는 기능?

숫자에서 열 문자를 반환할 수 있는 Excel VBA 기능을 가진 사람이 있습니까?

예를 들어 100을 입력하면CV.

이 함수는 지정된 열 번호의 열 문자를 반환합니다.

Function Col_Letter(lngCol As Long) As String
    Dim vArr
    vArr = Split(Cells(1, lngCol).Address(True, False), "$")
    Col_Letter = vArr(0)
End Function

열 100에 대한 테스트 코드

Sub Test()
    MsgBox Col_Letter(100)
End Sub

범위 개체를 사용하지 않는 경우:

Function ColumnLetter(ColumnNumber As Long) As String
    Dim n As Long
    Dim c As Byte
    Dim s As String

    n = ColumnNumber
    Do
        c = ((n - 1) Mod 26)
        s = Chr(c + 65) & s
        n = (n - c) \ 26
    Loop While n > 0
    ColumnLetter = s
End Function

나에게 효과가 있는 것은 다음과 같습니다.

Cells(Row,Column).Address 

그러면 $AE$1 형식의 참조가 반환됩니다.

아무도 제안하지 않았다니 놀랍군

  • 예를 들어 다음과 같습니다. MsgBox Columns( 9347 ).Address 반환한다$MUM: $MUM.

열 문자반환하려면:Split((Columns(Column Index).Address(,0)),":")(0)

  • 예를 들어 다음과 같습니다. MsgBox Split((Columns( 2734 ).Address(,0)),":")(0) 반환한다아빠..

  기타 예


또한 재귀적인 솔루션을 사용할 수 있습니다.

Function ColumnNumberToLetter(iCol As Long) As String

    Dim lAlpha As Long
    Dim lRemainder As Long

    If iCol <= 26 Then
        ColumnNumberToLetter = Chr(iCol + 64)
    Else
        lRemainder = iCol Mod 26
        lAlpha = Int(iCol / 26)
        If lRemainder = 0 Then
            lRemainder = 26
            lAlpha = lAlpha - 1
        End If
        ColumnNumberToLetter = ColumnNumberToLetter(lAlpha) & Chr(lRemainder + 64)
    End If

End Function

한 가지 방법만 더 있으면 돼Brettdj의 답변에 의해 이 방법이 생각났지만, 이 방법을 사용하면 배리언트 어레이를 사용할 필요가 없어 스트링으로 바로 이동할 수 있습니다.

ColLtr = Cells(1, ColNum).Address(True, False)
ColLtr = Replace(ColLtr, "$1", "")

아니면 이걸로 좀 더 콤팩트하게 만들 수도 있고

ColLtr = Replace(Cells(1, ColNum).Address(True, False), "$1", "")

이는 셀 객체의 행 1을 참조하는 것에 따라 달라집니다.

이것은 다음 식을 사용하여 사용할 수 있습니다.

=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")

따라서 요청에 따라 VBA 함수로 작성할 수도 있습니다.

Function ColName(colNum As Integer) As String
    ColName = Split(Worksheets(1).Cells(1, colNum).Address, "$")(1)
End Function

이것은 루프가 아닌 재귀(recursion)를 사용한 Robartsd의 답변(Jan Wijninckx의 한 줄 솔루션 맛)의 버전입니다.

Public Function ColumnLetter(Column As Integer) As String
    If Column < 1 Then Exit Function
    ColumnLetter = ColumnLetter(Int((Column - 1) / 26)) & Chr(((Column - 1) Mod 26) + Asc("A"))
End Function

다음과 같은 정보를 사용하여 테스트했습니다.

1   => "A"
26  => "Z"
27  => "AA"
51  => "AY"
702 => "ZZ"
703 => "AAA" 
-1  => ""
-234=> ""

robertsd의 코드는 우아하지만 미래를 대비하기 위해 n의 선언을 long으로 변경합니다.

매크로를 피하기 위한 공식을 원하는 경우 702열까지 사용할 수 있는 것이 있습니다.

=IF(A1>26,CHAR(INT((A1-1)/26)+64),"")&CHAR(MOD(A1-1,26)+65)

여기서 A1은 문자로 변환할 열 번호를 포함하는 셀입니다.

최신 업데이트: 아래 기능은 무시해 주세요.@SurasinTancharoen은 이 기능이 고장났다는 것을 경고할 수 있었습니다.n = 53.
있는 , 또 .n = 200:

특정 값

@brettdj @brettdj bb용 。Microsoft Excel microsoft microsoft microsoft microsoft microsoft microsoft microsoft microsoft 。16384 주어야 한다XFD

여기에 이미지 설명 입력

업데이트 종료


이하의 기능은, Microsoft 가 제공하고 있습니다.

Function ConvertToLetter(iCol As Integer) As String
   Dim iAlpha As Integer
   Dim iRemainder As Integer
   iAlpha = Int(iCol / 27)
   iRemainder = iCol - (iAlpha * 26)
   If iAlpha > 0 Then
      ConvertToLetter = Chr(iAlpha + 64)
   End If
   If iRemainder > 0 Then
      ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
   End If
End Function

출처: Excel번호를 알파벳 문자로 변환하는 방법

적용 대상

  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition

위의 @Damien Fennelly의 답변을 바탕으로 한 기능입니다.나에게 엄지손가락을 치켜세우면 그에게도 엄지손가락을 치켜세워라!p

Function outColLetterFromNumber(iCol as Integer) as String
    sAddr = Cells(1, iCol).Address
    aSplit = Split(sAddr, "$")
    outColLetterFromNumber = aSplit(1)
End Function

엑셀을 사용하다Range.Cells.Address 성, 음, 음, 다, 다, 다, 다, property, property, property.

strCol = Cells(1, lngRow).Address(xlRowRelative, xlColRelative)

그러면 행 1에 있는 원하는 열의 주소가 반환됩니다.에서 가져가세요.1:

strCol = Left(strCol, len(strCol) - 1)

매우 빠르고 강력하여 존재하는 열 주소를 반환할 수 있습니다.

★★★lngRow를 컬럼 에 대응합니다.Selection.Column속!!

여기 사용할 수 있는 간단한 라이너가 있습니다.

ColumnLetter = Mid(Cells(Row, LastColA).Address, 2, 1)

1글자 열 지정에만 사용할 수 있지만 간단한 경우에는 적합합니다.2글자만 사용할 경우 다음을 사용할 수 있습니다.

ColumnLetter = Mid(Cells(Row, LastColA).Address, 2, 2)

이것은 X행의 Y열에 있는 셀의 코드 행에 있는 열에 관계없이 동작합니다.

Mid(Cells(X,Y).Address, 2, instr(2,Cells(X,Y).Address,"$")-2)

정의된 이름이 "Cellname"인 셀이 있는 경우:

Mid(Cells(1,val(range("Cellname").Column)).Address, 2, instr(2,Cells(1,val(range("Cellname").Column)).Address,"$")-2)

이 파티에는 늦었지만 어레이와 관련되지 않은 다른 누구도 다루지 않은 또 다른 답변을 드리고 싶습니다.간단한 문자열 조작으로 할 수 있습니다.

Function ColLetter(Col_Index As Long) As String

    Dim ColumnLetter As String

    'Prevent errors; if you get back a number when expecting a letter, 
    '    you know you did something wrong.
    If Col_Index <= 0 Or Col_Index >= 16384 Then
        ColLetter = 0
        Exit Function
    End If

    ColumnLetter = ThisWorkbook.Sheets(1).Cells(1, Col_Index).Address     'Address in $A$1 format
    ColumnLetter = Mid(ColumnLetter, 2, InStr(2, ColumnLetter, "$") - 2)  'Extracts just the letter

    ColLetter = ColumnLetter
End Sub

이 " " " " 형식으로 된 후$A$1을합니다.Mid 함수는 첫 번째 부터 시작하여 첫 번째 인 2를 합니다.$두 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어.$됩니다.InStr2번으로 하다

이렇게 하면 가능한 열의 전체 범위에 적응할 수 있다는 이점이 있습니다.therefore그 、ColLetter(1)'와 'A'가됩니다.ColLetter(16384)XFD가 반환됩니다.XFD Excel입니다.

열 이름을 쉽게 얻을 수 있는 방법

Sub column()

cell=cells(1,1)
column = Replace(cell.Address(False, False), cell.Row, "")
msgbox column

End Sub

도움이 되었으면 좋겠네요=)

brettdj의 솔루션은 훌륭하게 기능합니다만, 저와 같은 이유로 이 솔루션을 잠재적인 솔루션으로 생각하신다면, 저는 다른 솔루션을 제안하고 싶다고 생각했습니다.

MATCH() 함수의 출력에 따라 특정 컬럼으로 스크롤하는 문제가 있었습니다.열 번호를 병렬로 변환하는 대신 참조 스타일을 일시적으로 A1에서 R1C1로 전환했습니다.이렇게 하면 VBA 기능을 조작하지 않고도 컬럼 번호까지 스크롤할 수 있습니다.두 기준 스타일을 쉽게 전환하기 위해 다음 VBA 코드를 사용할 수 있습니다.

Sub toggle_reference_style()

If Application.ReferenceStyle = xlR1C1 Then
  Application.ReferenceStyle = xlA1
Else
  Application.ReferenceStyle = xlR1C1
End If

End Sub

응답에 대해 컬럼 .brettdj 입니다.열 번호 입력을 생략하면 함수에 호출하는 셀의 열 문자가 반환됩니다. 것을 있습니다.ColumnLetter(COLUMN())하지만 똑똑하게 이해할 수 있으면 좋겠다고 생각했습니다.

Public Function ColumnLetter(Optional ColumnNumber As Long = 0) As String
    If ColumnNumber = 0 Then
        ColumnLetter = Split(Application.Caller.Address(True, False, xlA1), "$")(0)
    Else
        ColumnLetter = Split(Cells(1, ColumnNumber).Address(True, False, xlA1), "$")(0)
    End If
End Function

이 함수의 단점은 brettdj의 답변보다 매우 약간 느릴 수 있다는 것입니다. 왜냐하면,IF테스트입니다. 하지만 이 기능은 매우 많은 시간 동안 반복적으로 사용한다면 느낄 수 있습니다.

여기 늦은 답변이 있습니다.단순한 접근방식으로Int()그리고.If1 ~ 3 문자 열의 경우:

Function outColLetterFromNumber(i As Integer) As String

    If i < 27 Then       'one-letter
        col = Chr(64 + i)
    ElseIf i < 677 Then  'two-letter
        col = Chr(64 + Int(i / 26)) & Chr(64 + i - (Int(i / 26) * 26))
    Else                 'three-letter
        col = Chr(64 + Int(i / 676)) & Chr(64 + Int(i - Int(i / 676) * 676) / 26)) & Chr(64 + i - (Int(i - Int(i / 676) * 676) / 26) * 26))
    End If

    outColLetterFromNumber = col

End Function
Function fColLetter(iCol As Integer) As String
  On Error GoTo errLabel
  fColLetter = Split(Columns(lngCol).Address(, False), ":")(1)
  Exit Function
errLabel:
  fColLetter = "%ERR%"
End Function

여기 파스칼(델파이)의 간단한 함수가 있습니다.

function GetColLetterFromNum(Sheet : Variant; Col : Integer) : String;
begin
  Result := Sheet.Columns[Col].Address;  // from Col=100 --> '$CV:$CV'
  Result := Copy(Result, 2, Pos(':', Result) - 2);
end;

이 공식은 범위(, A1)에 기반한 열을 제공합니다. 여기서 범위는 단일 셀입니다.멀티 셀 범위가 지정되면 왼쪽 상단 셀이 반환됩니다.두 셀 참조는 같아야 합니다.

MID(CELL("주소", A1", 2, SEARCH("$", CELL("주소", A1), 2)-2)

구조:

CELL("property","range")은 사용되는 속성에 따라 범위의 특정 값을 반환합니다.이 경우 셀 주소주소 속성은 $[col] 값을 반환합니다.$[row], 즉 A1 -> $A$1 입니다.MID 함수는 $ 기호 사이의 열 값을 구문 분석합니다.

Sub GiveAddress()
    Dim Chara As String
    Chara = ""
    Dim Num As Integer
    Dim ColNum As Long
    ColNum = InputBox("Input the column number")

    Do
        If ColNum < 27 Then
            Chara = Chr(ColNum + 64) & Chara
            Exit Do
        Else
            Num = ColNum / 26
            If (Num * 26) > ColNum Then Num = Num - 1
            If (Num * 26) = ColNum Then Num = ((ColNum - 1) / 26) - 1
            Chara = Chr((ColNum - (26 * Num)) + 64) & Chara
            ColNum = Num
        End If
    Loop

    MsgBox "Address is '" & Chara & "'."
End Sub

열 번호에서 열 문자를 공식을 사용하여 다음 단계를 통해 추출할 수 있습니다.
1. ADDRESS 공식으로 컬럼 주소를 계산한다.
2. MID 및 FIND 기능을 사용하여 칼럼 문자를 추출합니다.

예:
1. 주소(1000, 1000, 1)
결과 $ALL$1000
2. =MID (F15,2,FIND("$",F15,2)-2)
모든 결과 F15에 스텝1의 결과가 포함되어 있다고 가정합니다.

한 번에 쓸 수 있다
MID(주소(1000, 1000, 1), 2, FIND("$", ADDRESS(1000, 1000, 1), 2)-2)

이것은 REFEDIT만을 위한 것입니다...일반적으로 Uphere 코드 바로 사용 버전...읽기 쉽고 이해하기 쉽다/달러 단위 사용

Private Sub RefEdit1_Change()

    Me.Label1.Caption = NOtoLETTER(RefEdit1.Value) ' you may assign to a variable  var=....'

End Sub

Function NOtoLETTER(REFedit)

    Dim First As Long, Second As Long

    First = InStr(REFedit, "$")                 'first poz of $
    Second = InStr(First + 1, REFedit, "$")     'second poz of $

    NOtoLETTER = Mid(REFedit, First + 1, Second - First - 1)   'extract COLUMN LETTER

End Function

캡 A는 65이므로:

MsgBox Chr(ActiveCell.Column + 64)

검색처: http://www.vbaexpress.com/forum/showthread.php?6103-Solved-get-column-letter

그냥 ASCII 번호로 변환하고 Chr()을 사용하여 문자로 변환하는 것은 어떨까요?

col_letter = Chr(선택).열 + 96)

또 다른 방법이 있습니다.

{

      Sub find_test2()

            alpha_col = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,W,Z" 
            MsgBox Split(alpha_col, ",")(ActiveCell.Column - 1) 

      End Sub

}

언급URL : https://stackoverflow.com/questions/12796973/function-to-convert-column-number-to-letter

반응형