Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1632to1636
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Position per VBA ermitteln

Position per VBA ermitteln
23.07.2018 23:50:20
Siegfried
Hallo zusammen,
ich habe in einer Spalte Werte stehen, für die ich in einer zweiten Spalte eine Rangfolge erstellt habe (RngPosition).
In einer dritten Spalte möchte ich die Position von Rang 1 bis Anz ermitteln.
Dazu habe ich folgenden Code:
Dim RngPosition As Range
For n1 = 1 To Anz
PositionRang = WorksheetFunction.Match(n1, RngPosition, 0)
Debug.Print PositionRang
Cells(1, 1).Offset(n1, 3) = PositionRang
Next n1
Bei "Debug.Print PositionRang" erhalte ich die richtige Reihenfolge,
bei "Cells(1, 1).Offset(n1, 3) = PositionRang" kommt eine andere Reihenfolge.
Was stimmt nicht?
Gruß Siegfried

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Deine Implementierung, ...
24.07.2018 02:59:04
Luc:-?
…Siegfried! :-]
Wenn man alles richtig macht, die Werte der Spalten A & B feststehen und in Zeile 2 beginnen, sowie alle Variablen des Pgms rich­tig deklariert, sind beide Ausgaben auch gleich. Das kannst du mit folgd Pgm überprüfen, das eine vorherige Auswahl der Zellen mit der Rangfestlegung (in B) vorsieht:
Sub RPosition()
Dim Anz As Long, n1 As Long, PositionRang As Long, RngPosition As Range
Set RngPosition = ActiveWindow.RangeSelection
Anz = RngPosition.Cells.Count
For n1 = 1 To Anz
PositionRang = WorksheetFunction.Match(n1, RngPosition, 0)
Debug.Print PositionRang
Cells(1, 1).Offset(n1, 2) = PositionRang
Next n1
Set RngPosition = Nothing
End Sub
Die Ränge in B sollten natürlich lückenlos sein, sonst gibt's 'nen Fehler bei Match!
🙈 🙉 🙊 🐵 Morrn, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
AW: Deine Implementierung, ...
24.07.2018 09:00:10
Siegfried
Guten Morgen, Luc
Bei den Werten sind keine Lücken und kein doppelter Wert und auch bei der Rangfolge nicht.
Bei der Ausgabe mit Debug.Print stimmt alles.
Bei der Ausgabe im Tabellenblatt werden die Positionen paarweise vertauscht, so wird statt der richtigen Reihenfolge: 18, 16, 14, 12 usw. die Reihenfolge 16, 18, 12, 14 usw. ausgegeben.
Ich finde dafür keine Erklärung.
Gruß Siegfried
Und hast du das mal mit meinem Pgm ...
24.07.2018 14:57:32
Luc:-?
…getestet, Siegfried?
Eine paarweise Vertauschung wäre eigentlich nur möglich, wenn dein Pgm komplexer ist als dargestellt, die Daten anders ange­ord­net sind u/o die Xl-GrundEinstellungen nicht dem üblichen Standard entsprechen (bspw eingestellte Lotus 1-2-3-Kom­pati­bilität).
Ein solcher Unterschied könnte uU auch durch Durchlaufen eines mehrzeilig-mehrspaltigen ZellBereichs oder eines Datenfeldes (ohne ZellBezug) verursacht wdn. Ersterer wird in VBA normalerweise zeilen-, letzterer spaltenweise durchlaufen.
Luc :-?
Anzeige
AW: Und hast du das mal mit meinem Pgm ...
25.07.2018 11:53:23
Siegfried
Hi Luc,
Danke, dass Du nochmal nachhakst.
In meinem konkreten Anwendungsfall spielt das vertauschen keine entscheidende Rolle, weil ich die Rangfolge sowieso paarweise nutze und dann ist es egal, ob der erste Wert auf Position 1 oder 2 steht.
Die Frage hat aber eine grundsätzliche Berechtigung.
Zu Deinen Anmerkungen: Mein Code ist nicht komplexer und die Grundeinstellungen sind Standard.
Ich habe zu Testzwecken den besagten Code ausgelagert, mit dem gleichen Ergebnis.
Ich habe die Reihenfolge in ein Datenfeld geschrieben, mit dem gleichen Ergebnis.
Beides macht auch keinen wirklichen Sinn, weil ich im Original das gleiche Ergebnis erhalte.
Es bleibt bei der Unerklärlichkeit für mich.
Gruß Siegfried
Anzeige
Unter Xl14/2010 ist beides identisch… orT
26.07.2018 00:48:10
Luc:-?
Warum bei dir nicht…?
Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige