Microsoft Excel

Herbers Excel/VBA-Archiv

mit VBA sortieren, wenn

Betrifft: mit VBA sortieren, wenn von: Urs
Geschrieben am: 12.09.2014 12:33:14

Hallo Miteinander,
In einer aufsteigend sortierten Kolonne erhalte ich folgende Sortierung:
1x1, 104x1, 18x1, 19x1, 2x1 heraus kommen sollte aber
1x1, 2x1, 18x1, 19x1, 104x1 wie muss ich da sortieren? Was mache ich falsch?

Vielen Dank jetzt schon, Gruss Urs

  

Betrifft: AW: mit VBA sortieren, wenn von: Rudi Maintaire
Geschrieben am: 12.09.2014 12:37:54

Hallo,
Was mache ich falsch?
Nichts.
Das sind Texte.

In eine Hilfsspalte:
=--LINKS(A2;FINDEN("x";A2)-1)
und danach sortieren.

Gruß
Rudi


  

Betrifft: AW: mit VBA sortieren, wenn von: Urs
Geschrieben am: 12.09.2014 13:39:03

Hallo Rudi
Danke für Deine Antwort, schon ausprobiert. Fast ganz geklappt bis auf X und G.
Wie muss ich nun die Formel ergänzen, wenn das "x" auch ein "X" oder ein "G" sein kann?
Gruss Urs


  

Betrifft: AW: mit VBA sortieren, wenn von: Daniel
Geschrieben am: 12.09.2014 13:56:09

Hi

=--LINKS(A2;FINDEN("X";Wechseln(Gross(A2),"G","X"))-1)

Gruß Daniel


  

Betrifft: AW: mit VBA sortieren, wenn von: Urs
Geschrieben am: 12.09.2014 14:56:53

An Rud als auch Daniel,
in Excel habe ich das von Hand hinbekommen aber die Aufzeichnung bringt nichts.
Unabhängig von Zeilen- und Spaltenzahl soll eine Spalte eingefügt werden nach der Spalte bei der in der 1. Zelle "Aufbau" steht.
In der 1. Zelle der neuen Spalte soll "Aderzahl" stehen und die Zelle 2 bis XX soll die Formelfunktion von Daniel stehen wobei sein A2 durch ein OFFset in der Spalte von -1 sein soll.

Ich habe den aufgezeichneten Skript noch hier. Wie weiter? Gruss Urs

  • Sub Aderzahl()
    '
    ' Aderzahl Makro
    '
    
    
        Columns("H:H").Select  ' =Spalte rechts von der Spalte mit "Aufbau" in der 1. Zeile
        Selection.Insert Shift:=xlToRight
        Range("H1").Select
        ActiveCell.FormulaR1C1 = "Aderzahl"
        Range("H2").Select
        ActiveCell.FormulaR1C1 = "=--LEFT(RC(-1);FIND(""X"",WECHSELN(Gross(RC[-1]),"G","X"))-1)"
        Range("H2").Select
        Selection.AutoFill Destination:=Range("H2:H134"), Type:=xlFillDefault
        Range("H2:H134").Select               'Bis zur letzten Zeile
        ActiveWindow.SmallScroll Down:=-159   'Bis zur letzten Zeile
    End Sub



  •   

    Betrifft: AW: mit VBA sortieren, wenn von: Daniel
    Geschrieben am: 12.09.2014 16:14:39

    Holla, das sind aber plötzlich viele neue Aufgaben...
    und rein aufgezeichnet kann der Code auch nicht sein, weil der Recoder keine deutschen und englischen Funktionsnamen mischt.
    Es sollte eigentlich klar sein, dass englische und deutsche Funktionnamen innerhalb der selben Formel nicht funktionieren können.

    Code sollte in etwa so aussehen:

    Sub test()
    Dim Zelle As Range
    '--- Prüfen ob Spalte schon vorhanden ist und wenn nein, einfügen
    Set Zelle = Rows(1).Find(what:="Aderzahl")
    If Zelle Is Nothing Then
        Set Zelle = Rows(1).Find(what:="Aufbau")
        Zelle.Offset(0, 1).EntireColumn.Insert
        Zelle.Offset(0, 1).Value = "Aderzahl"
    Else
        Set Zelle = Zelle.Offset(0, -1)
    End If
    
    '--- Formel einfügen
    With Range(Zelle.Offset(1, 1), Cells(Rows.Count, 1).End(xlUp).Offset(0, Zelle.Column))
        .FormulaR1C1 = "=--LEFT(RC1,FIND(""X"",SUBSTITUTE(UPPER(RC1),""G"",""X""))-1)"
        .Formula = .Value
    End With
    
    '--- Sortieren
    ActiveSheet.UsedRange.Sort key1:=Zelle.Offset(0, 1), order1:=xlAscending, Header:=xlYes
    End Sub
    Gruß Daniel


      

    Betrifft: AW: mit VBA sortieren, wenn von: Urs
    Geschrieben am: 15.09.2014 09:28:16

    Hallo Daniel
    Danke für Deine weitere Hilfe. Kolonne einfügen und 1. Zelle beschriften klappt. Aaaaaaber die folgenden Zellen zeigen nur "WERT!"
    Da ist irgend ein WURM drin.

    Was macht folgender Skript genau:

  • Else
    Set Zelle = Zelle.Offset(0, -1)
    End If

    '--- Formel einfügen
    With Range(Zelle.Offset(1, 1), Cells(Rows.Count, 1).End(xlUp).Offset(0, Zelle.Column))
    .FormulaR1C1 = "=--LEFT(RC1,FIND(""X"",SUBSTITUTE(UPPER(RC1),""G"",""X""))-1)"
    .Formula = .Value
    End With


  • Kannst Du mir da noch weiterhelfen? Wäre nett.
    Gruss Urs


      

    Betrifft: AW: mit VBA sortieren, wenn von: Daniel
    Geschrieben am: 16.09.2014 17:42:37

    Hi

    zunächst prüfe ich, ob schon eine Spalte "Aderzahl" vorhanden ist.
    Wenn ja, wird diese verwendet, wenn nein wird eine neue Spalte nach "Aufbau" eingefügt (dann kannst du den Code auch mehrfach laufen lassen und musst nicht jedesmal die Spalte "Aderzahl" wieder löschen)

    im zweiten Teil wird dann die Formel eingefügt, welche die Zahlen aus dem Stringtext herausliest, damit nach diesen Zahlen sortiert werden kann.

    bei mir funktioniert das Makro ohne Fehler.
    Ich habe die Datei entsprechend deinen Vorgaben aufgebaut.
    Solltest du die Datei nicht richtig beschrieben oder ich dich falsch verstanden haben, so könnte es natürlich zu fehlern kommen.
    Am besten ist, du lädst deine Datei hier mal hoch, dann kann man sich das anschauen.
    Ist wie beim Arzt.
    Wenn der Patient auf dem Tisch liegt, dann ist es relativ leicht die richtige Diagnose zu stellen (zumindest leicher, als wenn eine dritte Person ohne medizinische Fachkenntnisse nur die Symptome am Telefon beschreibt)

    Gruß Daniel


      

    Betrifft: AW: mit VBA sortieren, wenn von: Urs
    Geschrieben am: 17.09.2014 17:45:02

    Hallo Daniel
    vielen Dank für Deine Erläuterungen und auch Geduld. Apropos Arzt, ich habe eine neue Datei genommen um sie ins Forum zu stellen (Man geht ja gewaschen und geduscht zum Arzt :-) ). Um mir keine Blösse zugeben, habe ich das Makroskript nochmals ausprobiert, .... zum Glück, denn nun lief es auch bei mir. Also nochmals vielen Dank und einen schönen Abend.
    Gruss Urs


      

    Betrifft: Ich nochmal von: Urs
    Geschrieben am: 18.09.2014 08:48:19

    Hallo Daniel,
    ich habe Deinen Rat doch nochmal befolgt. Die zurechtgestutzte Datei hatte gestern Erfolg. Die normale Datei aber nicht. Dabei habe ich heute morgen feststellen müssen, dass je nach Standort der Spalten : Artikelnummer;Norm;AE ob am Anfang siehe Register "Geht nicht" oder am Ende siehe Register "geht" das Skript Erfolg hat. Die hochgeladene Datei enthält 2 Skripts und die 2 erwähnten Register.
    https://www.herber.de/bbs/user/92698.xlsx
    Meine Frage nun: Woran liegt das?
    Gruss Urs


      

    Betrifft: AW: Ich nochmal von: Daniel
    Geschrieben am: 18.09.2014 09:03:14

    Keine der Sheets funktioniert.
    Das liegt aber ursächlich daran, dass das Makro fehlt.
    Es wäre besser, wenn du die Datei mit dem Makro hoch laden würdest.
    Gruß Daniel


      

    Betrifft: AW: Ich nochmal von: Urs
    Geschrieben am: 18.09.2014 09:17:19

    Hallo Daniel, hier die richtige Datei mit Makros. Gruss & Dank Urs
    https://www.herber.de/bbs/user/92700.xlsm


      

    Betrifft: AW: Ich nochmal von: Daniel
    Geschrieben am: 18.09.2014 10:38:19

    Hi

    aufgrund deiner Beschreibung bin ich beim Schreiben des Codes davon ausgegangen, dass die Werte, nach denen sortiert werden soll, immer in Spalte A steht.
    Daher auch die Formel mit dem Absoluten Zellbezug auf Spalte A (würdest du sehen, wenn du mal in die eingefügen Zellen reingeklickt hättest, bevor im Code die Formeln durch Werte ersetzt werden (Testen im Einzelstep ist immer hilfreich)

    Wenn das aber nicht so ist und das eigentliche Sortierkriterium (Spalte Aufbau) immer links neben der Zelle mit der Formel steht, dann musst du den Absoluten Zellbezug auf die Spalte A (RC1) in der Formel durch den Relativen Zellbezug auf die Spalte links daneben ersetzen: RC[-1]

    .FormulaR1C1 = "=--LEFT(RC[-1],FIND(""X"",SUBSTITUTE(UPPER(RC[-1]),""G"",""X""))-1)"

    gruß Daniel


      

    Betrifft: Danke für Tipps, Geduld und Gelassenheit von: Urs
    Geschrieben am: 18.09.2014 12:00:06

    Hallo Daniel, vielen Dank für Deine wertvollen Tipps. Gruss Urs


      

    Betrifft: Ich nochmal von: Urs
    Geschrieben am: 18.09.2014 08:51:46

    Hallo Daniel,
    habe in meiner Antwort vorher vergessen das Kointrollkästchen zu aktivieren. Gruss Urs


      

    Betrifft: Dann besser wie folgt, ... von: Luc:-?
    Geschrieben am: 12.09.2014 14:21:24

    …Urs:
    =WENNFEHLER(--LINKS(A2;SUCHEN("x";WECHSELN(KLEIN(A2);"g";"x"))-1);0)
    Alternativ ginge es auch mit einer UDF (in VBA pgmierte benutzer­definierte Fkt) aus dem Archiv (Button RECHERCHE → dann für Version 1.2 nochmal nach dem Thread-Titel suchen):
    =WENNFEHLER(--INDEX(SplitVx(A2;{"x"."X"."g"."G"});1);0)
    Gruß, Luc :-?


      

    Betrifft: AW: Dann besser wie folgt, ... von: Urs
    Geschrieben am: 16.09.2014 14:23:23

    Hallo Rudi
    ich habe in der Recherche versucht zu suchen und bin dann immer auf meinem eigenen Thread gelandet.
    Ich habe nichts gefunden. Wie DU siehst bin ich auch mit Daniels Ergänzungen noch nicht weiter.
    Danke für weitere Hilfe. Gruss Urs


      

    Betrifft: AW: Dann besser wie folgt, ... von: Urs
    Geschrieben am: 16.09.2014 14:25:48

    Sorry, Luc --- ich wollte Dich nicht "Umtaufen"


      

    Betrifft: Habe ich mit einer anderen UDF ... von: Luc:-?
    Geschrieben am: 16.09.2014 17:19:33

    …verwechselt, Urs;
    hierunter ist eine BspMappe aus einem Archiv-Thread zu finden, in der die UDF enthalten ist. Allerdings sind einige Teile auskommentiert, die andere, hierin nicht enthaltene UDFs enthalten. Falls die UDF so für deinen Zweck nicht zufriedenstellend fktioniert, zumal diese ältere Version noch einen kleinen Fehler enthält, musst du dich noch mal melden. Evtl kann ich dann die anderen UDFs nachliefern (hängt davon ab, ob die ggf auch andere UDFs bemühen → VPairs befindet sich evtl auch in einer hochgeladenen BspMappe, während für MaskOnX uU auch MaskOn eingesetzt wdn kann, die sich auf jeden Fall im Archiv finden lässt → letzte Wdholung verwenden, weil alte Version von 2005 von ForumsSoftware zerschossen!). Die enthaltenen Enumerationen wdn ebenfalls benötigt!
    Gruß, Luc :-?


     

    Beiträge aus den Excel-Beispielen zum Thema "mit VBA sortieren, wenn"