Anzeige
Archiv - Navigation
1868to1872
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
Ganze Zeile kopieren, wenn eine Zelle le
03.02.2022 21:01:46
klwae
Hallo,
vielleicht könnt Ihr/Sie mir helfen.
Ich möchte aus einer Datei (Zieldatei) heraus eine zweite Datei [Quelldatei (*.csv)] öffnen und überprüfen.
In dieser (csv-Datei) soll zuerst in der Spalte „F“ nach dem Inhalt „Standard“ durchsucht werden.
Ist der Wert vorhanden, sollen die dazugehörigen Zellen in den Spalten „A, B, M, O und T“ auf "leere Zellinhalt" (kein Inhalt) hin überprüft werden.
Ist nur eine der Zellen leer, soll die gesamte Zeile in die erste Datei kopiert.
Vielen Dank im Voraus und Gruß Klaus

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
03.02.2022 22:35:29
klwae
Hallo,
ich hab mich mich mal versucht ...
Das Ergebnis ist nur eine Zeile und die ist noch ausgeblendet.
Wo hab ich hier ein Fehler?
Sub CommandButton2_Click() 'läuft nicht richtig Dim ws As Worksheet, wsZ As Worksheet, efz%, i%, leer As Boolean Dim c As Range Dim b As Range Set ws = Workbooks("urliste-Kopie.csv").Worksheets("urliste-Kopie") 'ThisWorkbook.Worksheets("urliste") Set wsZ = Workbooks("SpaltenÜberprüfen v0.1.xlsb").Worksheets("Tabelle2") For i = 2 To 1469 If ws.Cells(i, 6).Value = "Standard" Then 'suche "Standard" in spalte F If ws.Cells(i, 11).Value = "" Or _ ws.Cells(i, 14).Value = "" Or _ ws.Cells(i, 15).Value = "" Or _ ws.Cells(i, 39).Value = "" Or _ ws.Cells(i, 41).Value = "" Or _ ws.Cells(i, 43).Value = "" Or _ ws.Cells(i, 45).Value = "" Or _ ws.Cells(i, 48).Value = "" Or _ ws.Cells(i, 49).Value = "" Or _ ws.Cells(i, 50).Value = "" Or _ ws.Cells(i, 52).Value = "" Or _ ws.Cells(i, 54).Value = "" Or _ ws.Cells(i, 56).Value = "" Or _ ws.Cells(i, 57).Value = "" Then 'kopieren und in Zieldatei eintragen ' If leer = False Then efz = wsZ.Cells(Rows.Count, 1).End(xlUp).Row + 1 ws.Rows(i).Copy wsZ.Cells(efz, 1) ' End If Application.CutCopyMode = False End If End If Next i End Sub >
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
03.02.2022 23:34:47
Yal
Hallo Klaus,
A,B,M,O und T sind die Spalte 1,2,13,15 und 20. Warum prüftst Du die Spalte 11, 14, 15, ... ?
Probier folgendes. Datei wird als Textdatei gelesen, dann bei Treffer ins Excel eingefügt.
Du brauchst einen Verweis (Extras, Verweis...) auf "Microsoft Scripting Runtime", um FileSystemObject und Textstream zu verwenden.
csv-Pfad anpassen.

Sub CSV_lesen()
Dim FSO As New FileSystemObject
Dim TS As TextStream
Dim wsZ As Worksheet
Dim Arr, S
Set wsZ = Workbooks("SpaltenÜberprüfen v0.1.xlsb").Worksheets("Tabelle2")
Set TS = FSO.OpenTextFile("C:\temp\urliste-Kopie.csv", ForReading)
Do While Not TS.AtEndOfStream
Arr = Split(TS.ReadLine, ";")
If LCase(Trim(Arr(5))) = "standard" Then
For Each S In Array(0, 1, 12, 14, 19) 'A,B,M,O, T aber Array fängt mit 0 an
If Arr(S) = "" Then
wsZ.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, UBound(Arr) + 1) = Arr
Exit For 'nicht mehrfach kopieren
End If
Next
End If
Loop
TS.Close
End Sub
Sollte dein csv (mit Notepad öffnen, um zu prüfen) doppelte Hochkommatas verwenden, um die Text zu delimitieren, dann eventuell so prüfen

If Arr(S) = """""" Then
VG
Yal
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
04.02.2022 06:02:24
klwae
Hallo Yal,
Danke für Deine Hilfe.
A,B,M waren die Spalten aus der Versuchsdatei. Irgendwo musste ich ja mal anfangen :-) . Die im Code sind aus der Originaldatei und auch nur ein Teil davon.
Die csv-Datei, die durchsucht werden soll, wird aus einem ERP-System heraus erzeugt und steht nur als *.csv zur Verfügung. Die Datei wird alle zwei Tage neu erstellt - sprich: die vorhergehende wird überschrieben (gleicher Pfad; gleicher Name).
Wäre es möglich bei

(Spalte F) auch mehrere Suchbegriffe einzutragen? Insgesamt habe ich 3 Suchbegriffe, die somit überprüft werden sollen. Die letzte Spalte, in der nach leeren Zellen gesucht werden soll ist 88 (CJ). Alle zusammen sind dies dann 42 Spalten.
VG Klaus
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
04.02.2022 09:45:21
Yal
Hallo Klaus,
in dem Fall eher mit Select Case:

Sub CSV_lesen()
Dim FSO As New FileSystemObject
Dim TS As TextStream
Dim wsZ As Worksheet
Dim Arr, S
Set wsZ = Workbooks("SpaltenÜberprüfen v0.1.xlsb").Worksheets("Tabelle2")
Set TS = FSO.OpenTextFile("C:\temp\urliste-Kopie.csv", ForReading)
Do While Not TS.AtEndOfStream
Arr = Split(TS.ReadLine, ";")
Select Case LCase(Trim(Arr(5)))
Case "standard", "andere text1", "andere text2" 'achtung nur kleinbuchstaben (LCase)!
For Each S In Array(0, 1, 12, 14, 19) 'A,B,M,O, T aber Array fängt mit 0 an
If Arr(S) = "" Then
wsZ.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, UBound(Arr) + 1) = Arr
Exit For 'nicht mehrfach kopieren
End If
Next
End Select
Loop
TS.Close
End Sub
Wenn deine CSV immer dieselbe Name hat, wäre eine Behandlung mit Power Query vielleicht besser.
Siehe https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/
Lädt mal eine abgespeckte csv-Beispieldatei hoch (natürlich von kritischen Daten bereinigt).
VG
Yal
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
04.02.2022 13:05:52
klwae
Hi Yal,
Vielen Dank für Deine Hilfe.
Ich wollte gerade Dein Code testen.
Bekomme aber gleich in den ersten beiden Zeile einen "Fehler beim Kompilieren - Benutzerdefinierter Typ nicht definiert".

Dim FSO As New FileSystemObject
Dim TS As TextStream
Hat das vielleicht mit der MS-Versionen zu tun? Ich benutze noch 2013.
Auch die Zeile

Arr = Split(TS.ReadLine, ";")

kommt mir komisch vor, da ich in der gesamten csv-Datei keinen Strichpunkt ist.
Könntest Du noch mal drüber schau?
Wegen der abgespeckte csv-Beispieldatei schau ich mal was ich machen kann.
VG Klaus
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
04.02.2022 13:17:54
Yal
Hallo Klaus,
Du hast die Bedienungsanleitung im ersten Beitrag überlesen:
Du brauchst einen Verweis (Extras, Verweis...) auf "Microsoft Scripting Runtime", um FileSystemObject und Textstream zu verwenden.
Falls im csv eine Komma als Trennzeichen, ersetzt den Semikolon durch einen Komma.
Falls Tab, dann

Arr = Split(TS.ReadLine, vbTab) 
Ich kann nur drüberschauen, wenn ich deine Datei habe. Alles anderes ist Rätsel-Spiel: ich sehe was, was Du nicht siehst.
Schau Dir Power Query an. Wenn nicht für dieses heutigen Problem, für vieles anderes.
VG
Yal
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
04.02.2022 15:41:48
klwae
Hi Yal,
vielen Dank. Es hat funktioniert.
Schönes Wochenende
VG Klaus
AW: Ganze Zeile kopieren, wenn eine Zelle le
06.02.2022 13:54:33
klwae
Hallo Yal,
darf ich auf Dein Angebot noch mal zurückgreifen?
Ich hatte bisher noch nicht mit Power Query zu tun. Wie muss ich mir das dann vorstellen?
Wie soll ich die csv-Datei hochladen (mit welcher Endung)?
VG Klaus
AW: Ganze Zeile kopieren, wenn eine Zelle le
06.02.2022 16:59:43
Yal
Hallo Klaus,
Andere die Dateiendung in .txt um es zu laden und erwähne im Beitragtext das es sich um einen CSV handelt. (Nach dem Laden Link kopieren und in Beitrag einfügen)
Ich gehe davon aus, du hast dich den Link angeschaut. Hast du auch probiert, etwas selber auf die Beine zu bringen? Nicht dass ich mich drucken will, aber ich möchte Dir den eigenen Erfolg nicht wegnehmen ;-)
Die enthaltene Videos Ding insg. 1 Std wobei die letzte (20 min) ist für dich -noch- nicht von Bedeutung. Auch wenn ich dir eine Lösung liefere, müsstest Du dich mit der Handhabung vertraut machen.
Ich kann auch nicht vorhersagen, ob ich morgen Zeit habe.
Eigentlich im Menü "Daten", gehst Du auf "neue Anfrage", "aus Datei", "aus CSV". Datei auswählen und "Bearbeiten".
Dann filterst Du die eine Spalte nach "Standard" usw.
Für den Filter der leere Elemente ist es auswändiger: Du musst eine berechnete Spalte mit Formel einfügen:
[..] = "" or [..] = "" or ...
(Du kannst auch die Spalten nacheinander filtern und in den erweiterten Editor die Anweisungen in einem 'or' -Verkettung zusammenbringen, ist aber eher Level fortgeschrittenen)
Dann das Ergebnis filtern und anschließend diese Hilfsspalte löschen.
Dann "Schließen & laden".
Fertig.
VG
Yal
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
07.02.2022 19:48:23
klwae
Hallo Yal,
hier hab ich die csv-Datei in eine txt-Datei umbenannt - also nur die Endung geändert.
https://www.herber.de/bbs/user/150974.txt
Ich bin mal gespannt ob das gleiche Ergebnis wie beim Makro herauskommt.
Nochmals vielen Dank für´s helfen.
VG Klaus
AW: Ganze Zeile kopieren, wenn eine Zelle le
07.02.2022 22:27:49
Yal
Hallo Klaus,
die Methode mit Power Query (PQ) erfordert nach betrachtung der Datei doch eine Menge Handarbeit, sodass ich diese nicht nachgehen werde. Vor allem wenn Du schon mit der VBA-Version zufrieden bist.
Solltest Du selber versuchen und einige Schwierigkeit haben, gern melden.
Aber wenn es darum geht, PQ kennenzulernen und zu verstehen, vielleicht doch mit etwas mit einem kleineren Umfang.
VG
Yal
Anzeige
AW: Ganze Zeile kopieren, wenn eine Zelle le
08.02.2022 09:29:08
klwae
Hallo Yal, kann ich verstehen.
Danke trotzdem für Deine Hilfe.
VG Klaus

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige