cheerstoexcel
Goto Top

Excel- Makro führt Rangordnung in falsche Richtung aus

Hallo Zusammen,

ich habe folgendes Makro, was die Aufgabe hat Blätter durchzugehen, eine Liste zu vervollständigen und diese im Anschluss nach Jahren zu ranken.

Ich habe zwei Probleme mit derm Makro:
1) Es stoppt nach dem ersten Blatt.
2) Das Ranking geht in die falsche Richtung. Aktuell vergibt es den Rang 1. für das aktuellste Jahr. Ältere Jahre erhalten die nachfolgenden Ränge. Es sollte allerdings Rang 1. für das älteste Jahr vergeben.
z.B. 1980 -Rang 1
1985 Rang 2

Kann mir jemand weiterhelfen??

Tausend Dank!

Sub hallo()
For Each sht In ActiveWorkbook.Worksheets
sht.Activate
If Not Left(sht.Name, 1) = "C" Then
a = Range("A3").Value
b = Range("C5").Value
Cells.Find(What:="Other Funds Managed by Firm", After:=ActiveCell, LookIn _
:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
c = ActiveCell.Row + 2
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
Selection.Value = a
Selection.Offset(0, 3).Value = b
Selection.Offset(0, 4).Formula = "=RANK.EQ(" & Replace(Selection.Offset(0, 3).Address, "$", "") & "," & Range(Selection.Offset(0, 3).Address, Cells(c, Selection.Offset(0, 3).Column)).Address & ")"
Selection.Offset(0, 4).Copy
Range(Selection.Offset(-1, 4), Cells(c, Selection.Offset(0, 4).Column)).Select
ActiveSheet.Paste
End
End If
Next

End Sub

Content-Key: 208460

Url: https://administrator.de/contentid/208460

Printed on: April 23, 2024 at 13:04 o'clock

Mitglied: 76109
76109 Jun 22, 2013 at 12:34:06 (UTC)
Goto Top
Hallo CheersToExcel!

Wundert mich nicht, dass der Code schon beim 1.Sheet aussteigt...

Allerdings hast Du den Code nicht in Codetags gesetzt, insofern spare ich mir die Mühe näher darauf einzugehenface-wink

Gruß Dieter
Member: colinardo
colinardo Jun 22, 2013 updated at 12:52:45 (UTC)
Goto Top
Hallo CheersToExcel,
ich gehe mal nur auf die Funktion RANK.EQ oder RANG-GLEICH ein:
RANG.GLEICH(Zahl;Bezug;[Reihenfolge])
Die Syntax der Funktion RANG.GLEICH weist die folgenden Argumente auf:
Zahl Erforderlich. Die Zahl, deren Rangzahl Sie bestimmen möchten
Bezug Erforderlich. Ein Array von oder ein Bezug auf eine Liste mit Zahlen. Nicht numerische Werte im Bezug werden ignoriert.
Reihenfolge Optional. Eine Zahl, die angibt, wie der Rang von Zahl bestimmt werden soll

Ist Reihenfolge mit 0 (Null) belegt oder nicht angegeben, bestimmt Microsoft Excel den Rang von Zahl so, als wäre Bezug eine in absteigender Reihenfolge sortierte Liste.

Ist Reihenfolge mit einem Wert ungleich 0 belegt, bestimmt Microsoft Excel den Rang von Zahl so, als wäre Bezug eine in aufsteigender Reihenfolge sortierte Liste.

Grüße Uwe
Member: CheersToExcel
CheersToExcel Jun 22, 2013 at 12:56:58 (UTC)
Goto Top
Hallo Dieter,
vielen Dank für den Hinweis!

Sub hallo()
For Each sht In ActiveWorkbook.Worksheets
sht.Activate
If Not Left(sht.Name, 1) = "C" Then  
a = Range("A3").Value  
b = Range("C5").Value  
Cells.Find(What:="Other Funds Managed by Firm", After:=ActiveCell, LookIn _  
:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
c = ActiveCell.Row + 2
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
Selection.Value = a
Selection.Offset(0, 3).Value = b
Selection.Offset(0, 4).Formula = "=RANK.EQ(" & Replace(Selection.Offset(0, 3).Address, "$", "") & "," & Range(Selection.Offset(0, 3).Address, Cells(c, Selection.Offset(0, 3).Column)).Address & ")"  
Selection.Offset(0, 4).Copy
Range(Selection.Offset(-1, 4), Cells(c, Selection.Offset(0, 4).Column)).Select
ActiveSheet.Paste
End
End If
Next

End Sub
Member: CheersToExcel
CheersToExcel Jun 22, 2013 at 12:57:46 (UTC)
Goto Top
Hallo Uwe,

danke für die Korrektur! Das werde ich gleich sofort ausprobieren!
Member: CheersToExcel
CheersToExcel Jun 22, 2013 at 13:14:13 (UTC)
Goto Top
Hallo Uwe,
kannst Du mir vielleicht sagen, welchen Wert ich genau austauschen muss?! Vielen Dank!
VG
Member: colinardo
colinardo Jun 22, 2013 at 13:19:24 (UTC)
Goto Top
Am Ende der RANK.EQ Formel muss noch ein ;1 eingefügt werden
Member: CheersToExcel
CheersToExcel Jun 22, 2013 at 13:56:30 (UTC)
Goto Top
Vielen Dank!

Jetzt muss es nur noch alle Blätter durchgehen. Ideen?
Member: colinardo
colinardo Jun 22, 2013 updated at 14:14:38 (UTC)
Goto Top
Zeile 19 das End löschen.
ansonsten setz mal Breakpoints ...
Member: Pjordorf
Pjordorf Jun 22, 2013 updated at 15:49:21 (UTC)
Goto Top
Hallo,

ansonsten setz mal Breakpoints ...
Oder du tickerst dein VBA per Einzelschritt durch. F8 Taste im VBA Editor. Dann siehst du selbst an welcher Stelle sich dein Programm beendet und du kannst selbst entscheiden ob es das dort tun sollface-smile

Und bitte noch ein How can I mark a post as solved? dran gepappt.

Gruß,
Peter
Mitglied: 76109
76109 Jun 22, 2013 at 16:20:31 (UTC)
Goto Top
Hallo CheersToExcel!

Und wenn ich das Ganze richtig verstanden habe, dann etwas vereinfacht so:
Sub hallo()
    For Each sh In ActiveWorkbook.Worksheets
        With sh
            If Left(.Name, 1) <> "C" Then  
                Set Fund = .Cells.Find("Other Funds Managed by Firm", LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)  
                
                If Not Fund Is Nothing Then
                    Set r1 = Fund.Offset(2, 0)
                    Set r2 = r1.End(xlDown).Offset(1, 0)
                    
                    r2.Offset(0, 0).Value = .Range("A3").Value  
                    r2.Offset(0, 3).Value = .Range("C5").Value  
                    r1.Offset(0, 4).Formula = "=RANK.EQ(" & Replace(r1.Offset(0, 3).Address, "$", "") & "," & Range(r1.Offset(0, 3), r2.Offset(0, 3)).Address & ",1)"  
                    r1.Offset(0, 4).Copy .Range(r1.Offset(1, 4), r2.Offset(0, 4))
                End If
            End If
        End With
    Next
End Sub

Gruß Dieter
Member: CheersToExcel
CheersToExcel Jul 01, 2013 at 07:53:51 (UTC)
Goto Top
Vielen Dank für die Unterstützung! Es funktioniert einwandfrei!!