Vba 确定最后一列的更好方法

Vba 确定最后一列的更好方法,vba,excel,Vba,Excel,我希望有更好的方法来确定不同范围内最后一列的名称 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

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

    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
结尾,感谢您的指导。这就是我想到的

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
我每次碰到这个问题都会用它。避免使用xlRight,因为如果中间有一个空白列,它将不会到达末尾。相反,转到电子表格中的最大值并使用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

此代码段返回alpha列名称

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

问题是为什么需要alpha列值?如果要在以后的代码中使用,则可以跳过该选项,并将列索引号与范围对象
Cells()
@ScottCraner一起使用,而不是确定是否执行If语句,alpha没有其他用途。您如何处理变量
fConvertToLetter
也许您应该看看这一点,找到一种将列索引转换为alpha列名的简单方法。继续读下去,标题有误导性!这两种方法都可以处理。如果将alpha列名输入到
if
语句中,请提供一个示例。这就是需要解决的问题。如果要在以下范围内使用
lcolName
(lcolName&“2:”&lcolName&“100”),我仍然会质疑您将如何处理
lcolName
,这是最慢的方法。一个简单的
范围(单元格(2,lcol),单元格(100,lcol)
更快,并且不需要额外的时间来转换。Excel将字母列转换为数字,因此您将从数字转换为字母,然后Excel将其转换回,跳过此操作并节省一些成本。您也可以使用
lcol=Range(“A7”)。结束(xlToRight).Column
以获取列count@ScottCraner我使用它的范围如下:
range(“C”和(12*x-3)和“&lcolName和(12*x-3))
然后
范围(单元格(12*x-3,3),单元格(12*x-3,lcol))
更快,不需要解析和转换。
结束(xltoright)).columns.count如果没有spaces@ScottCraner我已经更新了答案,以包括解决方案的两个部分-查找动态范围的列编号以及将数字转换为列字母。