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

Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben

Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
20.08.2023 18:07:45
deschdot
Hallo zusammen,

folgendes Problem habe ich gerade.

Ein Tabelle mit Namen, Tabelle2. Da stehen die Basisdaten drin.
Es gibt 12-15 evtl bis 20 Kategorien (Suchkriterien). Z.B. Schrauben, Muttern etc

Da suche ich nach einem bestimmten Ausdruck. Z.B. "Testartikel 007"
Dann benötige ich den Preis zu "Testartikel 007". Den könnte ich finden Z.B. über das "$" Zeichen. Da muss ja dann der Preis stehen.
Der Preis steht aber 3, 4, manchmal 5 Zeilen weiter unter dem gefundenen Suchkriterium (Z.B. Testartikel 007).

Mein Problem, Wenn der Artikel gefunden wird/ist (das klappt auch, wird Zeile für Zeile kopiert), wie lese ich ich den Preis (x-Zeilen weiter unten) aus
und kopiere das dann in 1 (eine) Zeile, 2 Spalten. (A + B)

Ich bekomme einfach die Preis Zeile nicht kopiert. Könnt ihr mir vielleicht helfen?



Was ich bisher habe: Die nicht funktionierende Preis-Such-Sequenz habe ich raus gelassen. Die Funktionierte eh nicht.

With Tabelle2


Range("A20").Value = "Überschrift auslesen" 'Zellenüberschrift (Z.B Schrauben) auslesen und in Tabelle8 Spalte "A20" schreiben.
z = z + 1 ' 1 Zeile Runter, ab da stehen die kopierten Einträge. In dem Fall, ab Zeile 21


For Zeile = 427 To 4680 'ab zeile 427 stehen die relevanten Daten

If .Cells(Zeile, 1).Value Like "Testartikel 007" Then 'Bezeichnung aus Tabelle2 auslesen, da stehen die Basisdaten
.Rows(Zeile).Copy Destination:=Tabelle8.Rows(z) 'in Tabelle8 fortlaufend kopieren.
Zeile = Zeile + 1
z = z + 1
End If

Next Zeile
End With



Ich hoffe das ich verständlich machen konnte um was es geht.

Wäre schön wenn jemand ein Lösung hätte. Vielen Dank vorab für die Hilfe.
Bei Rückfragen, einfach melden. Danke euch.

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
20.08.2023 18:13:33
onur
Und WO ist die Datei dazu ?
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
20.08.2023 19:13:35
deschdot
Habe ich doch geschrieben.
Die Basisdaten (also die Daten die kopiert werden sollen) sind in Tabelle2.

Grüße
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
20.08.2023 19:21:57
Oberschlumpf
Hi

die vorherige Anfrage anders formuliert:
Wo bitte ist - per Upload von dir bereitgestellt - eine Bsp-Datei mit Bsp-Daten?

Ciao
Thorsten
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
20.08.2023 20:17:28
onur
Die DATEI ist also in der Tabelle ???
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
20.08.2023 20:21:43
deschdot
Die Datei ist die Tabelle.
Gerade habe ich eine Demodatei (Tabelle) hochgeladen. (In dem Projekt heißt diese, "Tabelle2"

Grüße
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
21.08.2023 07:59:12
deschdot
Hier ist das Beispiel zu finden:
https://www.herber.de/bbs/user/162395.xlsx
Anzeige
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
21.08.2023 08:54:10
MCO
Hallo Deschdot!

Probier es mal damit.
Ich hab die Suche geändert von "geh durch alle Zeilen" auf spring zum Ergebnis. Dann folgt eine Schleife bis zum Betrag.

Schau mal, wie du klarkommst...
With sheets("Tabelle2")


Z = 20
Sheets("Tabelle8").Cells(Z, "A").Value = "Überschrift auslesen" 'Zellenüberschrift (Z.B Schrauben) auslesen und in Tabelle8 Spalte "A20" schreiben.
Z = Z + 1 ' 1 Zeile Runter, ab da stehen die kopierten Einträge. In dem Fall, ab Zeile 21

Set gefunden = .Range("A427:A" & Rows.Count).Find(what:="Testartikel 007") 'ab zeile 427 stehen die relevanten Daten

Dim gefunden As Range
Dim cl As Range

If Not gefunden Is Nothing Then
Set cl = gefunden.Offset(1, 0)
Do 'Schleife
If cl.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)" Then 'Wenn währungsformat
.Rows(gefunden.Row).Copy Destination:=Sheets("Tabelle8").Rows(Z) 'in Tabelle8 fortlaufend kopieren.
Zeile = Zeile + 1
Z = Z + 1
Exit Do
End If
Loop While Z 10000 'gegen Endlosschleife. Falls mal kein Betrag eingegeben ist.
Else
MsgBox "nicht gefunden", vbOKOnly + vbCritical
End If

End With

Gruß, MCO
Anzeige
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
21.08.2023 11:31:46
deschdot
Hallo MCO,
vielen Dank für deine Hilfe.

Bist du sicher das die DIM-Anweisung an der richtigen Stelle steht?

Wie ist denn die Variable "gefunden" zu deklarieren? Fehler = Variable nicht deklariert

Wenn ich diese deklariere, (STR, Integer, Range, Boolean versucht) kommt der Fehler
"Set gefunden =", Fehler = "Objekt erforderlich."

Hast du eine Idee?

Grüße
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
22.08.2023 06:59:45
MCO
Moin, Deschdot!

Natürlich muss die DIM- Anweisung oberhalb der Variablen stehen, mein Fehler.

Objekt erforderliche heißt möglicherweise auch, dass es .range...... keine with-Anweisung gibt.

Schau doch mal, ob in deiner Mappe "Tabelle2" auch existiert, denn With sheets("Tabelle2") (siehe oben) ist die Vorraussetung für .Range.... usw.
Wenn der Punkt fehlen würde, bezieht sich Range ja auf das aktive Blatt, was dann ja auch mal ein anderes sein könnte....

Viel Erfolg!

Gruß, MCO
Anzeige
Spalte A aus 2 Zeilen Copy u. in 1 Zeile 2 Spalten schreiben
22.08.2023 08:28:43
deschdot
Hi MCO,

da kommt bei With Sheets ("Tabelle8"), immer die Fehlermeldung: Laufzeitfehler 9, Index außerhalb des gültigen Bereichs.
Mit Tabelle2 habe ich auch versucht. Das ist die aus der eigentlich gelesen und in Tabelle8 geschrieben werden soll. Klappt auch nicht. Immer dieser Index Fehler.

Woher kommt das denn und wie kann ich das beheben?
Ich komme echt nicht weiter.
Kannst du mir helfen?

Vielen Dank für deine Hilfe.

Gruß

Index-Fehler
22.08.2023 09:36:31
MCO
Hallo Deschdot

Dann stimmt die Bezeichnung nicht!

Geh mal in den Direktbereich (STRG+G)

Hier gibst du ein:
? activesheet.name


Das ist dann der Name, der im Tab stehen sollte. Achte auf Leerzeichen.
Das ganze kannst du aber auch über die Nummer ansprechen.
? activesheet.index


Dann heißt es eben
with sheets(3)
(zum Beispiel)
Ist aber gefährlich, wenn andere Sheets zugefügt oder gelöscht werden

Jedenfalls passen Sheets..... und range.... so nicht zusammen. Mehr kannst nur du selbst rausfinden.

Gruß, MCO
Anzeige
Index-Fehler
22.08.2023 10:17:10
deschdot
Hi MCO,

hier ein Update:

Das läuft jetzt.
Der Fehler lag daran das "Tabelle2" in den anderen Namen geändert werden musste ("Schrauben8mm"). Warum auch immer. So läuft es aber.

Es wird aber leider nichts gefunden. An was liegt das denn?

Gruß
Index-Fehler
22.08.2023 12:47:52
MCO
Bei den vielen Änderungen, die mittlerweise gemacht worden sind, kann ich es nicht mehr schlüssig beantworten.

 Set gefunden = .Range("A427:A" & Rows.Count).Find(what:="Testartikel 007")


sucht jedenfalls in Tabelle2 (wegen With sheets("Tabelle2")) im Bereich A427:A ---bis unten nach "Testartikel 007". wenn es den in dem Bereich nicht gibt, dann findet excel auch nix.

Mehr weiß ich nicht. Vielleicht kannst du ja nochmal eine Testdatei hochladen?

Gruß, MCO
Anzeige
hier mal alles neu
22.08.2023 14:52:23
deschdot
Hi MCO,

hier kommt alles nochmal neu.

Die Daten in Tabelle2, sind der Ursprung.
In Tabelle8 soll geschrieben/kopiert werden. Zelle A den Artikel, Zelle B gleiche Zeile, den Preis.


Benötigt werden nur Z.B das hier:

Zeile 15 - Metallschrauben Schlossschraube Edelstahl A4 M8X140
(Wobei der Suchbegriff, denke ich, sich nur auf Z.B. "Metallschraube" zu beziehen braucht. Alle Artikel Fangen so an.
Kopiert werden muss aber der gesamte Artikelname, Metallschrauben Schlossschraube Edelstahl A4 M8X140.

Zeile 16 -
Zeile 17 - 8814814018
Zeile 18 - €2,20
Zeile 19 - Metallschrauben Schlossschraube Edelstahl A4 M8X140


Kopieren also den Artikel, Zeile 15
16, 17, nicht
Zeile 18, den Preis. Wobei das € Zeichen manchmal am Ende steht.
Zeile 19 nicht. Die ist ja schon aus Zeile 15 vorhanden


In dem was ich bisher ans laufen gebracht habe scheint mir das in einer Endlosschleife zu münden. Es läuft und läuft und läuft, findet und kopiert aber nichts.
Ist das mit dem Schleifenzähler evtl. nicht richtig so wie es ist?

Was bisher klappt, die Überschrift (Oberbegriff) wird gefunden und in Tabelle8 in Zeile 20 kopiert. So wie es soll.

Leider habe ich von Range, Sheet, Cells usw überhaupt keinen Plan. Das habe ich bisher nie gebraucht. Darum habe ich auch die Probleme klar zu kommen.

Für deine Hilfe bin ich dir echt dankbar.

Gekürzte Beispieldatei ist hier: https://www.herber.de/bbs/user/162436.xlsm

Code bisher:



Dim gefunden As Range
Dim cl As Range

Dim z As Integer
Dim zeile As Integer

z = 20 ' Ab Z=20 soll der erste gefundene Eintrag in Tabelle8 kopiert werden.

With Sheets("Tabelle2")
Sheets("Tabelle8").Cells(z, "A").Value = "Metallschrauben"
z = z + 2
Set gefunden = .Range("A5:A" & Rows.Count).Find(what:="Metallschrauben")

If Not gefunden Is Nothing Then
Set cl = gefunden.Offset(1, 0)

Do 'Schleife
If cl.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)" Then 'Wenn währungsformat
.Rows(gefunden.Row).Copy Destination:=Sheets("Tabelle8").Rows(z) 'in Tabelle8 fortlaufend kopieren.
z = z + 1
Exit Do
End If
Loop While z 10000 'gegen Endlosschleife. Falls mal kein Betrag eingegeben ist.
Else
MsgBox "nicht gefunden", vbOKOnly + vbCritical
End If

End With


Vielen Dank für deine Hilfe
Liebe Grüße

Anzeige
hier mal alles neu
22.08.2023 15:06:44
onur
Wie kann das funktionieren, wenn du doch nach dem Wort "Metallschrauben" suchst und dann, falls gefunden, dir nur die Formatierung der Zelle unmittelbar darunter anschaust ?
hier mal alles neu
23.08.2023 07:41:32
MCO
Moin deschdot,

ich glaube, du hast die Syntax nicht verstanden.


z = 20 ' Ab Z=20 soll der erste gefundene Eintrag in Tabelle8 kopiert werden.
bisher wird nur 1 Begriff kopiert, sonst nix.

With Sheets("Tabelle2")
Sheets("Tabelle8").Cells(z, "A").Value = "Metallschrauben"
Wieso schreibst du einen Begriff in deine Ergebnistabelle, wenn du eigentlich den Artikel kopieren möchtest?
z = z + 2 Was soll das?
Set gefunden = .Range("A5:A" & Rows.Count).Find(what:="Metallschrauben")
Hier wird 1 Begriff gefunden. Suche Ende. Das scheinst du aber gar nicht zu wollen.

Kann es sein, dass du ALLE Metallschrauben mit Preis auf Tabelle 8 sehen möchtest?
Auch wenn ONUR seine Meinung sehr plump und wenig höflich und ohne Etikette äußert, so müsste ich ihm doch recht geben, wenn er ein gewünschtes Ergebnisbild fordert. Das verhindert viele Mißverständnisse und Fehlleistungen.

Ich denke du willst das hier:
Sub schraubenfinden()


Dim gefunden As Range
Dim cl As Range
Dim rng As Range
Dim z As Integer

z = 20 ' Ab Z=20 soll der erste gefundene Eintrag in Tabelle8 kopiert werden.
suchbegriff = "Metallschrauben"

With Sheets("Tabelle2")
Set rng = .Range("A5:A" & Rows.Count)
Set gefunden = rng.Find(what:=suchbegriff)

If Not gefunden Is Nothing Then
firstAddress = gefunden.Address

Set cl = gefunden.Offset(3, 0) 'Preis betrachten
Do 'Schleife
If cl.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)" Then 'Wenn währungsformat
gefunden.Copy Destination:=Sheets("Tabelle8").Range("A" & z) 'in Tabelle8 fortlaufend kopieren.
cl.Copy Destination:=Sheets("Tabelle8").Range("B" & z) 'in Tabelle8 fortlaufend kopieren.
z = z + 1 'nächste Zeile zum Eintragen
End If
Set gefunden = rng.FindNext(gefunden) 'nächster Artikel
Set cl = gefunden.Offset(3, 0) 'nächster Preis zum prüfen
Loop While Not gefunden Is Nothing And gefunden.Address > firstAddress 'alles durchlaufen solange es nicht wieder die 1. Adresse ist
Else
MsgBox "nicht gefunden", vbOKOnly + vbCritical
End If
End With
Sheets("Tabelle8").Range("A:B").Columns.AutoFit
End Sub


Gruß, MCO
Anzeige
hier mal alles neu
23.08.2023 08:50:26
deschdot
hi MCO,

da haben wir uns anscheinend gründlich missverstanden.
Ich glaubte mit der Aussage, "fortlaufend kopiert werden" wäre das klar.
Das war dann mein Fehler, Sorry.

Sheets("Tabelle8").Cells(z, "A").Value = "Metallschrauben"
Wieso schreibst du einen Begriff in deine Ergebnistabelle, wenn du eigentlich den Artikel kopieren möchtest?
Das ist nur eine Überschrift für die Spalte.


z = z + 2 Was soll das?
Set gefunden = .Range("A5:A" & Rows.Count).Find(what:="Metallschrauben")
Hier wird 1 Begriff gefunden. Suche Ende. Das scheinst du aber gar nicht zu wollen.
Das wird als Überschrift benutzt und in Zeile 20 geschrieben. Eine Zeile frei, dann fangen die Einträge an. Hat sonst keinen Nutzen. Siehe Demo-Blatt.


Kann es sein, dass du ALLE Metallschrauben mit Preis auf Tabelle 8 sehen möchtest?
Ja genau, so ist es.

Das es zu Missverständnissen gekommen ist tut mir leid. Woher sollte ich wissen was ihr alles benötigt. Natürlich habe ich Beiträge angesehen. Da sah ich aber meistens keine Beispieldateien etc.
Das ist mein erstes mal hier in dem Forum.


P.S. kopiert wird noch nix mit dem was du geschickt hast. Zwar wird was gemacht, der Suchbegriff auch gefunden, aber nicht kopiert.


Liebe Grüße


Beispiel hier: https://www.herber.de/bbs/user/162442.xlsm
Anzeige
hier mal alles neu
23.08.2023 08:57:47
MCO
In der Tabelle wird nix kopiert, weil nicht der richtige VBA-Code eingefügt ist.

Jetzt ist klar, was du willst.
hab die Schriftgröße noch mit eingebracht, hier das Ergebnis
https://www.herber.de/bbs/user/162444.xlsm

Gruß, MCO
hier mal alles neu
23.08.2023 09:02:39
deschdot
Wo ist denn der richtige VBA-Code? ;-)


Sehe ich wieder etwas nicht?

Liebe Grüße
hier mal alles neu
23.08.2023 09:16:38
MCO
Ist alles schon eingebaut.
Nochmal getestet, läuft super.

Aufruf mit ALT+F8
Editieren mit ALT+F11

Gruß, MCO
hier mal alles neu
23.08.2023 23:39:18
deschdot
Hi MCO,

Super, läuft rund und macht was es soll. Vielen Dank für deine Hilfe.

Da hänge ich jetzt schon 2 Wochenenden dran und kam nicht weiter.

Nun habe ich noch eine Frage, dazu. Nur zum Verständnis. Was macht das hier : Set cl = gefunden.Offset(3, 0) Da steht Preis betrachten. Was macht offset(3 ?

Noch etwas anderes.
Was müsste ich verändern wenn ich eine ähnliche Tabelle einlesen wollte?
Habe ich mit deinem VBA-Code versucht, klappt aber nicht. Warum?



Beispieltabelle ist hier.
https://www.herber.de/bbs/user/162452.xlsm

Lieb Grüße und nochmals dickes Danke.

Anzeige
hier mal alles neu
24.08.2023 08:01:40
MCO
Moin!

Kennst du google? Da findest du tolle Beiträge.
.Offset wird auch in der MS-Hilfe erklärt, entspricht in VBA der Formel BEREICH.VERSCHIEBEN
Damit guckt du (in unserem Fall) 3 Zeilen nach unten, 0 Spalten nach rechts. Diese zelle ist dann Range "cl"

Wenn du im Editiermodus bist, dann solltest du das Makro mal per einzelschritt durchgehen (F8) und verstehen was es tut. Werte zu den Variablen siehst du, wenn du mit der Maus draufzeigst (ohne klicken).

Dann wirst du es auch hinkriegen, den Code für eine neue Tabelle anzupassen.

Gruß, MCO
Forum gewechselt
26.08.2023 15:04:37
onur
Was hast du erwartet? War leicht verwirrt, die Intelligenzbestie.
Tabelle ist Datei, Date ist Tabelle, Tabelle4 heisst in Wahrheit Tabelle1, Tabelle3 ist eigentlich Tabelle2, Die "Datensätze" sind der gesamte Text irgendeiner Webseite (davon die meisten Hyperlinks) in einer einzigen Spalte aufgelistet, am Anfang wollte er sogar nach Dollarzeichen suchen lassen....
Dann bekommt er endlich eine funktionierende Lösung und wundert sich, dass es nicht mit sämtlichen Webseiten klappt......
Er wird bestimmt noch die Weltformel entwickeln.
Forum gewechselt
26.08.2023 18:28:48
deschdot
Hallo SF, Hallo onur,

schön das ihr euch jetzt so intensiv mit dem Thema beschäftigt.

Ich habe von Anfang an geschrieben das ich mich mit dem Thema nicht auskenne , (bisher nur Excel Anwender)
und wollte nur von Leuten die das besser können als ich eine Hilfestellung haben wie ich mein Problem gelöst bekomme.

Einfach kann ja jeder. Die Daten sind so wie sie sind und ich wollte mir daraus etwas neues erstellen. Würden die Daten sauber vorliegen, hätte ich es evtl. selbst geschafft.
Es ist aber nun mal nicht so. Die Daten sind wirr und nicht in Spalten. Was soll ich machen.

Ich bin 67 Jahre Alt, gebe mich mit dem Thema ab und versuche es zu verstehen.
Nun nahm ich an das die die es einfach aus dem Hut zaubern können anderen helfen. Ist das nicht der Sinn eines Hilfe-Forums?
Wenn die Frage nach Hilfe zu viel verlangt war, tut es mir leid. Das war nicht meine Absicht.

Ich wollte keinem etwas böses oder ähnliches. Lediglich Hilfe für mein Problem. Wie gesagt, mit Range, Sheets etc kenne ich mich überhaupt nicht aus.
MCO hatte ja auch schon gesagt das ich jetzt alleine weiter kommen soll darum habe ich das Forum gewechselt.

MfG

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige