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).
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? –
sind ihre leeren Zeilen in Ihren Quelldaten? Oder geht es direkt vom letzten Angebot in den nächsten Monat? –