需要一些帮助,使用设置变量来确定我想在我的范围内选择哪些单元格

时间:2016-09-30 16:38:36

标签: excel vba macros

我的数据表中的单元格数量每周都在变化,因此我使用count函数来确定带有数据的单元格数,然后将该计数用作放入我的范围的变量(单元格(x,x),单元格(x,x)可以选择。但我遇到了计数并将其转换为要使用的变量的问题。这是我正在为我正在做的其他事情整理的基本宏。

if((intent.getSerializableExtra(FILTER)) == null)
        filter= false;
    else
        filter= intent != null && (boolean) intent.getSerializableExtra(FILTER);

2 个答案:

答案 0 :(得分:0)

我认为您在尝试将列号作为正确的字母时遇到了麻烦,对吧?尝试这样的事情:

Sub Test()
    Dim wb As Workbook
    Set wb = ThisWorkbook
    Dim ws As Worksheet
    Set ws = wb.Sheets("Sheet1") '(replace with whatever sheet name is)

    Dim lastRow as Integer, lastCol as Integer, lastColLet as Integer
    'get the number value of the last row and column
    lastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lastCol = ws.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    'uncomment the debug.print statements to see what it's getting for last row/column
    'Debug.Print lastRow
    'Debug.Print lastCol
    'get the letter that the column number corresponds to
    lastColLet = Letter(lastCol)
    'Debug.Print lastColLet

    ws.Range("A1:" & lastColLet & lastRow).Select
End Sub   
Function Letter(ByVal lngCol As Long) As String
    Dim vArr
    vArr = Split(Cells(1, lngCol).Address(True, False), "$")
    Letter = vArr(0)
End Function

它使用此处的函数:Function to convert column number to letter?以便将列#转换为字母,然后您可以将字母和最后一行连接起来以选择所需的方式。

答案 1 :(得分:0)

我猜您真正的问题是决定actually需要选择的单元格

你的方法假设最左边的数据单元总是在单元格(1,1)中,右下方的数据单元格在以下的交集中:

  • 第1列中的最后一个非空行,第1行中的最后一个非空列

如果是这种情况,那么您可以继续使用代码,前提是您将x = LasRow更改为x = LastRow ...

不应该是那种情况,那么你可以假设范围是由:

分隔的范围
  • 第1列中的第一个非空行,第1行中的第一个非空列

  • 第1列中的最后一个非空行,第1行中的最后一个非空列

然后你可以使用这段代码:

Function GetData() As Range
    Dim firstRow As Long, firstColumn As Long
    Dim LastRow As Integer, lastColumn As Long

    With ActiveSheet
        firstRow = .UsedRange.Rows(1).Row '<--| get first used row index
        firstColumn = .UsedRange.Columns(1).Column '<--| get first used column index

        LastRow = .Cells(.Rows.Count, firstColumn).End(xlUp).Row '<--| get the first used column last non empty cell row index
        lastColumn = .Cells(firstRow, .Columns.Count).End(xlToLeft).Column '<--| get the first used rows last non empty cell column index

        'return the range
        Set GetData = .Range(Cells(firstRow, firstColumn), Cells(LastRow, lastColumn))
    End With
End Function

并在主代码中利用它,如下所示:

Sub format_table()


    With GetData '<-- use With-End With block to reference wanted object (Range) and avoid Select/Selection/Activate/ActiveXXX
         'format the referenced range
         .Font.Name=..  
         .Interior.Color=..
    End With


End Sub

但GetData()函数可能仍然不是你需要的,如果数据在列和/或行中“锯齿”,第一行/列没有托管最后一列/单元格

所以也许你只需要:

Sub format_table()    

    With ActiveSheet.UsedRange
        'format the referenced range
'        .Font.Name=..
'        .Interior.Color=..
    End With    

End Sub