根据变量命名行号

时间:2013-10-15 13:45:12

标签: excel-vba vba excel

根据我的问题,你可以得出结论我是VBA的新手。 我记录了一些基本上选择一些行的宏,然后以各种方式对数据进行排序。一个这样的宏如下所示。它选择第17行到第203行,然后按“AJ”列按升序排序。

问题是我不希望我的选择的最后一行,即行203,是一个常量。我希望它是一个变量。在我的电子表格中,我在单元格Z10中有一个变量,我想将其用作分配给我的排序选择的最后一行的数字。例如,如果Z10的值为100,那么我希望我的宏选择第17行到第100行并执行排序。如果我在单元格Z10中放置值203,那么我希望宏基于选择行17到203进行排序,依此类推。

由于 专利

' Ticker Macro
'
' Keyboard Shortcut: Ctrl+t
'
    Rows("17:203").Select
    Range("A203").Activate
    ActiveWorkbook.Worksheets("Invest daily").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Invest daily").Sort.SortFields.Add Key:=Range( _
        "AJ17:AJ203"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Invest daily").Sort
        .SetRange Range("A17:DB203")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
        .Apply
    End With
   Range("AJ17").Select
End Sub

2 个答案:

答案 0 :(得分:0)

我相信这就是你要找的东西:

Dim nLastRowIndex As Long, nColIndex As Long

nLastRowIndex = 203 'TODO determine last row index
nColIndex = 17

'Instead of Rows("17:203").Select, you'll do:    
Rows(CStr(nColIndex) & ":" & CStr(nLastRowIndex)).Select
...

VBA中的Dim语句声明了一个变量(此处为nLastRowIndexnColIndex),然后您可以为它们分配值(分别为203和17)。稍后,您可以使用这些值来形成单元格索引,方法是将变量的数值转换为字符串,然后将它们连接到单元格索引"17:203"中。

如果你想使用另一个包含最后一行编号的单元格(如你问题中的Z10),你需要做的就是(未经测试的代码,你可能需要调整一下但是它很接近):

nLastRowIndex = CLng(Cells("Z10").Value)

此代码读取单元格Z10的值,将其转换为Long(32位整数值),然后将值赋给nLastRowIndex

答案 1 :(得分:0)

您需要获取Z10单元格中的值并将此值赋给变量,然后使用此变量而不是常量:

' Ticker Macro
'
' Keyboard Shortcut: Ctrl+t
'
    Dim MaxRow As String
    MaxRow = Cells(10,26).Value
    Rows("17:" & MaxRow).Select
    Range("A" & MaxRow).Activate
    ActiveWorkbook.Worksheets("Invest daily").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Invest daily").Sort.SortFields.Add Key:=Range( _
        "AJ17:AJ" & MaxRow), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Invest daily").Sort
        .SetRange Range("A17:DB" & MaxRow)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
        .Apply
    End With
   Range("AJ17").Select
End Sub