2013-10-15 38 views
0

通過我的問題行號,可以得出結論,我是新來的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 

回答

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

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