【发布时间】:2011-04-22 02:22:03
【问题描述】:
第一次发布海报,一般来说是编程新手。我有一个项目,我必须建立一个财务模型来挖掘 excel 中的数据。我已经成功地在 VBA 上构建了上述模型。我已经对 3,000 行数据集进行了测试,并且成功。我将简要解释它的作用。
我在给定的一天在多个交易所跟踪给定的股票。我下载数据(大约 935,000 行) 第一步是将给定交易所的所有数据(大约 290,000)复制到新表上(这大约需要 8 分钟),然后我创建一个新列来记录买卖差价(12 秒) ),下一步是我遇到的问题,我基本上对每行数据进行两次排名,一列用于出价大小,一列用于要价大小。我创建了一个函数,它使用 excel Percentile 函数并根据给定的出价和要价大小的位置进行排名。截至目前,我在过去 35 分钟内一直在运行宏,但尚未执行。我不能尝试其他宏,因为每个宏都依赖于前一个。
所以我的基本问题是,由于我的数据集很大,我的模型不断崩溃。代码在处理测试数据时似乎很好,并且在我运行程序时它不会抛出任何错误,但是更大的数据集它只是崩溃。有没有人有什么建议?数据量这么大,这正常吗?
提前致谢。 假的
这是给我带来麻烦的 sub 和 function,sub 接受所需的输入来运行该函数,然后弹出到分配的单元格中。该代码假设为三个单独的工作表重复该过程。目前,我喜欢它在一张纸上工作,因此使用 cmets 不包括循环
Sub Bucketting()
Dim firstRow As Long
Dim lastRow As Long
Dim counter As Long
Dim bidRange As Range
Dim offerRange As Range
Dim bidScroll As Range
Dim offerScroll As Range
Dim Ex As String
Dim i As Integer
'For i = 1 To 1 Step 1 'Sheet Selection Process
' If i = 1 Then
' Ex = "Z"
' ElseIf i = 2 Then
' Ex = "P"
' Else
' Ex = "T"
' End If
Sheets("Z").Select 'Sheet selected
With ActiveSheet
firstRow = .UsedRange.Cells(1).Row + 1
lastRow = .UsedRange.Rows.Count
Set bidRange = .Range("F2:F" & lastRow)
Set offerRange = .Range("G2:G" & lastRow)
For counter = lastRow To firstRow Step -1
Set bidScroll = .Range("F" & counter)
Set offerScroll = .Range("G" & counter)
With .Cells(counter, "J")
.Value = DECILE_RANK(bidRange, bidScroll)
End With
With .Cells(counter, "K")
.Value = DECILE_RANK(offerRange, offerScroll)
End With
Next counter
End With
Range("J1").Select
ActiveCell = "Bid Rank"
ActiveCell.Offset(0, 1) = "Offer Rank"
'Next i
End Sub
Function DECILE_RANK(DataRange, RefCell)
'Credit: BJRaid
'DECILE_RANK(The Range of data)
'Declares the function that can be called in the spreadsheet cell - enter '=DECILE_RANK(A5:A50,A5)
'Using the percentile worksheet function calculate where the 10th, 20th etc percentile of the reference range are
DEC1 = Application.WorksheetFunction.Percentile(DataRange, 0.1)
DEC2 = Application.WorksheetFunction.Percentile(DataRange, 0.2)
DEC3 = Application.WorksheetFunction.Percentile(DataRange, 0.3)
DEC4 = Application.WorksheetFunction.Percentile(DataRange, 0.4)
DEC5 = Application.WorksheetFunction.Percentile(DataRange, 0.5)
DEC6 = Application.WorksheetFunction.Percentile(DataRange, 0.6)
DEC7 = Application.WorksheetFunction.Percentile(DataRange, 0.7)
DEC8 = Application.WorksheetFunction.Percentile(DataRange, 0.8)
DEC9 = Application.WorksheetFunction.Percentile(DataRange, 0.9)
' Calculate the Decile rank that the reference cell value sits within
If (RefCell <= DEC1) Then DECILE_RANK = 1
If (RefCell > DEC1) And (RefCell <= DEC2) Then DECILE_RANK = 2
If (RefCell > DEC2) And (RefCell <= DEC3) Then DECILE_RANK = 3
If (RefCell > DEC3) And (RefCell <= DEC4) Then DECILE_RANK = 4
If (RefCell > DEC4) And (RefCell <= DEC5) Then DECILE_RANK = 5
If (RefCell > DEC5) And (RefCell <= DEC6) Then DECILE_RANK = 6
If (RefCell > DEC6) And (RefCell <= DEC7) Then DECILE_RANK = 7
If (RefCell > DEC7) And (RefCell <= DEC8) Then DECILE_RANK = 8
If (RefCell > DEC8) And (RefCell <= DEC9) Then DECILE_RANK = 9
If (RefCell > DEC9) Then DECILE_RANK = 10
End Function
【问题讨论】:
-
您使用什么代码访问单元格?
-
您是否已通过代码尝试查看具体可能无法按预期工作?也许是无限循环或其他什么?
-
Nick-当我单步执行代码时,它工作得很好。
-
Lance-Im 使用 vba,我应该发布实际代码吗?
-
我认为您的问题过于宽泛/模棱两可,无法获得具体答案。您肯定在 Excel 中使用了大量数据,是的,但是您能否缩小所有问题的范围?你是什么意思'崩溃'? excel会死还是出现VBA错误?你是说如果你单步执行代码就可以完美运行,但当你让它运行时就不行?等等等等……
标签: excel optimization vba