参考工作表的最后一列

时间:2015-08-24 14:52:43

标签: excel excel-vba vba

以下所有方法都未能引用最后一列。什么是可行的方法?

例如'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

5 个答案:

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