Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1568to1572
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
Inhaltsverzeichnis

Excel-VBA Schleifen und vergleich

Excel-VBA Schleifen und vergleich
27.07.2017 21:30:42
samsam
Hallo Liebe Forum Nutzer und Excel/VBA Experte,
ich persönlich arbeite seit einige Wochen mit VBA. Die Einarbeitung hat mit der zeit geklappt. Ich habe eine Aufgabe, welches ich durch VBA lösen muss. Habe leider aktuell dafür nicht genügend Wissen. Ich würde mich sehr freuen, wenn mir jemand hierbei helfen würde.. Muss die Aufgabe nächste Woche abgeben und hab richtig schiss :/
Meine Aufgabe ist:
Im Excel habe ich 3 Registerkarten. im 1. Registerkarten stehen Daten in einer Tabelle die von irgendeiner Quelle geholt wurden. In dieser Tabelle sind IDs, Namen, Aufgaben usw. aufgelistet. Jedoch sind nicht alle ID und Namen vorhanden, die volständige Liste der IDs und Namen sind in der 2.Registerkarte aufgelistet. Mein Problem ist jetzt: Durch ein Button soll es möglich sein mit schleifen die einzelnen id und namen in 1.Registerkarte mit der 2.Registerkarte zu vergleichen und wenn eine Übereinstimmung gibt, sollen dann die id und namen und aufgaben in die 3.Registerkarte aufgeschrieben bzw, eingefügt werden. ABER: Wenn mit der ID die im 2.Registerkarte keine Übereinstimmungen im 1.Registerkarte ist, dann soll die ID trotzdem in die 3.Registerkarte eingefügt werden und die spalten für Aufgabe einfach leer gelassen werden.
Das ist meine Aufgabe mit dem ich seit Wochen herumkämpfe, er wäre wirklich sehr nett und lieb, wenn einer mir den richtigen weg zeigen würde.
Liebe Grüße
Euer Forum-Neuling

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
27.07.2017 22:34:56
Werner
Hallo,
Frage: können die ID / Namen / Aufgaben auch mehrfach vorkommen?
Beispiel:
ID......Name........Aufgabe
5-------Müller------Excel
5-------Müller------Word
Gruß Werner
AW: Nachfrage
28.07.2017 08:29:28
samsam
Hallo Werner,
gleiche ID kann nicht zwei mal vorkommen. D.h 1 ID ist für 1 Name und für 1 Aufgabe
ABER: 1 Name könnte eine weitere ID haben mit einer anderen Tätigkeit d.h. ID: 5 Name: Müller Aufgabe: Textverarbeitung und ID: 8 Name: Müller Aufgabe: VBA-Excel
Anzeige
AW: Nachfrage
28.07.2017 09:24:26
Werner
Hall,
würde ich so machen:
Option Explicit
Public Sub Kopieren()
Dim loLetzteQ As Long
Dim loLetzteZ As Long
Dim raBereich As Range
loLetzteQ = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row
loLetzteZ = Worksheets("Tabelle3").Cells(Rows.Count, 1).End(xlUp).Row + 1
With Worksheets("Tabelle2")
.Range("A2:B" & loLetzteQ).Copy Worksheets("Tabelle3").Range("A" & loLetzteZ)
End With
With Worksheets("Tabelle3")
loLetzteZ = .Cells(.Rows.Count, 1).End(xlUp).Row
Set raBereich = .Range(.Cells(2, 3), .Cells(loLetzteZ, 3))
raBereich.FormulaLocal = "=WENNFEHLER(SVERWEIS(A2;Tabelle1!A:C;3;FALSCH);"""")"
raBereich.Value = raBereich.Value
End With
Set raBereich = Nothing
End Sub
Gruß Werner
Anzeige
AW: Nachfrage
28.07.2017 14:27:46
samsam
Hallo Werner,
dir auch sehr herzlichen Dank für dein Antwort...das hier werde ich auch mal ausprobieren. Der code von Klaus klappt bei mir einwandfrei... Wirklich ein sehr tolles Tool...:)))
Gerne u.Danke für die Rückmeldung. o.w.T.
28.07.2017 15:01:46
Werner
AW: Excel-VBA Schleifen und vergleich
27.07.2017 22:38:12
KlausF
Hi,
ich gehe mal davon aus, dass jede ID eindeutig einem Namen zugeordnet ist.
Und falls ich Dich richtig verstanden haben sollte, dann:
Sub Vergleich()
Dim strID As String
Dim i As Long
Dim foundRow As Long
Dim rngSearch As Range
Worksheets("Tabelle2").UsedRange.Copy Destination:=Worksheets("Tabelle3").Range("A1")
Worksheets("Tabelle1").Range("A1:E1").Copy Destination:=Worksheets("Tabelle3").Range("A1")
Application.ScreenUpdating = False
With Worksheets("Tabelle3")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
strID = Range("A" & i)
Set rngSearch = Worksheets("Tabelle1").Range("A2:A" & Cells(Rows.Count, "A").End(xlUp). _
Row). _
Find(What:=strID, Lookat:=xlWhole, LookIn:=xlValues, MatchCase:=True)
If Not rngSearch Is Nothing Then
foundRow = rngSearch.Row
Worksheets("Tabelle1").Range("A" & foundRow & ":E" & foundRow).Copy _
Destination:=Worksheets("Tabelle3").Range("A" & i)
End If
Next i
End With
End Sub
Gruß
Klaus
Anzeige
AW: Excel-VBA Schleifen und vergleich
28.07.2017 08:31:32
samsam
Hallo Klaus,
vielen Dank für dein Antwort. Ich werde es mal jetzt ausprobieren.
AW: Excel-VBA Schleifen und vergleich
28.07.2017 10:59:34
samsam
Hallo Klaus,
es klappt vielen Dank :) ich bin jetzt dabei meine Aufgabe zu erweitern.
Danke für die Rückmeldung owT
28.07.2017 13:45:43
KlausF
nur zur Info, hier auch noch...
27.07.2017 22:49:22
Werner
Hallo,
was ich gerade noch gesehen habe. Hier wurde der Beitrag auch noch gepostet.
http://www.vba-forum.de/forum/View.aspx?ziel=38515-Excel_VBA
@Forum-Neuling:
Wenn schon Crossposting, dann bitte mit Hinweis darauf in den verschiedenen Foren. Im VBA-Forum ist auch kein Hinweis auf deinen Post hier.
Gruß Werner
AW: nur zur Info, hier auch noch...
28.07.2017 08:30:33
samsam
Ahhh Ok. vielen Dank für die Info.. Werde das nächste mal darauf aufpassen.
Anzeige
AW: nur zur Info, hier auch noch...
28.07.2017 20:14:19
Christian
Hey hey,
just my two cents, hier ein ganz anderer Ansatz:
1) In ein normales Modul:
Sub machen()
' Tabelle1
Dim r1 As Range
Set r1 = Tabelle1.Cells(1, 1).CurrentRegion
Set r1 = r1.Resize(r1.Rows.Count - 1).Offset(1)
' Dictionary
Dim e   As Variant
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Dim Mitarbeiter As clsStaff
' Tabelle1 zeilenweise dem Object Mitarbeiter zuweisen und dann ins Dictionary schreiben
For Each e In r1.Rows
' Neue Instanz von Mitarbeiter erzeugen
Set Mitarbeiter = New clsStaff
' Felder des Objectes Mitarbeiter mit Werten der akt. Zeile füllen
With Mitarbeiter
.ID = e.Cells(1, 1)
.Name = e.Cells(1, 2)
.Aufgabe = e.Cells(1, 3)
.Schwierigkeitsgrad = e.Cells(1, 4)
.Kentnisse = e.Cells(1, 5)
End With
' Object Mitarbeiter ins Dictionary schreiben
dict.Add Mitarbeiter.ID, Mitarbeiter
' Nächste Zeile
Next e
' Tabelle2
Dim r2 As Range
Set r2 = Tabelle2.Cells(1, 1).CurrentRegion
Set r2 = r2.Resize(r2.Rows.Count - 1).Offset(1)
' Werte aus Tabelle 2 ins Dictionary schreiben.
' Im Dictionary ist die ID Primärschlüssel (unique).
' Gibt es die ID aus Tabelle2 im Dictionary wird kein weiterer Eintrag
' angelgt
For Each e In r2.Rows
Set Mitarbeiter = New clsStaff
With Mitarbeiter
.ID = e.Cells(1, 1)
.Name = e.Cells(1, 2)
End With
' ID-Check
If Not dict.exists(Mitarbeiter.ID) Then
dict.Add Mitarbeiter.ID, Mitarbeiter
End If
Next e
' Dictionary in Tabelle3 schreiben
Dim t3 As Range
Set t3 = Tabelle3.Cells(1, 1)
Dim i As Long
i = 1
' Alte Werte in Tabelle3 löschen
With t3
If .Cells(1, 1).CurrentRegion.Rows.Count > 1 Then
'.Cells(1, 1).CurrentRegion.Offset(1, 0).Resize(.CurrentRegion.Rows.Count - 1). _
Interior.Color = rgbAliceBlue
.Cells(1, 1).CurrentRegion.Offset(1, 0).Resize(.CurrentRegion.Rows.Count - 1).Clear
End If
' Dictionary durchlaufen und Werte schreiben
For Each e In dict.items
' Spaltenoffset
With .Offset(i, 0)
.Offset(0, 0) = e.ID
.Offset(0, 1) = e.Name
.Offset(0, 2) = e.Aufgabe
.Offset(0, 3) = e.Schwierigkeitsgrad
.Offset(0, 4) = e.Kentnisse
End With
' Zeilenzähler
i = i + 1
Next e
End With
End Sub
2) Klassenmodul einfügen und in clsStaff umbenennen
3) In Klassenmodul einfügen:
Public ID As String
Public Name As String
Public Aufgabe As String
Public Schwierigkeitsgrad As String
Public Kentnisse As String

Viel Spass beim Ausprobieren und Lernen!!
Christian
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige