vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
Done! Lordchen Cells-Wirbelsturm! 
Autor: unbekannt
Datum: 23.09.01 14:47

Hi Moni,

da ist das Baby, ganz frisch aus Lordchens stumpfer Feder
Vorsicht, Papier ist noch nass

Man geht folgendermaßen vor: In jender Arbeitsmappe, in der sich das ahnungslose Tabellchen befindet, öffnet man über Extras/Makro/Visualbasic Editor den VBA-Editor.


Im Projekt-Manager erkennt man Projekt1(Name der Arbeitsmappe). Direkt darunter aber mehrere Tabellen (Tabellen-Klassenmodule). Jene Tabelle, die unser unschuldiges Tabellchen repärsentiert, klicken wir an, wir gelangen in den Codebereich dieser Tabelle!

Im oberen Bereich des Windows (CodeEditor) befinden sich zwei ComboBoxen, die linke davon klicken wir an (Objektkatalog). Darin befinden sich zwei Einträge: Allgemein und Worksheet.


Wir klicken auf Worksheet und wählen aus der rechten Combobox das Ereignis:
BevoreRightClick

aus. Wir fügen just den nachfolgenden Code ein:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As _
  Boolean)
   Dim janein As Variant
   Dim nCell As Excel.Range
   Dim x As Long, y As Long, i As Long
   Dim a As String, j As String
   Dim f As Integer
   a = Target.Address(False, False, xlA1)
   janein = MsgBox("Soll die Tabelle ab der Zeile/Spalte: " + a + " sortiert" & _
     "werden?", vbQuestion + vbYesNo, "Autosortierung")
   If janein = vbNo Then Exit Sub
   Selection.SpecialCells(xlCellTypeLastCell).Select
   x = Selection.Column
   y = Selection.Row
   a = a + ":" + Cells(y, x).Address(False, False, xlA1)
   For Each nCell In Range(a)
      f = InStr(nCell.Text, ".")
      If f <> 0 Then
         Cells(nCell.Row, x + 1).Value = DatePart("yyyy", nCell.Text)
      ElseIf nCell.Text <> "" Then
         j = "1." + nCell.Text
         Cells(nCell.Row, x + 1).Value = DatePart("yyyy", j)
      End If
   Next
   a = Cells(y, x + 1).Address(True, False, xlA1)
   f = InStr(a, "$")
   a = Left(a, f - 1)
   Range("A:" + a).Select
   Selection.Sort key1:=Columns(a)
End Sub
Was passiert da genau:

Stellen wir uns mal vor, diese Tabelle enthält in einer Spalte Datumsangaben. Diese Tabelle soll hinsichtlich den Jahren sortiert werden. Aber:

Die Daten liegen wie folgt (u.U.) vor, z.B.:

01.12.99

11.1997

1998

01

27.04.1996

26.3.1999

u.s.w.

Schauder

Eine solche Tabelle exakt nach Jahren zu sortieren ist unmöglich!!! Eigentlich ja, aber nicht für ein Lordchen Und schon gar nicht, wenn in die "Guru"-Kiste gegriffen wird.

Ist hinter der noch ahnungslosen Tabelle der obige Code hinterlegt, so braucht der Anwender den Mauspfeil in die allererste Zelle der Spalte zu setzen, deren Datumsangaben für die Sortierung maßgeblich sind. Hier klickt man auf die Rechte Maustaste, es erfolgt eine Frage, ob sortiert werden soll. Wenn nein, erscheint das gewohnte Pulldown-Menü. Wenn aber ja geklickt wird, ermittelt das Programm den Bereich der Tabelle, bis zu welcher Spalte hier Einträge gemacht wurden. In einer freien Spalte, werden temporäre Daten abgelegt. Das Programm durchläuft nun die gesamte Spalte von oben nach unten und prüft die Einträge. Aus den Einträgen wird jeweils aber nur das Jahr in der Schreibweise: JJJJ extrahiert und in die gleichen Zeile der temporären Spalte eingetragen. Hier befindet sich auch ein besonderer Trick, der mit der DatePart-Funktion möglich ist:

If f <> 0 Then
         Cells(nCell.Row, x + 1).Value = DatePart("yyyy", nCell.Text)
ElseIf nCell.Text <> "" Then
         j = "1." + nCell.Text
         Cells(nCell.Row, x + 1).Value = DatePart("yyyy", j)
End If
Das hat etwas mit den Systemeinstellungen zu tun, die Tage, Monate und das Jahr werden nämlich mit einem "." getrennt. Findet die DatePart-Funktion aber keinen ".", so wird ein fiktives Jahr ausgegeben, aber wenn eine Zahl mit "." vorliegt, so wird exakt nach dem Jahr gesplittet - genau das machten wir mit j="1."+"1999" wir fügen klammheimlich einen xbeliebigen Monat hinzu, wichtig ist ja das Jahr.

Voila, sind alle Daten umgewandelt, wird sortiert.

Ich habe die temporäre Spalte noch in der Tabelle gelassen, damit man sieht, wie exakt sortiert wurde.


cu
Lordchen
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Excel - VBA399ModeratorMoni21.09.01 10:05
Re: Excel - VBA354unbekannt21.09.01 20:04
Re: Excel - VBA294ModeratorMoni21.09.01 20:14
Re: Excel - VBA301unbekannt21.09.01 20:42
Ach so, ja,301unbekannt21.09.01 20:49
Re: Ach so, ja,369ModeratorMoni21.09.01 21:08
Re: Ach so, ja,278unbekannt21.09.01 21:59
Done! Lordchen Cells-Wirbelsturm!286unbekannt23.09.01 14:47
Danke276ModeratorMoni23.09.01 15:52
Gern geschehen ...277unbekannt23.09.01 18:57

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel