Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
864to868
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
864to868
864to868
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Flexible Nummerierung/Sortierung

Flexible Nummerierung/Sortierung
05.05.2007 22:01:00
Nikolaus
Hi!
Ich habe eine fortlaufend nummerierte Liste:
[Nummer;Name]
1 Fluß
2 Bach
3 Gänse
4 Ente
5 Lachs
In einer weiteren Spalte [C] möchte ich eine Priorisierung vornehmen, aber der Wert darf nur einmal vorkommen. Wenn ich also beim nochmaligen Überarbeiten eine Priorität ändere, sollen alle anderen Werte entsprechend ändern, sodaß kein doppelter Wert vorkommt.
[Nummer;Name;Priorität]
1 Fluß 4
2 Bach 3
3 Gänse 2
4 Ente 1
5 Lachs 5
Mir fällt nun ein, daß Ente doch Prio 4 haben sollte; dadurch sollte Fluß Prio 1 bekommen (den freigewordenen Wert). Wenn ich nun einen weiteren Wert einfüge, sollten die Prioritäten entsprechend erweitert werden
[Nummer;Name;Priorität]
1 Fluß 1
2 Bach 3
3 Gänse 2
4 Ente 4
5 Lachs 5
6 Fuchs 6
Wie kann ich das automatisiert lösen?
Vielen Dank!
Nikolaus

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Flexible Nummerierung/Sortierung
06.05.2007 01:23:00
Luc:-?
Hallo Nik,
das ist irgendwie nicht logisch! Eigentlich müssten bei deinem Prioritätswechsel doch alle Prioritäten≤4 um 1 aufrücken!? Evtl müssten also 2 Möglichkeiten vorgesehen wdn - Prioritätstausch und -aufrücken. Realisieren kann man das sicher sowohl mit Formeln als auch mit VBA. Bei letzterem müsste dann das Ereignis Worksheet_Change genutzt wdn.
Im Formelfall gestaltet sich das sicher so, dass eine separate Eingabespalte für Prioritäten angelegt wdn muss, aus der die Werte mit einer Formel übernommen wdn. Diese kann dann auch feststellen, wo der gerade eingegebene Wert noch auftritt und von diesem "Doppel" ausgehend einen Formelteil aktivieren, der die eingetragene Priorität entsprechend mindert. Der einfache Austausch könnte evtl etwas komplizierter sein, zumindest, wenn man beide Möglichkeiten vorsehen will. Außerdem sollten dann ab und zu die ermittelten Prioritäten manuell als Werte in die Eingabespalte zurückgespeichert wdn, damit das Ganze auf die Dauer nicht zu kompliziert wird. Evtl auch ganz auf manuelle Berechnung umstellen. Aber das ist mehr was für Formelfreaks wie WF & Co (siehe Excelformeln).
Mit VBA scheint das deutlich einfacher zu sein, schon weil keine Formelspalte benötigt wird. Die Veränderung löst das o.g. Ereignis aus, dem man im (Klassen-)Modul des TabBlattes eine kleine Prozedur zuordnet, die feststellt, ob die Änderungszelle (Target) eine Proritätenzelle ist und dann ein Makro aufruft (in einem normalen Modul), das (je nach Fallunterscheidung) die signifikanten Zellen im Durchlauf (Schleife) ermittelt und ihren Inhalt entsprechend ändert.
Mit dieser Vorgabe sollte auch einer der vielen VBA-interessierten Anfänger hier im Forum (vielleicht auch du selbst?) zu einer brauchbaren Lösung kommen.
Gruß + SWE
Luc :-?

Anzeige
AW: Flexible Nummerierung/Sortierung
06.05.2007 07:32:26
Erich
Hallo Nikolaus,
die folgende VBA-Lösung gehört in das Modul der Tabelle.
Sie benutzt Spalte D als Eingabespalte für die zu ändernde Priorität,
bei Eingabe eines neuen Wertes in Sp. B wird eine neue Priorität vergeben:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZ
If Target.Cells.Count > 1 Or Target.Row = 1 Then Exit Sub
Application.EnableEvents = False
If Not Intersect(Target, Columns(2)) Is Nothing Then
If IsEmpty(Target) Then
Target.Offset(0, 1).ClearContents
ElseIf IsEmpty(Target.Offset(0, 1)) Then
Target.Offset(0, 1) = WorksheetFunction.Max(Columns(3)) + 1
End If
ElseIf Not Intersect(Target, Columns(4)) Is Nothing Then
If IsNumeric(Target) And Target > 0 Then
lngZ = Evaluate("=MATCH(" & Target & ",C:C,0)")
If IsNumeric(lngZ) Then Cells(lngZ, 3) = Target.Offset(0, -1)
Target.Offset(0, -1) = Target
Target.ClearContents
End If
End If
Application.EnableEvents = True
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Problem gelöst? (owT)
08.05.2007 20:21:00
Erich

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige