Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1804to1808
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

VBA If über mehrere Tabellenblätter

VBA If über mehrere Tabellenblätter
11.01.2021 13:00:38
Juls
Hallo zusammen,
ich habe ein Problem bei einer If-Verknüpfung. Ich habe in zwei Tabellenblättern Werte, einmal in Spalte A, einmal in Spalte G. Teilweise stehen Werte in beiden Blättern. Ich möchte nun, dass bei den Werten, die in beiden Tabellenblättern vorhanden sind die jeweilige komplette Zeile in ein 3. Tabellenblatt geschrieben wird.
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
ZeileMax = .UsedRange.Rows.Count
n = 2
For Zeile = 2 To ZeileMax
If .Worksheets("Stammdaten").Cells(Zeile, 1).Value = Worksheets("Tickets").Cells(Zeile, 7) Then
.Rows(Zeile).Copy Destination:=Worksheets("Alt Offen").Rows(n)
n = n + 1
End If
Next Zeile
End With
Der Kopiervorgang funktioniert mit anderen If-Bedingungen perfekt, ich weiß nur nicht wie ich die Werte aus Spalte A in einem mit den Werten aus Spalte G im anderen Blatt vergleichen kann.
Vielen Dank für eure Hilfe.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA If über mehrere Tabellenblätter
11.01.2021 13:11:21
ralf_b
Entweder du machst das mit zwei verschachtelten Schleifen oder du machst eine schleife und suchst bei jedem Eintrag ob dieser auch in dem anderen blatt drin ist. z.b mit
set rng = Worksheets("Tickets").Columns(7).find(Worksheets("Stammdaten").Cells(Zeile, 1).Value)
if not rng is nothing then
'gefunden
end if 

AW: VBA If über mehrere Tabellenblätter
11.01.2021 13:17:21
Werner
Hallo,
so?
Public Sub bbb()
Dim i As Long, raKopie As Range, loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Stammdaten")
For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
If WorksheetFunction.CountIf(Worksheets("Tickets").Columns("G"), .Cells(i, "A")) > 0  _
Then
If raKopie Is Nothing Then
Set raKopie = .Cells(i, "A")
Else
Set raKopie = Union(raKopie, .Cells(i, "A"))
End If
End If
Next i
End With
If Not raKopie Is Nothing Then
With Worksheets("Alt Offen")
loLetzte = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row
raKopie.EntireRow.Copy .Cells(loLetzte, "A")
End With
End If
Set raKopie = Nothing
End Sub
Gruß Werner
Anzeige
AW: VBA If über mehrere Tabellenblätter
11.01.2021 15:00:38
Juls
Danke für eure Hilfe, ich habe jetzt noch eine andere Idee gehabt, da ich noch mehrere If-Bedingungen vorher brauche.
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
Dim Datum As Double
Dim Found As Object
Datum = 43646
With Worksheets("Stammdaten")
ZeileMax = .UsedRange.Rows.Count
n = 2
For Zeile = 2 To ZeileMax
If .Cells(Zeile, 6).Value Like "[99817]*" And .Cells(Zeile, 27).Value = "In Prüfung" Then
Set Found = Worksheets("Stammdaten").Cells(Zeile, 7).Find(Worksheets("Tickets").Columns(1))
If Found Is Nothing Then
.Rows(Zeile).Copy Destination:=Worksheets("Alt In Prüfung").Rows(n)
n = n + 1
Else
.Rows(Zeile).Copy Destination:=Worksheets("Alt Offen").Rows(n)
n = n + 1
End If
End If
Next Zeile
End With
Das Problem hierbei ist, dass er mir die Werte nicht nach "In Püfung" und "Offen" schmeißt sondern alle bei "In Prüfung" landen. Die Werte, die im Blatt Ticktes gefunden werden sollen allerdings ins Blatt "Offen" geschrieben werden. Vielleicht hat jemand von euch zu diesem Problem eine Lösung..
Danke vielmals!
Anzeige
AW: VBA If über mehrere Tabellenblätter
11.01.2021 15:20:36
ralf_b
kurz gesagt ist deine Suche mit find Mist.
du suchst die ganze Spalte und nicht den Wert einer zelle.
du suchst auch nicht in Tickets . sondern du suchst im Stammdaten nach Tickets.Spalte(1)
wenn du n als Zeilenzähler nutzt dann aber nur für ein Blatt, weil in dem anderen Blatt möglicherweise nicht die gleiche Zeile gefüllt werden soll. Aber das hättest du erst nach erfolgreichem Find () herausgefunden. Schau dir die find() hilfe mal genauer an.
AW: VBA If über mehrere Tabellenblätter
11.01.2021 16:18:07
Juls
Gibt es denn eine Andere Möglichkeit als über Find()?
AW: VBA If über mehrere Tabellenblätter
11.01.2021 16:19:05
Juls
With Worksheets("Stammdaten")
ZeileMax = .UsedRange.Rows.Count
n = 2
For Zeile = 2 To ZeileMax
If .Cells(Zeile, 6).Value Like "[99817]*" And .Cells(Zeile, 27).Value = "In Prüfung" Then
Set Found = Worksheets("Tickets").Columns(1).Find(Worksheets("Stammdaten").Cells(Zeile, 7), LookIn:=xlValues, LookAt:=xlWhole)
If Found Is Nothing Then
.Rows(Zeile).Copy Destination:=Worksheets("Neu In Prüfung").Rows(n)
n = n + 1
Else
.Rows(Zeile).Copy Destination:=Worksheets("Neu Offen").Rows(n)
n = n + 1
End If
End If
Next Zeile
End With
Anzeige
AW: VBA If über mehrere Tabellenblätter
11.01.2021 16:27:19
Werner
Hallo,
du scheinst das hier für eine Raterunde zu halten.
Kein Mensch weiß was du letztlich eigentlich vor hast.
Kein Mensch weiß, was in deiner Spalte G für Daten stehen und nach was du letztlich dort suchst/prüfst.
Und es wird auch nicht dadurch besser, dass du hier einen Code einstellst, der nicht funktioniert.
Also bitte deine Datei hier hochladen und mal bitte konkret erklären, was das Makro denn eigentlich tun soll.
Gruß Werner
AW: VBA If über mehrere Tabellenblätter
11.01.2021 17:03:21
ralf_b
vielleicht geht das ja in die richtige richtung
With Worksheets("Stammdaten")
' Dim ZeileMax As Long, n As Long, m As Long, Zeile As Long
'Dim Found As Range
ZeileMax = .UsedRange.Rows.Count
n = Worksheets("Neu In Prüfung").Cells(Rows.Count, 1).End(xlUp).Row
m = Worksheets("Neu Offen").Cells(Rows.Count, 1).End(xlUp).Row
For Zeile = 2 To ZeileMax
If .Cells(Zeile, 6).Value Like "[99817]*" And .Cells(Zeile, 27).Value = "In Prüfung"  _
Then
Set Found = Worksheets("Tickets").Columns(1).Find(what:=.Cells(Zeile, 7).value,  _
LookIn:=xlValues, LookAt:=xlWhole)
If Not Found Is Nothing Then  'NOT wenn die suche erfolgreich war ist Found NICHT  _
nothing
.Rows(Zeile).Copy Destination:=Worksheets("Neu In Prüfung").Cells(n, 1)
n = n + 1
Else
.Rows(Zeile).Copy Destination:=Worksheets("Neu Offen").Cells(m, 1)
m = m + 1
End If
End If
Next Zeile
Application.CutCopyMode = False
End With

Anzeige
AW: VBA If über mehrere Tabellenblätter
11.01.2021 17:11:41
Juls
Hallo,
tut mir leid für die unklare Ausdrucksweise. Anbei meine anonymisierte Beispieldatei.
https://www.herber.de/bbs/user/142929.xlsm
Das Makro soll folgendes tun. Es soll die Daten aus dem Blatt "Stammdaten" in die anderen Tabellenblätter sortieren.
Dazu soll es anhand einer If-Bedingung die Zeilen nach Spalte J dem Inbetriebnahmedatum nach neu und alt filtern.
Dann sollen in Splate F die Zeilen ignoriert werden, in denen nicht 99817; * steht.
Anschließend sollen die Zeilen, in denen in Splate AA "Geprüft" steht in das jeweilige Tabellenblatt geschrieben werden.
Die Zeilen, die in Spalte AA "in Prüfung" stehen haben sollen dann mit dem Tabellenblatt "Tickets" verglichen werden. Steht die Nr. aus Spalte A im Blatt "Stammdaten" in Spalte G im Blatt "Tickets" kommt die Zeile ins Blatt "Offen". Steht sie nicht dort ins Blatt "in Prüfung"
Ich hoffe ich konnte es halbwegs verständlich umschreiben und danke euch für eure Hilfe!
Anzeige
AW: VBA If über mehrere Tabellenblätter
11.01.2021 23:44:12
ralf_b
Hallo Juls,
ich hoffe deine Bedingungen habe ich richtig umgesetzt. So ganz kapiert hab ich's aber nicht. ;)
Ich gehe davon aus das die Filterung nach der Postleitzahl nicht das Ende der Geschichte sein wird.
Aber die Prüfung geht hier erst nach PLZ, dann nach Status und dann nach Datum.
Sub MaStR()
Dim Zeile As Long, ZeileMax As Long, n As Long, m As Long
Dim Datum As Double, dtCheck As Double
Dim Found As Range
Dim suchwert
Dim sDest As String
Application.ScreenUpdating = False
Datum = Sheets("Start").Range("M9").Value '43646
With Worksheets("Stammdaten")
ZeileMax = .cells(Rows.count,1).end(xlup).row
n = 2
For Zeile = 2 To ZeileMax
sDest = ""
dtCheck = .Cells(Zeile, 10).Value ' inbetriebnahme
suchwert = .Cells(Zeile, 1).Value 'objektnr.
If .Cells(Zeile, 6).Value Like "99817*" Then 'Adresse
Select Case .Cells(Zeile, 27).Value 'status?
Case "Geprüft"
If dtCheck  "" Then
n = Sheets(sDest).Cells(Rows.Count, 1).End(xlUp).Row
If n = 1 Then  .Rows(1).Copy Destination:=Sheets(sDest).Rows(1): Sheets(sDest). _
Columns.AutoFit  'Spaltenüberschriften
.Rows(Zeile).Copy Destination:=Sheets(sDest).Rows(n+1) 'Datenzeile
End If
Next Zeile
Application.ScreenUpdating = True
Application.CutCopyMode = False
End With
End Sub
gruß
rb
Anzeige

335 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige