Collapse column

Autor Thema: Sortieren in EXCEL-Makro  (Gelesen 6108 mal)

Offline kealfra

  • Newbie
  • *
  • Beiträge: 28
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Sortieren in EXCEL-Makro
« am: August 28, 2012, 17:38:52 Nachmittag »
Hallo,
Ich möchte die Titel einer Videoliste mit etwa 1.600 Zeilen, die von Hause aus nach Genres geordnet sind, ohne Rücksicht auf das jeweilige Genre nach Anfangsbuchstaben der Titel ordnen.
Da die Gesamtzahl der Titel je nach Fortschritt der Bearbeitung variert, ist das nur mit indirekter Adressierung möglich, indem ich zunächst innerhalb des Makros die letzte Zeile der Liste feststelle und mit deren Hilfe den zu sortierenden Bereich definiere. (Erste bis letze Zeile, Erste bis letzte Spalte)
Es gelingt mir nicht, die indirkte Adressierung in dem Sortieralgorhytmus unterzubringen, den man ja durch ein Versuchsmakro leicht ermitteln kann, der aber dann natürlich direkt adressiert ist.

Kann jemand helfen???

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline Beverly

  • Full Member
  • ***
  • Beiträge: 129
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Gut
  • Version [Office] : Office 2010
Antw: Sortieren in EXCEL-Makro
« Antwort #1 am: August 29, 2012, 09:03:36 Vormittag »
Hi,

dann poste doch mal deinen aufgezeichneten Code.

Bis später,
Karin

Offline kealfra

  • Newbie
  • *
  • Beiträge: 28
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Antw: Sortieren in EXCEL-Makro
« Antwort #2 am: August 29, 2012, 12:49:37 Nachmittag »
Hallo Beverly,
Danke dass Du Dich bemühst. Von 60 Lesern eine einzige Antwort. Nicht sonderlich ergiebig dieses Forum!

Den folgenden Code möchte ich so umfriemeln, dass er auf die Z1S1-Schreibweise reagiert. Das würde es mir ermöglichen, mit flexiblen Zeilenzahlen zu arbeiten. Mit direkter und indirekter Adressierung lag meine Ausdrucksweise wohl ziemlich daneben. Ich meinte damit den Übergang von A1 auf Z1S1.
Die A1-Scheibweise halte ich -mit Verlaub - für idiotisch. Wenn man damit nicht täglich umgeht, verliert man innerhalb einer großen Tabelle ziemlich schnell die Orientierung, wenn als Spalte I oder AD oder BB angegeben wird. Wenn man mal eben fünf oder acht Spalten vor oder zurückspringen will, kann man anfangen, an den Fingern das Alphabet abzuzählen. Daher mein Wunsch.

' versuch Makro
'
 Range("A4:G1563").Select
    ActiveWorkbook.Worksheets("HDD-DRUCK").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("HDD-DRUCK").Sort.SortFields.Add Key:=Range( _
        "C4:C1563"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("HDD-DRUCK").Sort
        .SetRange Range("A4:G1563")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

mfg wohnwagen

Offline Beverly

  • Full Member
  • ***
  • Beiträge: 129
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Gut
  • Version [Office] : Office 2010
Antw: Sortieren in EXCEL-Makro
« Antwort #3 am: August 29, 2012, 16:38:11 Nachmittag »
Hi,

eine Zeile oder Spalte variabel gestalten kann man problemlos auch in der A1-Schreibweise:

Sub Sortieren()
   Dim lngLetzte As Long
   With ActiveWorkbook.Worksheets("HDD-DRUCK")
      lngLetzte = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
      .Sort.SortFields.Clear
      .Sort.SortFields.Add Key:=Range( _
         "C4:C" & lngLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
         xlSortNormal
      With ActiveWorkbook.Worksheets("HDD-DRUCK").Sort
         .SetRange Range("A4:G" & lngLetzte)
         .Header = xlGuess
         .MatchCase = False
         .Orientation = xlTopToBottom
         .SortMethod = xlPinYin
         .Apply
      End With
   End With
End Sub

Den Teil .Cells.Find(... kannst du noch ersetzen durch .Columns(3).Find(... , falls du die letzte belegte Zeile in Spalte C (3) ermitteln willst und nicht bezogen auf den benutzen Bereich des Tabellenblattes.

Bis später,
Karin

Offline kealfra

  • Newbie
  • *
  • Beiträge: 28
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Office 2007: Antw: Sortieren in EXCEL-Makro
« Antwort #4 am: August 29, 2012, 18:01:03 Nachmittag »
Hallo, Beverly oder Karin oder was richtiger bzw. Dir lieber ist,

Klar, kann man problemlos. Aber nur wenn man kann.

In Deinem Code sind Dinge drin, die mir in 15 Jahren noch nie untergekommen sind. (Vielleicht gibt es sie ja auch noch nicht so lange [Office 2010 oder ?]). Dein Code ist mir ebenso ein Buch mit sieben Siegeln, wie der, den ich an Dich geschickt habe. Einziger Trost: Ich habe ihn Buchstabe für Buchstabe abgetippt und er hat mir sofort die Tabelle sortiert, die ich (um sicher zu sein) probehalber zweimal verändert habe.

Ich habe zwar mal versucht in meinem Excel 2007 herauszubekommen was dieses "lng" bedeutet, aber wie üblich ist man bereits beim Lesen von Zeile 3 der internen Excel-Hilfe davon überzeugt, Analphabet zu sein. Für Leute die sich einarbeiten möchten ist sie jedenfalls keine Hilfe und auf den Kauf von 80€-Schwarten, in denen spätestens auf Seite 10 begonnen wird, die Jahresbilanz der BASF zu programmieren, verzichte ich seit langem.

Sei dem wie ihm sei. Ich komme mit meinem Makro weiter und dafür danke ich.

Wenn Du Willens und in der Lage bist, mir noch einen  Gefallen zu tun: Wie findet man in diesem Forum einen als Entwurf abgespeicherten Beitrag wieder?

mfg wohnwagen

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline Beverly

  • Full Member
  • ***
  • Beiträge: 129
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Gut
  • Version [Office] : Office 2010
Antw: Sortieren in EXCEL-Makro
« Antwort #5 am: August 29, 2012, 19:43:14 Nachmittag »
Hi,

ich habe deinen Code nur ein klein wenig angepasst, da man in VBA zu 99% aller Fälle auf Select (und Activate) verzichten kann, welche das Ergebnis der Aufzeichnung mit dem Makrorekorder sind, da dieser ja tatsächlich jeden ausgeführten Schritt aufzeichnet. Dies kann man im Nachhinein bereinigen und stattdessen (wie im gegebenen Fall) z.B. durch eine With-Anweisung ersetzen.

Für die Deklaration von Variablen in VBA gibt es keinen Standard, weshalb du da auch in der VBA-Hilfe nicht fündig wirst. International eingebürgert hat sich jedoch, dem Namen der Variablen (der beliebig gewählt werden kann) einen Präfix voranzusetzen, der den Typ der Variablen kennzeichnet - so bedeutet z.B. "lng" eine Variable vom Typ Long, "str" vom Typ String, "int" vom Typ Integer usw. Eine Zusammenstellung dieser Präfixe (und anderer Hinweise) findest du in der "Ungarischen Notation für Visual Basic" http://www.it-academy.cc/article/995/Ungarische+Notation+fuer+Visual+Basic.html.

Bis später,
Karin

PS: bezüglich des Entwurfs kann ich dir leider nicht weiterhelfen - am besten, du wendest dich an einen der Moderatoren.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: Sortieren in EXCEL-Makro
« Antwort #6 am: August 30, 2012, 11:44:00 Vormittag »
Hallo kealfra...

bezüglich Deiner Frage zum Entwurf: diese kannst Du wiederfinden, indem Du auf Dein Profil gehst (Menü ganz oben)
und anschließend etwas tiefer im Menü "Profil-Infomationen" den Untereintrag "Beiträge anzeigen..." -> "Entwürfe"
wählst. Müsstest dann auf eine Seite gelangen, wo Deine Entwürfe aufgelistet sind.

PS: falls Du mit "60 Lesern" die Angabe meintest, die im Forum zu den Aufrufen angezeigt wird, so ist die Zahl nicht
ganz realistisch, was die tatsächliche Anzahl an Lesern betrifft. Denn m.W. zählen auch die Aufrufe von Google bzw.
weiteren Suchmaschinen mit.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline kealfra

  • Newbie
  • *
  • Beiträge: 28
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Antw: Sortieren in EXCEL-Makro
« Antwort #7 am: August 31, 2012, 13:39:33 Nachmittag »
Hallo Beverly,

Da habe ich mit dem "lngLetzte" ja schön ins Boxhorn jagen lassen. Wenn man nur mit so schlichten Sachen umgeht wie "Dim ZL%" kann es einem also passieren, dass man vor lauter Bäumen den Wald nicht erkennt.

Aber es gibt noch ein paar Sachen die mir neu sind, zB. das Sternchen hinter dem What in Zeile 3 und auch die Art, wie man mit dem "&" alsolute Zahlen in die A1-Schreibweise einbauen kann. Ich hab gerade zwei Stunden lang danach gesucht. Eine Angabe oder Anleitung, wie man via Makro A1 in Z1S1 (bzw. umgekehrt) umwandeln kann, habe ich nicht finden können. Bei meiner Programmierweise "von hinten durch die Brust ins Auge" (sprich also für eine gestellte Aufgabe mit dem Makrorekorder ein Makro aufzunehmen und dessen Code dann in meinen Code einzubauen) ist mir das Problem der Umwandlung nicht neu. Bisher ist es mir mit viel Herumprobieren noch immer gelungen. Diesmal, bei meinem ersten Makro seit dem Erwerb von Office 2007, musste ich passen.

Es gab bei mir immer die Hoffnung, beim Erscheinen eines neuen Office könne man lesen, Herr Kleinweich habe sich von der A1-Notation verbschiedet, weil diese von Herrn Zuse erfunden wurde und daher leicht angestaubt ist. Aber für ihn (der dem Vernehmen nach demnächst als Nichtsesshafter sein Leben fristen muss ) ist der damit verbundene Aufwand sicher nicht tragbar. Oder gibt es handfeste Gründe dafür, A1 beizubehalten?

Wie Dein Code beweist, gibt es aber ja Regeln, mit denen diese Umstellung zu bewältigen ist. Für einen Tipp, wo man so etwas findet, würde ich Dir (falls sie frisch gewaschen sind) die Füße küssen.

mfg wohnwagen

Offline Beverly

  • Full Member
  • ***
  • Beiträge: 129
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Gut
  • Version [Office] : Office 2010
Antw: Sortieren in EXCEL-Makro
« Antwort #8 am: September 01, 2012, 09:57:41 Vormittag »
Hi,

es gibt verschiedene Möglichkeiten, um die letzte belegte Zelle im benutzten Bereich zu ermitteln, die alle ihre Vor- und Nachteile haben. Die Find-Methode mittels Platzhalter "*" ist nach meinen Kenntnissen universell einsetzbar und ich habe sie benutzt, da ich die Bedingungen in deiner Arbeitsmappe nicht kenne.

Von der A1-Schreibweise in die Z1S1-Schreibweise und wieder zurück wechseln kann man mit folgendem Code (aufgezeichnet mit dem Makrorekorder):

    Application.ReferenceStyle = xlR1C1
    Application.ReferenceStyle = xlA1

Über Sinn oder Unsinn der Verwendung der einen oder der anderen Schreibweise kann man lange diskutieren, bringt aber nichts, denn Exce lässt dir ja die Möglichkeit offen, je nach Gusto diese oder jene zu verwenden.

Man kann in VBA in gewissem Sinne auch die Z1S1-Schreibweise anwenden, wenn einem die Verwendung von Buchstaben nicht zusagt, indem man Range() und Cells() miteinander kombiniert - schau dazu in der VBA-Hilfe zum Stichwort "Range-Objekt".

Bis später,
Karin


Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.