2016-04-26 14 views
0

Ich habe Rohdaten nach dem Datum sortiert Ich versuche, zu sortieren, die Daten in dieser Form ist:Daten nach Datum mit Excel

month:april-2014 
offer | value 
ofr x | 2132 
ofr y | 135 
. 
. 
. 
month:mai-2014 
offer | value 
ofr x | 5115 
ofr z | 513 
ofr y | 651 

und es geht weiter, es Angebote gibt, die jeden Monat apear und andere, die verschwinden.

Ich wollte es so aussehen:

offer | april-2014 |mai 14 | june .... 
ofr x  123   5  6 
ofr y  5   1  6 
ofr z 
ofr a 

. . jede Hilfe wäre willkommen, danke

+0

suchen Sie nach Ihren Ergebnissen, dh neue Liste, auf einem neuen Arbeitsblatt, woanders auf dem gleichen Arbeitsblatt, Löschen der alten Liste und Ersetzen durch neue? –

+0

sind ihre leeren Zeilen in Ihren Quelldaten? Oder geht es direkt vom letzten Angebot in den nächsten Monat? –

Antwort

0

Versuchen Sie, die Daten wie folgt umstrukturieren und Pivot-Tabellen verwenden?

Date  | offer | value 
may-2014 |ofr x | 5115 
may-2014 |ofr z | 513 
may-2014 |ofr y | 651 
0

Dieser erste Codeabschnitt durchläuft und arrangiert Dinge für Sie. Die andere wichtige Sache, die es tut, sendet nur one column from your selected range to the function. Einige wichtige Dinge zu beachten sind, müssen Sie möglicherweise die Suchkriterien schreiben, wenn Sie Schlüsselwort für "Monat" ist nicht an der gleichen Stelle im Text, das Wort Angebot ist nicht von selbst mit keinen Leerzeichen in der folgenden Zeile. Ein weiterer wichtiger Punkt ist, dass alles so behandelt wird, wie es ist. Das heißt, wenn die Quellzelle Text war, dann ist die Zielzelle Text. Um vom Datum als Text in das Datum als Excel-Serie zu konvertieren, ist dies ein separates Problem und es gibt viele Möglichkeiten, dies zu erreichen.

Option Explicit Sub SortOffer (OfferList As Range)

Dim CounterX As Long, CounterY As Long, jCounter As Long, icounter As Long, MonthCount As Long, UniqueOffers As Long 
Dim inlist As Boolean 
Dim unsorted() As Variant 
Dim sorted() As Variant 

MonthCount = WorksheetFunction.CountIf(OfferList, "month*") 
UniqueOffers = CountUnique(OfferList.Columns(1).Cells) - MonthCount - 1 


ReDim sorted(1 To UniqueOffers + 1, 1 To MonthCount + 1) As Variant 

unsorted = OfferList 

CounterX = 1 
jCounter = 1 
sorted(1, 1) = "offer" 


For CounterY = LBound(unsorted, 1) To UBound(unsorted, 1) 

    If Left(unsorted(CounterY, 1), 5) = "month" Then 
     CounterX = CounterX + 1 
     sorted(1, CounterX) = Right(unsorted(CounterY, 1), Len(unsorted(CounterY, 1)) - 6) 
    Else 
     inlist = False 
     For icounter = 2 To jCounter 
      If unsorted(CounterY, 1) = sorted(icounter, 1) Then 
       sorted(icounter, CounterX) = unsorted(CounterY, 2) 
       inlist = True 
      End If 
     Next icounter 

     If Not inlist And unsorted(CounterY, 1) <> "offer" And unsorted(CounterY, 1) <> "" Then 
      jCounter = jCounter + 1 
      sorted(jCounter, 1) = unsorted(CounterY, 1) 
      sorted(jCounter, CounterX) = unsorted(CounterY, 2) 
     End If 
    End If 
Next CounterY 

Range("F1").Resize(UBound(sorted, 1), UBound(sorted, 2)).Value = sorted 

End Sub 

Diese nächste Funktion zählt die Anzahl der eindeutigen Einträge in einem Bereich und zählt nicht Plätze. Ich stolperte über this code on this web page. Wenn Sie die Anzahl der Monate von dieser Zählung subtrahieren, werden Sie wissen, wie viele Angebote in Ihrer Tabelle sind. Dies ist wichtig, weil es Ihnen sagen how to size your array (alt link), die Sie später als Ergebnisse zurückschreiben wird

Function CountUnique(ByVal MyRange As Range) As Integer 
    Dim Cell As Range 
    Dim J As Integer 
    Dim iNumCells As Integer 
    Dim iUVals As Integer 
    Dim sUCells() As String 

    iNumCells = MyRange.Count 
    ReDim sUCells(iNumCells) As String 

    iUVals = 0 
    For Each Cell In MyRange 
     If Cell.Text > "" Then 
      For J = 1 To iUVals 
       If sUCells(J) = Cell.Text Then 
        Exit For 
       End If 
      Next J 
      If J > iUVals Then 
       iUVals = iUVals + 1 
       sUCells(iUVals) = Cell.Text 
      End If 
     End If 
    Next Cell 
    CountUnique = iUVals 
End Function 

Jetzt gerade im Fall die Links es nicht abdecken, diese Antwort, die eine Lern ​​Lektion für mich war, Ich habe in verschiedenen Teilen von @JNevill, @Ralph, @findwindow, @ Gary'sStudent und @ScottCraner unterrichtet. Appos wenn ich jemanden vermisst habe. Ich bin mir auch sicher, dass jede dieser Personen es leichter machen und weniger als 10 Stunden brauchen würde, um es zu schreiben 8).

Verwandte Themen