以下所有方法都未能引用最后一列。什么是可行的方法?
例如'Columns(“1:”& llc.Address&“”)。通过'Columns(“E:”& llc&“”)选择。选择are trying to select say
列(“ E:N“)`。但最后一栏是动态的。在一个实例中,它是列N,在宏的另一个应用程序中,它是列AP。
Sub RestorePivtTable()
Set ws = ThisWorkbook.Sheets("sheet1")
llc = ws.Cells(2, ws.Columns.count).End(xlToLeft).Column
'Columns("1:" & llc.Address & "").Select
'Columns(1, llc).Select
'Range(Columns(1), Columns(llc)).Select
'Columns("E:" & Cells(3, llc).Address & "").Select
'Range("1:" & Cells(3, lc).Address & "").Select
'Range(Cells(1, 1).Address, Cells(3, llc).Address).Select
'Columns("E:" & llc & "").Select
Selection.ClearFormats
End Sub
答案 0 :(得分:0)
如果您使用上述方法,则需要找到要使用的正确行。即:您需要知道数据出现在最右侧列中的行。如果您想要最后一列,请尝试:
ws.usedrange.columns
这只是给出了工作表使用范围内的列数,它被定义为A1:[右下角的单元格,包含值或格式]。
请注意,如果您在E10中进行了格式化,但是您希望获得D列,则无法使用此功能,因为D是具有值的最后一列[即:您要排除对格式化单元格的考虑]。
答案 1 :(得分:0)
尝试在代码之间“阅读”,我怀疑这就是你所追求的:
Public Sub RestorePivtTable()
Sheet1.Cells(2, Sheet1.Columns.Count).End(xlToLeft).EntireColumn.ClearFormats
End Sub
只要第2行中有数据,这将有效。
答案 2 :(得分:0)
我通常使用这种方法,但是如果工作表为空(你不能返回第0列),你必须放入支票。
Sub FindLastColumn()
Dim wrkSht As Worksheet
Set wrkSht = ThisWorkbook.Worksheets("Sheet1")
MsgBox wrkSht.Cells.Find(What:="*", After:=wrkSht.Cells(1, 1), SearchDirection:=xlPrevious).Column
End Sub
答案 3 :(得分:0)
如何找到工作表中最后一列的基本示例 - 我已经包含了一个If
块,以防工作表为空,但后来我不知道为什么要在空的情况下运行此代码无论如何... ...
Sub SO()
Dim lastCol As Integer
Dim lastCell As Excel.Range
'// Assuming the variable 'ws' has already been dimensioned and initialised
On Error Resume Next
Set lastCell = ws.Cells.Find(What:="*", After:=ws.Range("A1"), SearchDirection:=xlPrevious)
On Error GoTo 0
If lastCell Is Nothing Then
lastCol = 1
Else
lastCol = lastCell.Column
End If
MsgBox lastCol
End Sub
在这种情况下, UsedRange
可能不可靠,因为它仍然可以包含以前使用但现在是空白的单元格 - 我猜你对这些单元格不感兴趣。使用Cells.Find()
方法意味着您不必知道哪一行与最后一列(Columns.Count.End(xlToLeft)
方法所需)重合,所以这也是一个奖励处理不规则数据集时。
答案 4 :(得分:0)
感谢大家的帮助。下面的函数和宏解决了将列号引用转换为字母引用的问题:
Function GetColumnLetter(colNum As Long) As String
Dim vArr
vArr = Split(Cells(1, colNum).Address(True, False), "$")
GetColumnLetter = vArr(0)
End Function
Sub RestorePivtTable2()
Dim lc As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("PivtTable")
lc = ws.Cells(5, ws.Columns.count).End(xlToLeft).Column
myCol = GetColumnLetter(lc)
Columns("E:" & myCol & "").Select
Selection.ClearFormats
End Sub