VBA-Excel und großen Datenmengen verursacht Programmabsturz

Ersten mal das poster und der neuen Programmierung im Allgemeinen. Ich habe ein Projekt, in dem ich aufbauen müssen, ein finanzielles Modell von mir für die Daten in excel. Ich gelungen, Gebäude, sagte Modell auf VBA. Ich lief tests auf 3000 Linie dataset, und es war erfolgreich. Ich werde kurz erklären, was es tut.

Ich verfolgen, eine bestimmte Aktie an einem bestimmten Tag auf mehreren Börsen. Lade ich die Daten (etwa 935,000 Linien) Der erste Schritt ist, kopieren Sie alle Daten für einen bestimmten exchange (rund 290.000 steht) auf ein neues Blatt (dies dauert etwa 8min), dann habe ich eine neue Spalte erstellen, melden Sie den bid-ask spread (12secs), der nächste Schritt ist das, was Im Probleme mit, ich grundsätzlich Rang jeder Zeile die Daten zweimal, eine Spalte für die Ausschreibung Größe und eine Spalte für Ask-size. Ich erstellte eine Funktion, die excel verwendet Perzentil-Funktion und Reihen, die basierend auf, in denen der angegebene bid-und ask-size landet. Wie jetzt, ich habe das Makro ausgeführt für die letzten 35min und hat noch ausführen. Ich kann nicht versuchen, die anderen Makros, da jedes makro von dem vorherigen abhängt.

Also meine grundlegende Frage ist, da mein Datensatz ist groß, mein Modell abstürzt.Der code scheint in Ordnung zu sein bei der Arbeit mit den test-Daten, und Sie werden nicht werfen Fehler, wenn ich das Programm starte, aber mit dem größeren Datensatz es einfach abstürzt. Hat jemand irgendwelche Vorschläge? Ist das normal mit so großen Datenmengen?

Vielen Dank im Voraus.
Sham

Hier ist der sub-und function-das ist mir die Mühe, die sub nimmt die erforderlichen Eingaben, um die Funktion auszuführen und dann erscheint in der zugewiesenen Zelle. Der code ist wohl wiederholen Sie den Vorgang für drei separate Blätter. Für jetzt, würde ich mag es zu arbeiten auf einem Blatt, somit benutzt die Kommentare, um nicht die Schleife

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
Welchen code verwenden Sie, um den Zugriff auf die Zellen?
Haben Sie ging durch den code, um zu versuchen und sehen, was genau möglicherweise nicht wie vorgesehen funktioniert? Vielleicht eine Endlosschleife oder sowas???
Nick-Wenn ich Schritt durch den code funktioniert es Prima.
Lance-Im vba verwenden, sollte poste ich den aktuellen code?
Ich denke, deine Frage ist viel zu breit/mehrdeutig zu bekommen, viel in der Art von konkreten Antworten. Sie sind auf jeden Fall über eine Menge von Daten für excel, ja, aber kannst du eingrenzen, was ist problematisch? Was meinst du mit "crash"? Excel sterben, oder bekommst du einen VBA-Fehler? Sagen Sie, dass der code funktioniert perfekt, wenn Sie Schritt für Schritt durch, aber nicht, wenn Sie nur lassen Sie es laufen? Etc, etc...

InformationsquelleAutor Sham | 2011-04-20

Schreibe einen Kommentar