liefert zwar die gesuchten PLZ, aber ich konnte die Übergabe der Zeilen-Nummer, hier 8, nicht dynamisch formulieren. Auch Tests mit Aggregate zeigten nur Fehler.
Mit VBA könnte ich das wohl hinbiegen, aber eine Formel wäre besser.
(als Matrix-Formel) ging nicht, In "Entfernungsliste" in freien Spalten rechts der Liste ging es sehr gut. Da die Matrix aber 8.900 x 8.900 gross ist, bekommt mein Excel Speicherprobleme.
17.01.2023, 14:21 (Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2023, 14:25 von Ralf A.)
...oder...
als Tabelle formatieren, in gewünschter PLZ Spalte Zahlenfilter, Top 10, die untersten 6 wählen...
oder mit PQ: Bsp.: Diese formatierte Tabelle als Quelle nehmen und für PLZ 10115 die nächsten 5 suchen:
Code:
let Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], #"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([10115] <> 0)), #"Sortierte Zeilen" = Table.Sort(#"Gefilterte Zeilen",{{"10115", Order.Ascending}}), Unterste5 = Table.FirstN(#"Sortierte Zeilen",5), #"Andere entfernte Spalten" = Table.SelectColumns(Unterste5,{"10115", "PLZ"}) in #"Andere entfernte Spalten"
Statt statisch 10115 kann selbstverständlich auch ein Parameter verwendet werden...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
17.01.2023, 19:29 (Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2023, 19:35 von LCohen.)
Mengenbetrachtung:
Variant = 15 (weiß es jemand richtig?) 8900^2 = 79.210.000
ergibt 1.188.150.000 Byte für den Wertebereich ohne Header.
Vielleicht kannst Du Deine Zahlen noch transformieren in LONG (da INTEGER wohl nichts bringt, da intern angeblich mit LONG gerechnet würde)?
Oder Du verwendest Strings. Dann landest Du mit 3 Byte bei 256^3 = 16.777.216 Zuständen, so dass Du sogar metergenau mit Entfernungen bis 16.777 km rechnen kannst. 3 Byte x 8900 = 26700, was unter der maximalen Stringlänge von 32766 ist.
Das Modell wiese dann statt 1.188.150.000 nur ein Fünftel davon aus: 237.630.000 Byte.
Bei 100 Meter Genauigkeit könnte man auch Entfernungen bis 6553 km auswerten: 2 Byte = 256^2 = 65536 => 158.420.000
Du musst ja gar nicht 8900 x 8900 auf einmal betrachten. Minimal reicht der Vergleich von 1 PLZ mit den 8899 anderen. Das müsstest Du halt 8900 mal hintereinander machen (was jegliche andere Rechenaufgabe auch nicht anders tut).
Sub M_snb() sn = Cells(1).CurrentRegion ReDim sq(UBound(sn))
For j = 1 To UBound(sn) If sn(j, 1) = 10245 Then Exit For Next
For jj = 2 To UBound(sn) sq(jj - 1) = sn(jj, j) Next
For jj = 2 To 10 y = Application.Small(sq, jj) For jjj = 1 To UBound(sn, 2) If sn(j, jjj) = y Then Exit For Next Debug.Print "row: " & j & vbTab & "value: " & y & vbTab & "column: " & jjj & vbTab & "columnhead: " & sn(1, jjj) Next End Sub