florian86
Goto Top

VBA suchen und kopieren Anwesenheitsliste

Hallo Zusammen,

wie kann ich diese Anwesenheitsliste...

anwesenheit

... gegen die Datenbank prüfen und das Datum des Anwesenden (Nr.) zur jeweiligen Schulung reinschreiben.

datenmatrix

Ich müsste ja prüfen, welche Schulungsnummer in der Anwesenheitstabelle eingetragen ist
und Spalte A eine Range prüfen ob die ungleich Leer sind bzw. durchlaufen wo Ausweisnummern eingetragen sind.

Dann müsste ich die Ausweisnummer in der Datenmatrix suchen und dort zur jeweiligen Schulung
das Datum eintragen.

Vielleicht kann mir jemand weiterhelfen...

MfG

Florian86

Content-Key: 551337

Url: https://administrator.de/contentid/551337

Printed on: April 25, 2024 at 13:04 o'clock

Member: beidermachtvongreyscull
beidermachtvongreyscull Feb 25, 2020 at 10:25:36 (UTC)
Goto Top
Moin,

ich würde bei so etwas erstmal davon ausgehen, dass Menschen und Maschine damit arbeiten sollen.

Das Problem ist meiner Meinung nach dann, dass so, wie Maschinen am besten mit Daten umgehen können, Menschen diese meistens nicht mehr so doll lesen können.

Ergo:
Ich würde, wenn ich die obere Tabelle als Eingabeformular verstehen soll, in einer weiteren Tabelle die eingegebenen Daten maschinenkonform aufbereiten.
Dasselbe gilt auch für die zweite Tabelle.

Wenn Du das nämlich machst, holst Du Dir nicht das Leben auf der Suche nach einem geeigneten Algo, sondern läufst zeilen- und spaltenweise durch.
Mitglied: 143127
Solution 143127 Feb 25, 2020 updated at 10:43:57 (UTC)
Goto Top
Range.Find method (Excel) ist dein Freund.
Und mit Range.Offset dann die Ausgabezelle die du mit "Range.Find" gefunden hast um deine gewünschte Schulung nach rechts verschieben, dort die Daten reinschreiben fertsch.
Member: Florian86
Florian86 Feb 26, 2020 at 12:05:19 (UTC)
Goto Top
das hat super funktioniert Danke....

Jetzt stehe ich aber leider vor dem Problem das ich die Zellen der Spalte A durchlaufen will und die Werte dann in die Datenmatrix schreiben möchte. Im Code beziehe ich mich immer noch auf A4, da ich nicht weis wie ich das machen muss.

Sub copy_data()

Dim ausweis As Range
Dim schulungsnummer As Range
Dim datum As Range


Set ausweis = Worksheets("Anwesenheit").Range("A4")  
Set schulungsnummer = Sheets("Anwesenheit").Range("B1")  
Set datum = Sheets("anwesenheit").Range("B2")  

If schulungsnummer = "" Then                                       

        MsgBox "Schulungsnummer eingeben"                           
        Exit Sub
    
End If

For Each c In Sheets("anwesenheit").Range("A4:A500")  

        If schulungsnummer = "1" Then                                     
               
              Sheets("Datenbank").Activate                                 
              Cells.Find(what:=ausweis, LookIn:=xlFormulas).Activate    
              ActiveCell.Offset(0, 5).Activate                           
              ActiveCell.Value = datum                                    
                            
            
        End If
        
Next c
    
End Sub
Mitglied: 143127
Solution 143127 Feb 26, 2020 updated at 13:04:39 (UTC)
Goto Top
Im Code beziehe ich mich immer noch auf A4, da ich nicht weis wie ich das machen muss.
In der Laufvariablen c hast du die aktuelle Zeile, damit kannst du mit
c.Value
auf den Inhalt der Zelle zugreifen.
Member: Florian86
Florian86 Feb 26, 2020 at 14:06:28 (UTC)
Goto Top
Hallo habs nun hin bekommen,

Sub copy_data()

Dim ausweis As Range
Dim schulungsnummer As Range
Dim datum As Range
Dim celladress As String

Set ausweis = Worksheets("Anwesenheit").Range("A4")  
Set schulungsnummer = Sheets("Anwesenheit").Range("B1")  
Set datum = Sheets("anwesenheit").Range("B2")  

If schulungsnummer = "" Then                                      'Prüfung Schulungsnummer = Leer  

        MsgBox "Schulungsnummer eingeben"                         'Wenn Leer Messagebox  
        Exit Sub
    
End If

For Each c In Sheets("anwesenheit").Range("A4:A500")  

        If schulungsnummer = "1" And c <> "" Then                                     'Prüfung welche Schulungsnummer  
              
              Sheets("Datenbank").Activate                                'aktiviere Tabelleblatt "Datenbank"  
              Cells.Find(what:=c, LookIn:=xlFormulas).Activate            'suche nach Objekt "celladress" und aktiviere die Zelle  
              ActiveCell.Offset(0, 5).Activate                            'springe 5 Spalten nach rechts  
              ActiveCell.Value = datum                                    'schreibe Datum aus Anwesenheitsliste  
                            
            ElseIf schulungsnummer = "2" Then  
        
              Sheets("Datenbank").Activate                                'aktiviere Tabelleblatt "Datenbank"  
              Cells.Find(what:=c, LookIn:=xlFormulas).Activate      'suche nach Objekt "ausweis" und aktiviere die Zelle  
              ActiveCell.Offset(0, 8).Activate                            'springe 8 Spalten nach rechts  
              ActiveCell.Value = datum                                    'schreibe Datum aus Anwesenheitsliste  
        
            ElseIf schulungsnummer = "3" Then  
                   
              Sheets("Datenbank").Activate                                'aktiviere Tabelleblatt "Datenbank"  
              Cells.Find(what:=c, LookIn:=xlFormulas).Activate      'suche nach Objekt "ausweis" und aktiviere die Zelle  
              ActiveCell.Offset(0, 11).Activate                           'springe 11 Spalten nach rechts  
              ActiveCell.Value = datum                                    'schreibe Datum aus Anwesenheitsliste  
                
            ElseIf schulungsnummer = "4" Then  
        
              Sheets("Datenbank").Activate                                'aktiviere Tabelleblatt "Datenbank"  
              Cells.Find(what:=c, LookIn:=xlFormulas).Activate      'suche nach Objekt "ausweis" und aktiviere die Zelle  
              ActiveCell.Offset(0, 14).Activate                           'springe 14 Spalten nach rechts  
              ActiveCell.Value = datum                                    'schreibe Datum aus Anwesenheitsliste  
            
            Else: Exit For
            
        End If
        
Next c
    
End Sub
Mitglied: 143127
143127 Feb 26, 2020 updated at 14:12:31 (UTC)
Goto Top
Wenn du jetzt noch die Schulungsnummer in den Offset einbaust kannst du dir die If Abfragen komplett sparen und somit die ganzen doppelten Codebestandteile face-wink
Member: Florian86
Florian86 Feb 26, 2020 at 14:42:13 (UTC)
Goto Top
jetzt bin ich raus ^^
Mitglied: 143127
Solution 143127 Feb 26, 2020 updated at 15:23:37 (UTC)
Goto Top
Zitat von @Florian86:

jetzt bin ich raus ^^
Wie, bei einer einfachen Multiplikation face-smile?!

Vielleicht regt das deine Zellen ja etwas an face-wink
ActiveCell.Offset(0, 4 + ((schulungsnummer - 1) * 3)).Activate