我希望有更好的方法来确定不同范围内最后一列的名称。
Dim iAlpha As Integer, fAlpha As Integer
Dim iRemainder As Integer, fRemainder As Integer
Dim ConvertToLetter As String
Dim fConvertToLetter As String
iAlpha = Int((DataLength) / 26) '26 for the letters
fAlpha = Int((DataLength + 2) / 26) 'for the average and sd functions, since they start at C not A
iRemainder = DataLength - (iAlpha * 26)
fRemainder = DataLength + 2 - (fAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
If fAlpha > 0 Then
fConvertToLetter = Chr(fAlpha + 64)
End If
If fRemainder > 0 Then
fConvertToLetter = fConvertToLetter & Chr(fRemainder + 64)
End If
此方法适用于我的一个示例,但不适用于另一个示例。它使用的那个有Datalength = 66
,它以BP
结束,因为在数据开始之前有两列。不起作用的示例是Datalength = 120
,其结束时为CZ
。
答案 0 :(得分:0)
感谢您的指导。这就是我提出的。
With Worksheets("Reporting")
Dim lcol As Integer, lcolName As String
lcol = .Range("A7", .Range("A7").End(xlToRight)).Columns.Count
lcolName = Split(Cells(, lcol).Address, "$")(1)
End With
答案 1 :(得分:0)
每次遇到这个问题时,我都会使用this blog post来解决这个问题。避免使用xlRight,因为如果中间有一个空白列,它将无法到达最后。相反,请转到电子表格中的max并使用xlLeft。
编辑:这里有两段代码,第一段将列号转换为其alpha计数器部分,最多为676列。第二个是查找动态范围中最后一列的数值。
Sub findLetter()
Dim colNum As Long
Dim remainder As Long
Dim firstLetter As String
Dim secondLetter As String
Dim columnLetter As String
colNum = 676 'This is the maximum column number with two letters
secondLetter = ""
If Not colNum > 26 Then
firstLetter = Chr(colNum)
Else
remainder = colNum Mod 26
If Not remainder Then remainder = 26 'Allow for Z
firstLetter = Chr(WorksheetFunction.RoundDown(colNum / 26, 0) + 64)
secondLetter = Chr(remainder + 64)
End If
columnLetter = firstLetter & secondLetter
Debug.Print columnLetter
End Sub
这是上述博文中的代码,只是找到最后一列的编号。
Sub FindingLastColumn()
'PURPOSE: Different ways to find the last column number of a range
'SOURCE: www.TheSpreadsheetGuru.com
Dim sht As Worksheet
Dim LastColumn As Long
Set sht = ThisWorkbook.Worksheets("Sheet1")
'Ctrl + Shift + End
LastColumn = sht.Cells(7, sht.Columns.Count).End(xlToLeft).Column
'Using UsedRange
sht.UsedRange 'Refresh UsedRange
LastColumn = sht.UsedRange.Columns(sht.UsedRange.Columns.Count).Column
'Using Table Range
LastColumn = sht.ListObjects("Table1").Range.Columns.Count
'Using Named Range
LastColumn = sht.Range("MyNamedRange").Columns.Count
'Ctrl + Shift + Right (Range should be first cell in data set)
LastColumn = sht.Range("A1").CurrentRegion.Columns.Count
End Sub
答案 2 :(得分:0)
此代码段返回字母列名称
Dim cel As Range
Dim colName As String
Set cel = Range("abc123") ' test cell
colName = Split(Application.Evaluate("=ADDRESS(" & cel.Row & "," & cel.Column & ", 1)"), "$")(1)
Debug.Print colName