Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
per VBA suchen und kopieren
Michael
Hallo VBA-Experten,
ich habe ein Problem und finde leider keine Lösung.
Ich habe 2 Tabellenblätter.
In Tabelle1 A13 steht ein Wert, der in Tabelle2 Spalte B gesucht werden soll. Wenn er den Wert in Tabelle2 Spalte B gefunden hat, soll er den Wert aus Tabelle1 A19 in die entsprechende Zeile (des Suchwertes) in Spalte R der Tabelle2 kopieren.
Ich hoffe ihr könnt euch darunter etwas vorstellen.
Danke schonmal im Vorraus.
Gruß Michael
AW: per VBA suchen und kopieren
18.12.2011 14:33:52
hary
Hallo Michael

Sub rueber()
Dim zeile
With Sheets("Tabelle2")
zeile = Application.Match(Sheets("Tabelle1").Range("A13"), .Range("A:A"), 0)
If Not IsError(zeile) Then .Cells(zeile, 18) = Sheets("Tabelle1").Range("A19")
End With
End Sub

gruss hary
Ändere im Code von Hary den .Range Bereich
18.12.2011 14:41:41
Hary
hi Ihr Beiden,
Hary du warst schneller mit deinem Code, der Range Bereich ("A:A") müsste aber ("B:B") lauten.
Gruß Matze
AW: Ändere im Code von Hary den .Range Bereich
18.12.2011 14:52:36
Hary
Hallo Matthias
Danke fuers aufpassen.
Taste fur's A war dichter am Finger. B war zu weit weg. ;-))
gruss hary
AW: Ändere im Code von Hary den .Range Bereich
18.12.2011 15:06:36
Hary
Hallo ihr Beiden,
Vielen, vielen Dank für die Antworten!!!
Funktioniert super!!!
Danke nochmal!
Gruß Michael
Anzeige
AW: Ändere im Code von Hary den .Range Bereich
18.12.2011 15:58:13
Hary
Hallo ihr Beiden,
Ich doch nochmal eine Frage.
Wie muss ich den Code schreiben?
Er soll den Wert aus Tabelle3 C13 in Tabelle4 Spalte B suchen und dann prüfen ob in der Zeile "Ende" steht und wenn ja das Datum aus Tabelle4 in Tabelle3 C14 kopieren.
Danke euch im Vorraus
AW: frage
18.12.2011 16:05:00
hary
Hallo
und dann prüfen ob in der Zeile "Ende" steht 

In der gesamten Zeile oder bestimmter Bereich?
gruss hary
Frage offen
AW: frage
18.12.2011 16:16:28
Michael
Das sieht so aus.
Datum. Nummer Status
12.11.2000. 1. Beginn
13.11.2000. 1. Ende
Jetzt soll er die Nummer von Tabelle3 C13 in Tabelle4 (siehe oben) suchen und dann prüfen ob da "Ende" steht und wenn ja das Datum dann in Tabelle3 C14 kopieren.
Anzeige
AW: frage
18.12.2011 16:27:34
hary
Hallo
hatte ich schon in etwa auf Verdacht. Nicht auszumachen ob 1.Ende in einer Zelle stehen.

Sub rueber2()
Dim zeile
Dim zeile2
With Sheets("Tabelle4")
zeile = Application.Match(Sheets("Tabelle3").Range("C13"), .Range("B:B"), 0)
If Not IsError(zeile) Then
zeile2 = Application.Match("*Ende", .Rows(zeile), 0)
If Not IsError(zeile2) Then
Sheets("Tabelle3").Range("C14") = .Cells(zeile, 1)
End If
End If
End With
End Sub

gruss hary
AW: frage
18.12.2011 16:53:04
Michael
In der Zelle steht nur "Ende" die 1. ist die Nummer nach der gesucht werden soll.
AW:zum verstaendniss
18.12.2011 16:59:43
hary
Sehen Deine Blaetter so aus?
Tabelle4
 ABC
811.12.201108.12.2011 
912.12.201109.12.2011 
1013.12.201110.12.2011 
1114.12.201111.12.2011 
1218.12.201112.12.2011Ende
1316.12.201113.12.2011 
1417.12.201114.12.2011 
1518.12.201115.12.2011 

Tabellendarstellung in Foren Version 5.30


Tabelle3
 CD
12   
1312.12.2011 
1418.12.2011<--hier soll das datum aus A rein?
15   

Tabellendarstellung in Foren Version 5.30


gruss hary
Anzeige
AW: AW:zum verstaendniss
18.12.2011 17:07:43
Michael
Ja der Aufbau ist so wie dein Beispiel aber in tabelle3 C13 steht eine Zahl z.b. 5123 und diese steht auch Tabelle4 irgendwo in Spalte B mit eben in Spalte C "Ende" oder "Beginn" und das Datum aus der Zeile wo in C zu der Zahl in B "Ende" steht soll nach Tabelle3 kopiert werden.
AW: dann passt doch...
hary
hallo
musste mal eben kurz weg.
...rueber2.

Sub rueber2()
Dim zeile
Dim zeile2
With Sheets("Tabelle4")
zeile = Application.Match(Sheets("Tabelle3").Range("C13"), .Range("B:B"), 0)
If Not IsError(zeile) Then
zeile2 = Application.Match("*Ende", .Rows(zeile), 0)
If Not IsError(zeile2) Then
Sheets("Tabelle3").Range("C14") = .Cells(zeile, 1)
End If
End If
End With
End Sub

gruss hary
Anzeige
AW: dann passt doch...
18.12.2011 20:08:16
Michael
Hallo Hary,
Ich hab es jetzt geschafft das er das Datum kopiert. :-)
Ich hab dann mal ein bischen hin und her probiert und festgestellt, das er nicht den letzten Wert nimmt.
Ich hab die Mappe nochmal zum Verständnis mit dem Beispiel angehängt.
https://www.herber.de/bbs/user/78036.xlsx
Gruß Michael
neuer Ansatz
19.12.2011 02:00:11
Erich
Hi Michael,
mal ein etwas anderer Ansatz:

