Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Daten zuordnen und sortieren
#1
Hallo 
Ich (Neuling)habe mich beim Versuch an einer Tabelle

.xlsm   Geburtstagsliste kontinuirlich.xlsm (Größe: 39,48 KB / Downloads: 19)
etwas überschätzt und bräuchte mal die Hilfe von kompetenteren Mitmenschen.
Einiges habe ich ja selber zusammengebastelt aber ich bin sicher das das noch mit einen kürzeren Code geht.
Die Eingabe für Januar auf der Tabellenblatt Geburtstagstage funktioniert reibungslos, aber ich bekomme die restlichen Monate nicht hin.
Von den Restlichen Tabellenblättern ganz zu schweigen.
Vieleicht hat da jemand eine Idee wie ich es auch auf einen anderen Weg erreichen kann falls es mit diesen nicht geht.

So soll es aussehen:Nach Eingabe auf dem TB1 werden die Daten dem jeweiligen TB und dem entsprechenden Monat zugeordnet.



Danke für jede erdenkliche Hilfe

Revilo27
Antworten Top
#2
Hallo Revilo,

ich will jetzt erst mal an Deinem Code nichts verbessern, obwohl es da viel zu tun gäbe. Ich konzentriere mich auf die Frage, erst mal auf den Monat.

Um die Eingabe flexibel in jeden Monat zu bringen, bräuchtest Du eine Regel, wie man die genaue Spaltennummer für den jeweiligen Eintrag bekommt.
Du fängst in Deinem Blatt mit Spalte A für den Januar an und alle 3 Spalten kommt der nächste Monat. Das wäre dann schon mal die Regel, alle 3 Spalten ein neuer Monat: 1, 4, 7, 10 usw. zu den Monaten 1, 2, 3, 4 usw.
Rechnen tu ich so in etwa
1+3=4+3=7+3=10
Ich tu also von Monat zu Monat immer 3 dazu addieren. Um auf den Februar zu kommen, 1x3, für den März 2x3, für den April 3x3. Und beim Januar? 0x3. Die Zahl, mit der ich die 3 Multipliziere, ist der Monat -1

Das lässt sich besser verarbeiten, wenn Du mit Cells statt mit Range programmierst. Also z.B. statt. Range("A4") dann Cells(4, 1). Den Monat hast Du in B15 eingetragen. Also sieht der Code dann so aus:
Cells(4, 1+3*(Range("b15").Value-1))
Wichtig ist dabei die Klammersetzung wegen Punkt vor Strich ...

Wenn's passt, melde Dich, dann machen wir weiter.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Revilo27
Antworten Top
#3
Hallo Revilo,

wenn ich alles richtig verstanden habe, dann in etwa so:
(Schnell zusammen geschmissen, es gibt noch andere Wege ...)

.xlsm   Geburtstagsliste kontinuierlich.xlsm (Größe: 44,63 KB / Downloads: 7)


Gruß Carsten
Antworten Top
#4
Hallo Schauan
ich habe es mit If Then Elsif gelöst.
Der Code is natürlich Megalang aber funktioniert auch habe ich eine Lösung für das Problem gefunden das ja 2 Bedingungen erfüllt werden mußten.  Erst mußte geschaut werden auf welches TB
dann welcher Monat . Die erste Bedingung erfolgte auch über eine If Then gekoppelt mit Goto.

 If Range("I9") = "Geboren" Then GoTo Step1:                             'Tabelle 1
     If Range("I9") = "Gestorben" Then GoTo Step2:                       'Tabelle 2
        If Range("I9") = "Heirat" Then GoTo Step3:                           'Tabelle 3
            If Range("I9") = "" Then GoTo Step4:

Ich weiß das jemand der sich da besser auskennt das mit einen wesentlich kürzeren Code hinbekommen hätte aber wie geschrieben bin ich absoluter Anfänger in Sachen VBA und hatte als Du geschrieben hattest meinen Code fertig da ich zur Zeit Urlaub habe und deshalb das Netz unsicher gemacht habe und mir meine Lösungen überall zusammengesucht habe.
Solltest Du trotzdem mal über meinen Code schauen wollen setze ich ihn gern noch mal ein. Vileicht hast Du ja dann eine Idee wie es kürzer geht. Ansonsten vielen Dank für Deine Mühe.

Gruß Revilo27
Antworten Top
#5
Hallo DbSam
da ich es nicht richtig kann und es nur durch Ausprobieren hinbekommen habe bleibt mir fast nichts anderes übrig.
Aber keine Angst auch so lernt man und ich bin trotzdem für jeden Tip offen (Kritik eingeschlossen)

Gruß Revilo27
Antworten Top
#6
Hallo Revilo,

ich verstehe Deine Antwort nicht so ganz: Was bleibt Dir nichts anderes übrig?

Frage:
Erfüllt denn mein Beispiel Deine Anforderung?
(In Deinem Beispiel war nur das Geburtstags-Sheet gefüllt und die anderen waren leer. Ich vermutete nur, wie diese aussehen sollen.)

Wie immer: Bei Fragen fragen.


Gruß Carsten
Antworten Top
#7
(28.03.2016, 19:45)DbSam schrieb: Hallo Revilo,

wenn ich alles richtig verstanden habe, dann in etwa so:
(Schnell zusammen geschmissen, es gibt noch andere Wege ...)



Gruß Carsten
Hallo DbSam
Entschuldige bitte, ich hatte die obrige Aussage etwas falsch verstanden.
deswegen

Aber ich habe meine Tabelle hinbekommen und ich muß mir Deinen Code mal in Ruhe anschauen das ich verstehe wie der funktioniert.
Komme aber erst am Mitwoch dazu denn ich muß morgen Früh um 3 aus den Federn und komme erst am Mitwoch wieder.
Danke erst einmal für Deine Mühe.

Gruß Revilo27
Antworten Top
#8
Hallo DbSam
Ich habe mir dein Code angeschaut (der Übrigens bestens funktioniert)
jedoch habe ich keine Ahnung was du da gemacht hast.
Du hast nur einen Bruchteil der Zeilen gebraucht und verstehe nur Bahnhof.

Aber wie gesagt. Läüft wie er soll deshalb nochmal Danke Danke.

Revilo27
Antworten Top
#9
Hallo 27er Revilo,

setze einen Haltepunkt, dann kannst Du mit F8 durch den Code steppen.

Der ist eigentlich ganz simpel:
Zuerst mit der Funktion 'CheckEntries' prüfen, ob in den 3 Feldern etwas erfasst wurde.
Dann diese Werte in 3 Variablen eintragen. Ist nicht unbedingt notwendig, macht aber den folgenden Code lesbarer.

Einen kleinen Trick habe ich angewandt, indem ich die Namen für die DropDown-Liste an die Namen der 3 Sheets angepasst habe.
Deshalb funktioniert dieser Einzeiler Set sh = Sheets(ActiveSheet.Cells(9, 9).Value) zur Auswahl des Sheets.

Danach wird der Monat aus dem Datum und mit diesem Wert die letzte Zeile des Monats im entsprechenden Sheet ermittelt.

Nun muss man nur noch die Werte eintragen:
Mit sh.Cells(iRow, 4 * iMonth)  wird Deine (ausgeblendete) Zelle für das Datum ermittelt und dieses dort eingetragen.
Die 3 sichtbaren Zellen davor werden ebenso befüllt:
    sh.Cells(iRow, (4 * iMonth) - 3) = Day(MyDate)

    sh.Cells(iRow, (4 * iMonth) - 2) = MyName
    sh.Cells(iRow, (4 * iMonth) - 1).FormulaR1C1 = "=DATEDIF(RC[1],TODAY(),""y"")"

Zum Schluss wird sortiert, der zu sortierende Bereich wird ebenso über den Monat * 4 (4 Zellen pro Monat) definiert.
Nun noch die 3 Zellen mit den Quellwerten leeren und fertig.

Im Normalfall gehört noch ein Errorhandler drum herum, damit Fehler sauber abgefangen werden.



Gruß Carsten
[-] Folgende(r) 1 Nutzer sagt Danke an DbSam für diesen Beitrag:
  • Revilo27
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste