PDA

Vollständige Version anzeigen : Spalten aus zwei Exceltabellen zusammenkopieren


hans35_66
21.08.2011, 12:00
Hallo, brauchte mal wieder eure Hilfe.

Ich kopiere aus 2 verschiedenen Exceltabellen in ein neues Tabellenblatt.
aus Tabelle 1 werden die Daten direkt kopiert, aus der zweiten werden bestimmte Daten verglichen wenn Daten gleich sind werden aus verschieden Spalten die Daten angefügt. Das was ich in VBA gemacht habe funktioniert soweit, wenn die Spaltenanzahl von der zweiten Tabelle gleich ist.

Nun ändert sich aber die Spaltenanzal laufend ja nach Export des zweiten Tabellenblattes.

Hier mal mein Code:
Option Explicit

Private objSh As Worksheet

Sub getabgleich()
Dim objWB As Workbook
Dim rng As Range
Dim strFirst As String
Dim lngRow As Long, lngLast As Long, lngEnd As Long, lngC As Long
Dim bolFileMissing As Boolean
On Error GoTo ErrExit


Set objSh = Tabelle1

'Überprüfen ob Dateien vorhanden

For lngRow = 2 To 3
If Dir(objSh.Cells(lngRow, 4), vbNormal) = "" Then
objSh.Cells(lngRow, 8).Font.ColorIndex = 3
bolFileMissing = True
Else
objSh.Cells(lngRow, 8).Font.ColorIndex = 15
End If
Next

'Hinweis
If bolFileMissing Then
MsgBox "Mindestens eine Datei wurde nicht gefunden!", vbExclamation, "Abbruch"
GoTo ErrExit
End If
'Bereich leeren
Range("A9:Z" & Rows.Count).Clear
GMS
'AP
Set objWB = Workbooks.Open(Cells(3, 4).Text)

'Daten aus AP kopieren
With objWB.Sheets(1)
lngLast = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(7, 3), .Cells(lngLast, 3)).Copy objSh.Range("A9")
.Range(.Cells(7, 6), .Cells(lngLast, 6)).Copy objSh.Range("B9")
.Range(.Cells(7, 7), .Cells(lngLast, 7)).Copy objSh.Range("D9")
.Range(.Cells(7, 8), .Cells(lngLast, 8)).Copy objSh.Range("I9")
.Range(.Cells(7, 19), .Cells(lngLast, 19)).Copy objSh.Range("E9")
.Range(.Cells(7, 23), .Cells(lngLast, 23)).Copy objSh.Range("F9")
.Range(.Cells(7, 24), .Cells(lngLast, 24)).Copy objSh.Range("G9")
.Range(.Cells(7, 37), .Cells(lngLast, 37)).Copy objSh.Range("H9")
.Range(.Cells(7, 45), .Cells(lngLast, 45)).Copy objSh.Range("C9")
End With

objWB.Close False

lngEnd = Application.Max(9, objSh.Cells(objSh.Rows.Count, 1).End(xlUp).Row)

Set objWB = Workbooks.Open(Cells(2, 4).Text)


With objWB.Sheets(1)

.Columns(37).Replace Chr(32), "", xlPart, , False, False, False

For lngRow = 9 To lngEnd
If objSh.Cells(lngRow, 3) <> "" Then
Set rng = .Columns(37).Find(What:=Replace(objSh.Cells(lngRow, 3), Chr(32), ""), LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Trim$(rng.Offset(0, 45)) = Trim$(objSh.Cells(lngRow, 2)) Then
.Range(.Cells(rng.Row, 82), .Cells(rng.Row, 83)).Copy objSh.Cells(lngRow, 10)
.Cells(rng.Row, 18).Copy objSh.Cells(lngRow, 12)
.Cells(rng.Row, 10).Copy objSh.Cells(lngRow, 13)
.Cells(rng.Row, 12).Copy objSh.Cells(lngRow, 14)
.Cells(rng.Row, 37).Copy objSh.Cells(lngRow, 15)
Exit Do
End If
Set rng = .Columns(37).FindNext(rng)
Loop While Not rng Is Nothing And strFirst <> rng.Address
End If
End If
Next
End With

objWB.Close False


With objSh.Range("A9:O" & lngEnd)
.Borders(xlInsideHorizontal).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
End With

ErrExit:

GMS True

If Err.Number <> 0 Then
MsgBox "Fehler:" & vbLf & vbLf & Err.Number & vbLf & Err.Description, vbExclamation, "Hinweis"
End If

Set objWB = Nothing
Set objSh = Nothing

End Sub


Im Momment wird aus dem Tabellenblatt 2 die Spalten 37/82/83/18/10und 12 benötigt.

Nun meine Frage dazu, wie schaffe ich es wen sich die Spaltenanzahl laufend ändert, wenn z. B aus Spalte 37 die Spalte 34 wird und ...

Ist es möglich über die Spaltenüberschriften zu gehen, die sind immer gleich.
Die Spaltenüberschriften sind in der ersten Zeile.

Spalte 12 = AP
Spalte 10 = Station
Station18 = AF
Station83 = S-typ
Station82 = S-verfahren
Station18 = V-wert

Die Änderung müste warscheinlich hier passieren nur weis ich nicht wie.

Set objWB = Workbooks.Open(Cells(2, 4).Text)


With objWB.Sheets(1)

.Columns(37).Replace Chr(32), "", xlPart, , False, False, False

For lngRow = 9 To lngEnd
If objSh.Cells(lngRow, 3) <> "" Then
Set rng = .Columns(37).Find(What:=Replace(objSh.Cells(lngRow, 3), Chr(32), ""), LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Trim$(rng.Offset(0, 45)) = Trim$(objSh.Cells(lngRow, 2)) Then
.Range(.Cells(rng.Row, 82), .Cells(rng.Row, 83)).Copy objSh.Cells(lngRow, 10)
.Cells(rng.Row, 18).Copy objSh.Cells(lngRow, 12)
.Cells(rng.Row, 10).Copy objSh.Cells(lngRow, 13)
.Cells(rng.Row, 12).Copy objSh.Cells(lngRow, 14)
.Cells(rng.Row, 37).Copy objSh.Cells(lngRow, 15)
Exit Do
End If
Set rng = .Columns(37).FindNext(rng)
Loop While Not rng Is Nothing And strFirst <> rng.Address
End If
End If
Next
End With

objWB.Close False

Würde mich freuen wenn mir jemand dabei helfen könnte

gruss Hans

Beverly
21.08.2011, 12:40
Hi Hans,

ermittle zuerst die Spaltennummern und schreibe sie auf Variablen. Im weiteren Code verwendest du dann die Variablen anstelle der festen Spantennummern - nach diesem Prinzip:
Dim intSpalte1 As Integer
Dim intSpalte2 As Integer
Dim intSpalte3 As Integer
Dim intSpalte4 As Integer
Dim intSpalte5 As Integer
Dim intSpalte6 As Integer
intSpalte1 = Application.Match("AP", .Rows(1), 0)
intSpalte2 = Application.Match("Station", .Rows(1), 0)
intSpalte3 = Application.Match("AF", .Rows(1), 0)
intSpalte4 = Application.Match("S-typ", .Rows(1), 0)
intSpalte5 = Application.Match("S-verfahren", .Rows(1), 0)
intSpalte6 = Application.Match("V-wert", .Rows(1), 0)
......
.Cells(rng.Row, intSpalte3).Copy usw.

Angenommen wird, dass die Spaltenüberschriften in Zeile 1 stehen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

hans35_66
21.08.2011, 13:49
Danke für die Antwort

nur hab ich da doch damit nicht alles gelöst

hab das hier so gemacht:

With objWB.Sheets(1)

.Columns(37).Replace Chr(32), "", xlPart, , False, False, False

For lngRow = 9 To lngEnd
If objSh.Cells(lngRow, 3) <> "" Then
Set rng = .Columns(37).Find(What:=Replace(objSh.Cells(lngRow, 3), Chr(32), ""), LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Trim$(rng.Offset(0, 45)) = Trim$(objSh.Cells(lngRow, 2)) Then
.Range(.Cells(rng.Row, intSpalte5), ..Cells(rng.Row, intSpalte4)).Copy objSh.Cells(lngRow, 10)
.Cells(rng.Row, intSpalte3).Copy objSh.Cells(lngRow, 12)
.Cells(rng.Row, intSpalte2).Copy objSh.Cells(lngRow, 13)
.Cells(rng.Row, intSpalte1).Copy objSh.Cells(lngRow, 14)
.Cells(rng.Row, intSpalte6).Copy objSh.Cells(lngRow, 15)

Exit Do
End If
Set rng = .Columns(37).FindNext(rng)
Loop While Not rng Is Nothing And strFirst <> rng.Address
End If
End If
Next
End With


aber was ist mir diesen Spalten:


With objWB.Sheets(1)

.Columns(37).Replace Chr(32), "", xlPart, , False, False, False ' <<<<<<<<<<< die Spalte 37
For lngRow = 9 To lngEnd
If objSh.Cells(lngRow, 3) <> "" Then
Set rng = .Columns(37).Find(What:=Replace(objSh.Cells(lngRow, 3), Chr(32), ""), LookIn:=xlValues, _ '<<<<<<<< hier die Spalte 37
LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Trim$(rng.Offset(0, 45)) = Trim$(objSh.Cells(lngRow, 2)) Then '<<<<<<<<<<<< hier der Verweis auf die Spalte 82
.Range(.Cells(rng.Row, intSpalte5), ..Cells(rng.Row, intSpalte4)).Copy objSh.Cells(lngRow, 10)
......
.....
Set rng = .Columns(37).FindNext(rng) '<<<<<<<< hier wieder Spalte 37
Loop While Not rng Is Nothing And strFirst <> rng.Address
End If
End If
Next
End With


Gibt es dazu auch eine Lösung?

gruß Hans

Beverly
21.08.2011, 14:11
Hi Hans,

sorry, ich weiß leider nicht was du meinst.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

hans35_66
21.08.2011, 14:19
Hallo,

zB hier

.Columns(37).Replace Chr(32), "", xlPart, , False, False, False '

mit

.Columns(37). hier wird doch auch auf die Spalte 37 verwiesen, aber die kann ja auch mal Spalte 34 oder 39 sein.

Ich hab gemeint, wie ich dann die Spalte anspreche.

Hoffe ich hab mich nun besser ausgedrückt, tut mir leid wenn ich es vorher umständlich geschrieben habe.

gruß Hans

Beverly
21.08.2011, 14:59
Hi Hans,

genau nach dem selben Prinzip - entsprechend der Übeschrift die Spaltennummer feststellen. Eventuell musst du noch weitere Variablen deklarieren, oder, wenn die schon verwendeten nicht weiter benötigt werden, kannst du die selben Variablen mehrfach benutzen, musst sie allerdings vor dem entsprechenden Code neu feststellen und belegen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

hans35_66
21.08.2011, 19:20
Hallo, entweder stelle ich mich zu dumm oder es fehlt was

hab den Code entsprechen geändert, bekomme aber hier

intSpalte1 = Application.Match("AP", .Rows(1), 0)

.Rows ist grau hinterlegt


die folgende Fehlermeldung:

"Unzulässiger oder nicht ausreichend definierter Verweis"

gruß Hans

Beverly
21.08.2011, 19:48
Hi Hans,

kann ich leider nicht nachvollziehen - bei mir kommt kein Fehler.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

hans35_66
21.08.2011, 20:11
Könnte das damit zu tun haben, das das Tabellenblatt im Hintergrund geöffnet ist und es nicht das aktive Tabellenblatt ist.

Bei dir steht

"With ActiveSheet"

bei mir steht aber

"With objWB.Sheets(1)"

Liegt das vielleicht daran?

gruß Hans

Beverly
22.08.2011, 06:57
Hi Hans,

nein, es muss nicht das gerade aktive sein.

Den "." vor Rows(1) hast du bei dir ergänzt? Wenn er fehlt, kommt zwar ein Laufzeitfehler, aber der gesagt "Typen unverträglich" wenn das Tabellenblatt, auf welches verwiesen wird, nicht das aktive ist (den Pukt habe ich in der Eile vergessen).
Gleichgültig auf welches Tabellenblatt sich der Code bezieht - durch die With-Anweisung und die nachfolgend vorangestellten "." vor den Zellbezeichnungen ist die Beziehung eindeutig geregelt. Und da dein restlicher Code ja bereits fehlerlos funktioniert hat, kann es also nicht daran liegen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

hans35_66
22.08.2011, 07:16
Hallo,

den "." vor Rows habe ich

werde heute Nachmittag mal Zeile für Zeile nochmal genau anschauen

gruß Hans

hans35_66
22.08.2011, 09:37
Hallo,

ich habs nochmals neu gemacht und siehe da es funktioniert.
Nur hab ich noch ein anderes Problem:

Ich habe folgendes stehen:

.Columns(37).Replace Chr(32), "", xlPart, , False, False, False
.
.
.
Set rng = .Columns(37).FindNext(rng)


wenn ich es durch Folgendes ersetze,

.intSpalte7.Replace Chr(32), "", xlPart, , False, False, False
.
.
.
Set rng = .intSpalte7.FindNext(rng)

heist es Methode wird nicht unterstützt
Was mache ich da falsch?

gruß Hans

Beverly
22.08.2011, 10:48
Hi Hans,

der Code muss genau so bleiben wie dein zu oberst geposteter, nur dass du anstelle (37) dieses schreiben musst: (intSpalte7)

intSpalte7 ist eine Integer-Variable, benötigt wird aber ein Bereich bzw. eine Spalte, deren Nummer durch die Integer-Variable definiert ist.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

hans35_66
22.08.2011, 12:47
Danke, der lezte Tip funktioniert besten.
hab nur noch ein Problem,und wie ist es den damit:

If Trim$(rng.Offset(0, 45)) = Trim$(objSh.Cells(lngRow, 2)) Then


so funkrioniert es, ist auf die Spalte 82 angepasst.
Nun habe ich auf folgendes geändert:

If Trim$(rng.Offset(0, intSpalte9)) = Trim$(objSh.Cells(lngRow, 2)) Then


und dann läft es ohne Fehler durch, nur bleiben die Spalten leer.
Wie muss ich das denn noch andern?

gruß Hans

Beverly
22.08.2011, 13:13
Hi Hans,

mit intSpalte ermittelst du ja die Spaltennummer, welche die betreffende Überschrift hat. Mit Offset gibst du aber den Spaltenversatz nach rechts an, also eine Differenz. Du musst folglich diese Differenz erst noch feststellen. Versuche es mal so nach diesem Prinzip (ungetestet):
rng.Offset(0, intSpalte9 - rng.Column)
<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

hans35_66
22.08.2011, 14:29
Hallo,

das hab ich nicht ganz verstanden
bisher hatte ich folgendes:
If Trim$(rng.Offset(0, 45)) = Trim$(objSh.Cells(lngRow, 2)) Then

was für mich bedeutet hat Spalte 37 + 45 nach rechts ist Spalte 82 ( intSpalte9)
hat ja funktioniert.
Dann wurde aus .Columns(37). > intSpalte7 >>>>funktioniert auch noch wenn ich den Code If Trim$(rng.Offset(0, 45)) = Trim$(objSh.Cells(lngRow, 2)) Then
so verwende.

Nur ist es so das aus diesen "45" auch mal "42" oder "47" sein könnte
Kann ich da nicht direkt auch auf die "intSpalte9 "verweisen?

hier noch mal der ganze Codeabschnitt

.Columns(intSpalte7).Replace Chr(32), "", xlPart, , False, False, False
For lngRow = 9 To lngEnd
If objSh.Cells(lngRow, 3) <> "" Then
Set rng = .Columns(intSpalte7).Find(What:=Replace(objSh.Cells(lngRow, 3), Chr(32), ""), LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Trim$(rng.Offset(0, 45)) = Trim$(objSh.Cells(lngRow, 2)) Then
'If Trim$(rng.Offset(0, intSpalte7 - rng.Column)) = Trim$(objSh.Cells(lngRow, 2)) Then
.Range(.Cells(rng.Row, intSpalte4), .Cells(rng.Row, intSpalte5)).Copy objSh.Cells(lngRow, 10)
.Cells(rng.Row, intSpalte3).Copy objSh.Cells(lngRow, 12)
.Cells(rng.Row, intSpalte2).Copy objSh.Cells(lngRow, 13)
.Cells(rng.Row, intSpalte1).Copy objSh.Cells(lngRow, 14)
.Cells(rng.Row, intSpalte6).Copy objSh.Cells(lngRow, 15)
.Cells(rng.Row, intSpalte8).Copy objSh.Cells(lngRow, 16)
Exit Do
End If
Set rng = .Columns(intSpalte7).FindNext(rng)
Loop While Not rng Is Nothing And strFirst <> rng.Address
End If
End If
Next
End With

objWB.Close False
Ich steh im mom. total auf dem Schlauch.

Ist nicht sowas möglich wie:
?Zahl? =intSpalte9 - intSpalte7
45 = (Spalte82)- (Spalte37)

und dann setze ich das so ein

If Trim$(rng.Offset(0, ?Zahl?)) = Trim$(objSh.Cells(lngRow, 2)) Then


gruß Hans

Beverly
22.08.2011, 15:00
Hi Hans,

weshalb eine extra Variable? Die Differenz kann man doch auch direkt beim Offset angeben. rng.Column ist die Spalte in der du suchst (bei dir Variable intSpalte7). Die Differenz musst du dann zwischen intSpalte9 und rng.Column (= intSpalte7) bilden.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

hans35_66
23.08.2011, 07:45
Hallo,

und danke nochmals hat bestens geklappt, weis nicht warum ich da gestern Probleme hatte, heute gings auf einmal.

Nun hätte ich dich noch eine Fragen dazu

mit folgend Code vergleiche ich ja 2 Tabellen in der die Datensätze die an beiden Tabellen gleich sind werden dann aus Tabelle2 angefügt,
hier noch mal der Code zum Verständnis .Columns(intSpalte7).Replace Chr(32), "", xlPart, , False, False, False
For lngRow = 9 To lngEnd
If objSh.Cells(lngRow, 3) <> "" Then
Set rng = .Columns(intSpalte7).Find(What:=Replace(objSh.Cells(lngRow, 3), Chr(32), ""), LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Trim$(rng.Offset(0, intSpalte9 - rng.Column)) = Trim$(objSh.Cells(lngRow, 2)) Then
.Range(.Cells(rng.Row, intSpalte4), .Cells(rng.Row, intSpalte5)).Copy objSh.Cells(lngRow, 10)
.Cells(rng.Row, intSpalte3).Copy objSh.Cells(lngRow, 12)
.Cells(rng.Row, intSpalte2).Copy objSh.Cells(lngRow, 13)
.Cells(rng.Row, intSpalte1).Copy objSh.Cells(lngRow, 14)
.Cells(rng.Row, intSpalte6).Copy objSh.Cells(lngRow, 15)
.Cells(rng.Row, intSpalte8).Copy objSh.Cells(lngRow, 16)
Exit Do
End If
Set rng = .Columns(intSpalte7).FindNext(rng)
Loop While Not rng Is Nothing And strFirst <> rng.Address
End If
End If
Next
End With

objWB.Close False

Nun ist es ja so das es Datensätze gibt die in Tabelle 2 vorkommen aber nicht in Tabelle 1 sind. Ist es möglich diese ebenfalls abzufragen.Berücksichtigt werden wieder die
intSpalte9, intSpalte7 und intSpalte8 (nur wenn sie nicht leer ist)

nach dem Muster wenn intSpalte8 nicht leer und intSpalte9 mit intSpalte7 kein gleichen Eintrag finden im objSh in Spalte 2 mit 3 dann sollen die
intSpalte1,intSpalte2,intSpalte3,intSpalte4,intSpalte5 und intSpalte6 in ein neues Tabellenblatt kopiert werden.

Nun meine Frage dazu wie ist das möglich?

gruß Hans

hans35_66
23.08.2011, 07:47
Hallo,

und danke nochmals hat bestens geklappt, weis nicht warum ich da gestern Probleme hatte, heute gings auf einmal.

Nun hätte ich dich noch eine Fragen dazu

mit folgend Code vergleiche ich ja 2 Tabellen in der die Datensätze die an beiden Tabellen gleich sind werden dann aus Tabelle2 angefügt,
hier noch mal der Code zum Verständnis .Columns(intSpalte7).Replace Chr(32), "", xlPart, , False, False, False
For lngRow = 9 To lngEnd
If objSh.Cells(lngRow, 3) <> "" Then
Set rng = .Columns(intSpalte7).Find(What:=Replace(objSh.Cells(lngRow, 3), Chr(32), ""), LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Trim$(rng.Offset(0, intSpalte9 - rng.Column)) = Trim$(objSh.Cells(lngRow, 2)) Then
.Range(.Cells(rng.Row, intSpalte4), .Cells(rng.Row, intSpalte5)).Copy objSh.Cells(lngRow, 10)
.Cells(rng.Row, intSpalte3).Copy objSh.Cells(lngRow, 12)
.Cells(rng.Row, intSpalte2).Copy objSh.Cells(lngRow, 13)
.Cells(rng.Row, intSpalte1).Copy objSh.Cells(lngRow, 14)
.Cells(rng.Row, intSpalte6).Copy objSh.Cells(lngRow, 15)
.Cells(rng.Row, intSpalte8).Copy objSh.Cells(lngRow, 16)
Exit Do
End If
Set rng = .Columns(intSpalte7).FindNext(rng)
Loop While Not rng Is Nothing And strFirst <> rng.Address
End If
End If
Next
End With

objWB.Close False

Nun ist es ja so das es Datensätze gibt die in Tabelle 2 vorkommen aber nicht in Tabelle 1 sind. Ist es möglich diese ebenfalls abzufragen.Berücksichtigt werden wieder die
intSpalte9, intSpalte7 und intSpalte8 (nur wenn sie nicht leer ist)

nach dem Muster:
Wenn intSpalte8 nicht leer und intSpalte9 mit intSpalte7 kein gleichen Eintrag finden im objSh in Spalte 2 mit 3 dann sollen die
intSpalte1,intSpalte2,intSpalte3,intSpalte4,intSpalte5 und intSpalte6 in ein neues Tabellenblatt kopiert werden.

Nun meine Frage dazu wie ist das möglich?

gruß Hans

Beverly
23.08.2011, 08:31
Hi Hans,

vom Prinzip her so:
If .Cells(rngRow, intSpalte9) = objSh.Cells(Zeile, Spalte 2) And .Cells(rngRow, intSpalte7) = objSh.Cells(Zeile, Spalte 3) Then
dann gibt es eine Übereinstimmung.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>