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我已经更新了答案,以包括解决方案的两个部分-查找动态范围的列编号以及将数字转换为列字母。