Option Explicit
Sub rueber3()
Dim lngL As Long, lngZ As Long
With Sheets("Tabelle4")
lngL = .Cells(.Rows.Count, 2).End(xlUp).Row
lngZ = Evaluate("=MAX((" & .Name & "!B1:B" & lngL & _
"=" & Sheets("Tabelle3").Range("C13") & ")*(" _
& .Name & "!F1:F" & lngL & "=""Ende"")*ROW(1:" & lngL & "))")
If lngZ Then Sheets("Tabelle3").Range("J9") = .Cells(lngZ, 1)
End With
' Formel für lngZ (lngL=100):
' =MAX((Tabelle4!B1:B100=5674)*(Tabelle4!F1:F100="Ende")*ZEILE(1:100))
End Sub
In der Tabelle3!J7 steht die im Prinzip verwendete Excel-Matrixformel für die Zeilennummer lngZ:
https://www.herber.de/bbs/user/78037.xlsm
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: neuer Ansatz
19.12.2011 14:30:56
Michael
Hallo Erich,
ich habe deinen Vorschag ausprobiert und es funktioniert echt super!!!! :-)
Vielen Dank dafür!!!
Mir ist an meiner Tabelle aber noch etwas aufgefallen. Ich weiß nicht ob das hier dazu passt oder ein neues Thema erfordert.
Und Zwar habe ich in Tabelle 1 eine Vorlage, die von A-J63 genau eine Seite beim drucken ausfüllt.
Von A-J22 ist der Kopf in dem mit Formeln die Daten automatisch eingetragen werden, wenn A16 ausgefüllt wird. Von A-J23 bis A-J61 gebe ich die Tätigkeiten und Preise ein. In A-J63 sind Formeln zur Brechnung der Preise und in A-J62 die Überschriften zu den Ergebnissen in Zeile 63.
Bisher habe ich ich die erste Seite manuell kopiert, wenn die Zeilen 23-61 nicht ausgereicht haben.
Nur passen dann die Zeilenhöhen auf Seite Zwei nicht mehr.
Wie kann ich das über ein Makro realisieren, das er das Blatt von Seite 1 automatisch 1:1 übernimmt und nach unten (unter Seite1!) kopiert? Spalte J wird zwar nicht gedruckt aber für Zwischenrechnungen benötigt.
Ist sowas möglich?
Gruß Michael
Anzeige
Kannitverstan
19.12.2011 17:16:44
Erich
Hi Michael,
sorry, aber von deinem neuen Problem habe ich nur sehr wenig verstanden.
Das fängt bei einer Schreibweise an, die ich noch nie gesehen habe.
Welche Zellen (bitte in Excel-Schreibweise) meinst du mit "von A-J63"? Den Bereich A1:J36 ?
Was meinst du mit "Von A-J23 bis A-J61" ? Den Bereich A23:J61 ?
Und was ist "In A-J63" ?
Verstanden zu haben glaube ich:
Du schreibst Eingaben in die Zeilen 23 bis 61.
Wenn du Zeile 61 beschrieben hast und noch weitere Eingaben tätigen müsstest,
kopierst du "die erste Seite". Was genau kopierst du, welchen Bereich?
"Nur passen dann die Zeilenhöhen auf Seite Zwei nicht mehr." Das verstehe ich gar nicht.
Du siehst dein Excelblatt vor dir, ich nicht.
Drei Möglichkeiten:
Möchtest du, dass die Zeilen 1 bis 61 unter Zeile 61 noch mal eingefügt (also kopiert) werden?
Oder sollen eher die Zeilen 23 bis 61 unter Zeile 61 noch mal eingefügt (also kopiert) werden?
Oder sollen nur so viele Zeilen, wie du für die restlichen Eingaben brauchst, unter Zeile 61 eingefügt werden?
Vielleicht solltet du eine Beispielmappe hochladen mit dem Zustand vor und dem nach dem Kopieren.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Kannitverstan
19.12.2011 17:47:00
Michael
Hallo Erich,
So wie du es verstanden hast ist es in etwa richtig. Nur soll alles also A1:j63 kopiert werden.
Ich mach mal eine Mappe fertig und Lade sie dir dann hoch. Das wird aber erst so gegen um 8 oder halb 9 weil ich im Moment nicht in der Nähe des Computers mit der orginalmappe bin.
Gruß Michael
AW: Kannitverstan
19.12.2011 20:37:37
Michael
Hallo Erich,
hier ist die Mappe mit dem Problem.
Nähere Erklärungen stehen in der Mappe.
Ich hoffe du kannst was damit anfangen.
https://www.herber.de/bbs/user/78046.xlsx
Zeilen kopieren?
20.12.2011 07:13:13
Erich
Hai Michael,
es kommt mir ein wenig albern vor - aber: Hast du mal probiert, nicht den Bereich A1:J63,
sondern die kompletten Zeilen 1:63 zu kopieren? Dann werden die Zeilenhöhen automatisch mitgenommen -
und der Ausdruck kommt mit zwei Seiten aus.
Markieren kannst du die Zeilen, indem du auf die Zeilennummern links klickst.
Wars das schon?
Wenn irgendwelche Dinge rechts von Spalte J (also ab Spalte K) stören, kannst du das zuviel Kopierte ja wieder löschen.
(In der Beispielmappe steht da nichts.)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Zeilen kopieren?
20.12.2011 10:36:26
Michael
Hallo Erich,
Einfache, aber gute Lösung. Die hatte ich schon mal probiert, aber wieder verworfen weil er mir dann in der Druckvorschau immer nur die erste Seite zeigt. Er müsste dann also den Umbruch mit runter nehmen.
Das Drucken wird über ein Makro ausgeführt und gleichzeitig wird A13 um 1 hochgezählt. Deswegen wäre es schön wenn er den Umbruch dann automatisch mitnimmt. Denn sollte vergessen werden diesen Umbruch runter zu ziehen, wäre die fortlaufende Nummer in A13 weg und es könnte nicht nochmal gedruckt werden.
PrintArea ändern
20.12.2011 11:20:38
Erich
Hi Michael,
"verworfen weil er mir dann in der Druckvorschau immer nur die erste Seite zeigt."
Das wäre kein Grzund gewesen, die gute Lösung zu verwerfen.
Nicht nur die Druckvorschau beschränkt sich auf die 1. Seite - es wird tatsächlich auch nur die 1. Seite gedruckt.
Das liegt aber sicher nicht am Kopieren der Zeilen, sondern daran, dass du den Druckbereich auf A1:I63 festgelegt hast.
Dann wird natürlich auch nur dieser Bereich gedruckt!
Also solltest du in deinem Makro den Druckbereich (etwa PrintArea) ändern.
"Er müsste dann also den Umbruch mit runter nehmen."
Was für einen Umbruch? Ich habe keinen gesehen.
Was das Ganze mit dem Hochzählen von A13 zu tun haben sollte, erschließt sich mir nicht.
Du lieferst immer neue Bruchstücke - klarer wird die Geschichte so kaum.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: PrintArea ändern
20.12.2011 13:02:14
Michael
Hallo Erich,
nochmal zurück auf Anfang.
Also, ich hab mir vorgestellt, das ich per commandButton die Seite1 (A1:J63) ab Zeile 64 1zu1 einfügen kann.
Er sollte dabei den Druckbereich von A1:I63 auf A64:I126 automatisch mit übernehmen. (für eventuell folgende Zeilen (Seiten) das gleiche)
Gedruckt wird über commantButton mit folgendem code:

Private Sub CommandButton1_Click()
Call  _
drucken
End Sub
Modul1: Sub drucken()
Sheets ("Tabelle1").Select
[A13] = [A13] +1
ActiveSheet. PrintOut _
Copies:=2, ActivePrinter:="Drucker", Collate:=True
End Sub nach dem Drucken sollte er dann das kopieren wieder rückgängig machen, sodas wieder nur eine Seite (A1:J63) da ist.
Ich hoffe so ist es verständlicher.
Hier nochmal die Mappe mit Makro in Umbruchvorschau
https://www.herber.de/bbs/user/78051.xlsm
verständlicher, aber...
20.12.2011 20:06:14
Erich
Hi Michael,
den Sinn des Ganzen sehe ich nicht wirklich.
2 Punkte stören (mich):
a)
Wenn es mehrere (nehmen wir mal an, 3) Seiten gibt - was bedeuten dann die Werte in den Summenzeilen 63, 126 und 189?
Willst du wirklich pro Seite den Nettobetrag und daraus Umsatzsteuer und Gesamtbetrag ermitteln?
Soll der Kunde (vielleicht mit dem Taschenrechner) die 3 Gesamtbeträge addieren,
wenn der den "Gesamt-Gesamtbetrag" überweisen will?
Soll die Buchhaltung die drei USt-Beträge mit der Hand am Arm addieren und dann verbuchen?
b)
Wenn nach dem Ausdruck alles hinter Seite 1 gelöscht wird, bleiben die Eingaben in den Zeilen 23:61 erhalten,
die Eingaben auf den Folgeseiten (Zeilen 86:124, 149:127) werden gelöscht.
Auch die Summen der Folgeseiten verschwinden.
Da muss sich jemand schnell woanders die Summen, auch die abzuführende Umsatzsteuer, merken...
Oder werden diese Daten gar nicht mehr gebraucht? Kann ich mir nicht vorstellen...
Für mich sieht das so aus wie die Arbeit mit der Schreibmaschine im Vor-Computerzeitalter:
Tippen - Drucken - Weg
Man stelle sich nur mal vor, dass auf Seite 3 ein Fehler gemacht wurde. (Menschen machen Fehler.)
Nach dem Löschen darf man (fast) alles noch mal eingeben. Ist das wirklich sinnvoll?
Ich will nun nicht nur rummeckern, sondern auch ein wenig unterstützen.
Schau dir mal diese Mappe an:

Die Datei https://www.herber.de/bbs/user/78058.xlsm wurde aus Datenschutzgründen gelöscht


Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
AW: verständlicher, aber...
20.12.2011 22:49:45
Michael
Hallo Erich,
ich habe mir die Mappe angesehen und es funktioniert sehr gut.
Zu deiner Frage A: nein, es sollen dann, wenn eine Seite folgt diese Berechnungen nicht auf jeder Seite einzeln gemacht werden. Ich wollte dies über eine Wenn-Funktion machen. So das nur eine Zwischensumme (in I63 und in I62 "Übertrag") auf den Seiten gebildet wird. Habe aber gerade gemerkt, dass es nicht geht.
Zu B: Es ist nicht schlimm da die Seiten beim drucken nochmal als externe Excel-Datei (z.B. auf Laufwerk D unter Mappe "216045.xlsm") gespeichert werden sollen. Die wichtigen Beträge wie Mwst. und Gesamtbetrag werden beim drucken in einem anderen Tabellenblatt gespeichert.(mit der Nummer aus A13 und dem Name)
Ich habe auf Seite 1 mal die Formeln zum Verständnis eingefügt.( funtioniert so aber nicht, bin ich noch am düffteln)
https://www.herber.de/bbs/user/78060.xlsm
Ich hoffe so bringt es dir etwas Licht ins Dunkel.
PS: Ich empfinde es nicht als rummeckern, denn es sind ja sinnvolle Fragen und Anregungen.
Außerdem bin ich dir zu großem Dank verpflichtet, dass du mir überhaupt hilfst!!!
AW: dann passt doch...
18.12.2011 18:29:57
Michael
Hab es gerade probiert aber er kopiert das Datum nicht.
Ich hab hier mal die Bsp-Mappe hochgeladen und mal so angepasst wie die Orginalmappe aussieht.
https://www.herber.de/bbs/user/78033.xlsx
AW: Ändere im Code von Hary den .Range Bereich
18.12.2011 16:01:53
Hary
Sorry,
ich hab was vergessen.
Das Datum in aus Tabelle4 steht in Spalte A.

339 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige