누구든지 숫자에서 열 문자를 반환 할 수있는 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
Returns .
열 문자 만 반환하려면 :Split((Columns(
Column Index
).Address(,0)),":")(0)
- 예를 들어,
MsgBox Split((Columns( 2734 ).Address(,0)),":")(0)
Returns .
답변
이 작업을 수행하는 또 다른 방법입니다. Brettdj의 대답 은 이것을 생각하게 만들었지만이 방법을 사용하면 변형 배열을 사용할 필요가 없으므로 문자열로 직접 이동할 수 있습니다.
ColLtr = Cells(1, ColNum).Address(True, False)
ColLtr = Replace(ColLtr, "$1", "")
또는 이것으로 조금 더 작게 만들 수 있습니다.
ColLtr = Replace(Cells(1, ColNum).Address(True, False), "$1", "")
이것은 셀 객체에서 행 1을 참조하는 것에 달려 있습니다.
답변
그리고 재귀를 사용하는 솔루션 :
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
답변
이것은 공식을 사용하여 사용할 수 있습니다.
=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