Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1156to1160
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-Fkt mit Teilstring

VBA If-Fkt mit Teilstring
Jonathan
Hallo liebe Experten,
ich bekomme es einfach nicht hin...
Ausgangssituation:
2 Dateien mit Adressdaten (1 Zeile A-H) enstpricht einer Adresse.
Jede Adresse hat in Spalte A eine Adressnummer, quasi als Primärschlüssel
Folgender Code vergleicht die Datei "Freizeitliste_XY500.xls" mit der Datei "Adressdaten.xls"
Dabei wird untersucht ob in "Freizeitliste_XY500.xls" die Adressnummer aus "Adressdaten.xls" vorhanden ist.
Ist dies der Fall werden die Spalten B-H in "Freizeitliste_XY500.xls" aktualisiert (Daten kommen aus "Adressdaten.xls")
Ist dies nicht der Fall wird, also "Adressdaten.xls" enthält eine oder mehrere Adressnummern welche nicht in "Freizeitliste_XY500.xls" enthalten so werden die neuen Adressen in die nächste freie Zeile eingefügt.
Dies funktioniert bislang wuderbar!
Allerdings soll nun noch ein weiteres Suchkriterium eingebaut werden.
Beim Vergleich sollen nur Adressen berücksichtig werden, welche in Spalte H "XY500" enthalten.
Allerdings können in Spalte H mehrere Werte, durch Komma getrennt stehen.
Vielen Dank schon mal für eure Hilfe!
Hier noch die Beispieldateien sowie der bisherige Code:
Adressdaten: https://www.herber.de/bbs/user/69567.xls
Freizeitliste: https://www.herber.de/bbs/user/69568.xls
Code (in Freizeitliste) :
Sub Datenkopieren()
Dim wkb1 As Workbook
Dim wkb As Workbook
Dim wks1 As Worksheet
Dim wks As Worksheet
On Error Resume Next
On Error GoTo 0
Set wkb = Workbooks("Freizeitliste_XY500.xls")
Set wkb1 = Workbooks("Adressdaten.xls")
wkb1.Activate
Set wks = wkb.Worksheets("Freizeitliste (VORLAGE)")
Set wks1 = wkb1.Worksheets("Adressen")
anz = wks.Cells(65536, 1).End(xlUp).Row
anz1 = wks1.Cells(65536, 1).End(xlUp).Row
For x = 11 To anz1
suchwert = wks1.Cells(x, 1)
With wks.Range("A17:A" & anz)
Set c = .Find(suchwert, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
For s = 2 To 8
wks.Cells(c.Row, s) = wks1.Cells(x, s)
Next
Else
For s = 1 To 8
wks.Cells(anz + 1, s) = wks1.Cells(x, s)
Next
anz = Cells(65536, 1).End(xlUp).Row
End If
End With
Next
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA If-Fkt mit Teilstring
13.05.2010 14:52:18
Gerd
Hallo Jonathan,
so?
...........
If Not c Is Nothing Then
If wks.cells(c.Row, 8).Text= "XY500" Then
For s = 2 To 8
wks.Cells(c.Row, s) = wks1.Cells(x, s)
Next
Else
For s = 1 To 8
wks.Cells(anz + 1, s) = wks1.Cells(x, s)
Next
End If
End If
................
Gruß Gerd
Funktioniert leider nicht...
Jonathan
Hallo Gerd,
wenn ich den zweiten If-Teil (If wks.cells(c.Row, 8).Text= "XY500" Then) einbaue bekomme ich überhaupt keine Ergebnisse mehr.
Den Wert wks.Cells habe ich durch wks1.cells ersetzt, da der Wert in der Adressdaten.xls steht.
Welche Möglichkeit habe ich noch?
Gruß
Jonathan
Anzeige
AW: VBA If-Fkt mit Teilstring
13.05.2010 19:26:10
Erich
Hi Jonathan,
probier mal

Option Explicit
Sub Datenkopieren()
Dim wsAd As Worksheet, lngAd As Long, zA As Long
Dim wsFz As Worksheet, lngFz As Long, zF As Long
Dim rngF As Range
Set wsFz = ThisWorkbook.Worksheets("Freizeitliste (VORLAGE)")
Set wsAd = Workbooks("Adressdaten.xls").Worksheets("Adressen")
lngFz = wsFz.Cells(wsFz.Rows.Count, 1).End(xlUp).Row
With wsAd
.Activate
lngAd = .Cells(.Rows.Count, 1).End(xlUp).Row
For zA = 11 To lngAd
If .Cells(zA, 8) Like "*" & wsFz.Cells(12, 2) & "*" Then
Set rngF = wsFz.Range("A17:A" & lngFz).Find(.Cells(zA, 1), _
LookIn:=xlValues, LookAt:=xlWhole)
If rngF Is Nothing Then lngFz = lngFz + 1
wsFz.Cells(lngFz, 1).Resize(, 8) = .Cells(zA, 1).Resize(, 8).Value
End If
Next zA
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Korrektur
13.05.2010 20:15:51
Erich
Hi,
da war noch ein Fehler drin: wsAd.Activate funzt nur, wenn Workbooks("Adressdaten.xls") aktiv ist.
Deshalb eine neue Version:

Option Explicit
Sub Datenkopieren()
Dim wsAd As Worksheet, lngAd As Long, zA As Long
Dim wsFz As Worksheet, lngFz As Long, zF As Long
Dim rngF As Range
Set wsFz = ThisWorkbook.Worksheets("Freizeitliste (VORLAGE)")
lngFz = wsFz.Cells(wsFz.Rows.Count, 1).End(xlUp).Row
Workbooks("Adressdaten.xls").Activate
Set wsAd = ActiveWorkbook.Worksheets("Adressen")
With wsAd
.Activate
lngAd = .Cells(.Rows.Count, 1).End(xlUp).Row
For zA = 11 To lngAd
If .Cells(zA, 8) Like "*" & wsFz.Cells(12, 2) & "*" Then
Set rngF = wsFz.Range("A17:A" & lngFz).Find(.Cells(zA, 1), _
LookIn:=xlValues, LookAt:=xlWhole)
If rngF Is Nothing Then lngFz = lngFz + 1
wsFz.Cells(lngFz, 1).Resize(, 8) = .Cells(zA, 1).Resize(, 8).Value
End If
Next zA
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Korrektur der Korrektur
13.05.2010 20:24:58
Erich
Hi Jonathan,
ich hätte früher bessere testen sollen...

Option Explicit
Sub Datenkopieren()
Dim wsAd As Worksheet, lngAd As Long, zA As Long
Dim wsFz As Worksheet, lngFz As Long, zF As Long
Dim rngF As Range, lngZ As Long
Set wsFz = ThisWorkbook.Worksheets("Freizeitliste (VORLAGE)")
lngFz = wsFz.Cells(wsFz.Rows.Count, 1).End(xlUp).Row
Workbooks("Adressdaten.xls").Activate
Set wsAd = ActiveWorkbook.Worksheets("Adressen")
With wsAd
.Activate
lngAd = .Cells(.Rows.Count, 1).End(xlUp).Row
For zA = 11 To lngAd
If .Cells(zA, 8) Like "*" & wsFz.Cells(12, 2) & "*" Then
Set rngF = wsFz.Range("A17:A" & lngFz).Find(.Cells(zA, 1), _
LookIn:=xlValues, LookAt:=xlWhole)
If rngF Is Nothing Then
lngZ = lngFz:    lngFz = lngFz + 1
Else
lngZ = rngF.Row
End If
wsFz.Cells(lngZ, 1).Resize(, 8) = .Cells(zA, 1).Resize(, 8).Value
End If
Next zA
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Danke - funktioniert
14.05.2010 09:40:18
Jonathan
Hallo Erich,
herzlichen Dank für deine Arbeit.
Der Code funktioniert wie er soll.
Vielen Dank nochmals.
Gruß
Jonathan

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige