열 번호를 문자로 변환하는 기능?
숫자에서 열 문자를 반환할 수 있는 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
반환한다.
열 문자만 반환하려면: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
:
업데이트 종료
이하의 기능은, 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를 합니다.$
두 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어, 어.$
됩니다.InStr
2번으로 하다
이렇게 하면 가능한 열의 전체 범위에 적응할 수 있다는 이점이 있습니다.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()
그리고.If
1 ~ 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
'programing' 카테고리의 다른 글
Mac OS X 클립보드에 bash 출력을 캡처하려면 어떻게 해야 합니까? (0) | 2023.04.20 |
---|---|
MessageBox에서 메시지 복사를 허용하는 방법 (0) | 2023.04.20 |
최적의 WPF 오픈 소스 프로젝트 (0) | 2023.04.20 |
WPF - 명령어가 명령어 바인딩을 통해 'CanExecute'를 재평가하도록 강제하는 방법 (0) | 2023.04.20 |
Powershell 스크립트 파라미터 도움말메시지를 표시하려면 어떻게 해야 하나요? (0) | 2023.04.20 |