Clever-Excel-Forum

Normale Version: Datensortierung 1 x linear, 1 x umgekehrt / Symetrisch
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Liebe Freunde

Ich bin seit Tagen am verzweifeln und wende mich nun hoffnungsvoll an euch.

In einer mittlerweile sehr komplexen Mappe rechnet mir VBA mittels Solver und Shapes-Visualisierung in Userform die optimale Anzahl/Zusammenstellung an Gerüstfeldern für eine Hauswand. Soweit, so gut.

Für ein Szenario muss ich jedoch die errechneten Elemente in symetrischer Reihenfolge bringen und hier bin ich am verzweifeln. Weder mit verschachtelten Schleifen oder sonst wie komme ich zu einem Ergebnis. Mittlerweile habe ich das Gefühl mich immer weiter von einer Lösung zu entfernen... :.-(

Jedes Element kommt in gerader Anzahl daher. Nur bei den Hauptfeldern (= 2.50m) ist ein zusätzliches Feld, welches genau in der Mitte positioniert werden muss.

Für alle die die Beispielmappe nicht downloaden können:
Ich habe z.B.
Anzahl Masse
2 0.70
0 1.00
2 1.25
3 2.50

Die richtige Ausgabe wäre
0.70
1.25
2.50
2.50 (= mittiges Hauptfeld)
2.50
1.25
0.70

Hättet ihr eine Lösung oder wenigstens einen Ansatz? Ach ja... ich sollte die einzelnen Felder für die Shape-Erstellung abgreifen können...

Liebe Grüsse und vielen DANK für eure Zeit!!!

Christian
Ohne in die Mappe zu schauen: Du könntest es mit Kkleinste und Kgrösste hinbekommen, falls dir das als Ansatz genügt.
Danke EarlFred

Kannte die Funktion nicht... Ich les mich mal ein!
Weiss aber noch gar nicht wie die Schleife aussehen soll...
Hänge einfach fest und krieg es nicht hin... Sad

Könnte mir noch irgend jemand Hilfe geben?

Christian
Ich ging davon aus, du hättest bereits sortierte Listen mit den Elementen. Naja, egal:

Code:
Option Explicit

Sub start()

Dim SymmetrischesDatenfeld As Variant
SymmetrischesDatenfeld = SymmetrischeVerteilung

Range("G25").Resize(UBound(SymmetrischesDatenfeld, 1)).Value = SymmetrischesDatenfeld

End Sub


Function SymmetrischeVerteilung() As Variant
Dim fVarAnzahl    As Variant: fVarAnzahl = Range("H14:H20").Value
Dim fVarBreite    As Variant: fVarBreite = Range("B14:B20").Value
Dim Anz           As Long: Anz = Application.Sum(fVarAnzahl)
Dim fVarAusgabe   As Variant
If Anz > 0 Then
   ReDim fVarAusgabe(1 To Anz, 1 To 1)
  
   Dim i             As Long
   Dim j             As Long
   Dim k             As Long
  
   For i = LBound(fVarAnzahl, 1) To UBound(fVarAnzahl, 1)
      For j = 1 To fVarAnzahl(i, 1) / 2
         k = k + 1
         fVarAusgabe(k, 1) = fVarBreite(i, 1)
         fVarAusgabe(UBound(fVarAusgabe, 1) - k + 1, 1) = fVarBreite(i, 1)
      Next j
   Next i
Else
   ReDim fVarAusgabe(1 To 1, 1 To 1): fVarAusgabe(1, 1) = "Fehler - keine Daten"
End If

SymmetrischeVerteilung = fVarAusgabe
End Function
Vielen Dank, EarlFred

Einfach nur genial!!!!!

Gruss Christian