确定最后一列的更好方法

时间:2017-08-24 17:52:05

标签: excel vba excel-vba

我希望有更好的方法来确定不同范围内最后一列的名称。

    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

3 个答案:

答案 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