Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema RefEdit
BildScreenshot zu RefEdit RefEdit-Seite mit Beispielarbeitsmappe aufrufen

Wenn A7=B5 dann kopiere Bereich und füge ein | Herbers Excel-Forum


Betrifft: Wenn A7=B5 dann kopiere Bereich und füge ein von: Matze
Geschrieben am: 09.02.2012 15:08:09

Hallo VBA-Götter,

ich versuche gerade für einen "Jahresüberblick" eine Ansicht mit Daten aus einem anderen Blatt zu erstellen.
Dazu soll abgeglichen werden, ob das Datum in A7 = dem in B5 entspricht (nur als Beispiel der Bereich soll über das ganze Jahr gehen) und wenn das Wahr ist, soll aus dem Blatt "Daten" der Bereich G7 bis "EndeInhalt" in B7:"EndeInhalt" kopiert werden.

Ich hatte versucht dies mit einer Wenn-Abfrage zu realisieren, aber das wird bei 500x700 Datenzellen extrem unperformant.

Vielen Dank für Eure Hilfe
Matze

Im Anhang noch ein Beispiel meiner Daten
https://www.herber.de/bbs/user/78823.xlsm

  

Betrifft: AW: Wenn A7=B5 dann kopiere Bereich und füge ein von: Dirk
Geschrieben am: 09.02.2012 19:07:53

Hallo Matze,

vorab ich würd mich nicht so betitelt (VBA-Götter):-D

da deine Beschreibung nicht wirklich mit deiner Datei übereinstimmt ist es etwas schwer dir zu Helfen.

Wenn ich nur auf deine Worte vertraue und die Richtig verstehe suchst du ein tool, das dir wenn a7=b5 ist
die Daten von sheets("Daten").Range("G7:z7") nach B7.... kopiert. (wenn die zeile bis z beschrieben ist)

sollte ich das richtig verstanden haben kannst du ja mal in einer kopie das hier testen

Sub t2()
Dim lz, alz, az As Range
Dim ber1, ber2 As String
With ThisWorkbook.Sheets("AP (1A)").Range("a7:a20000")
         Set lz = .Find(what:="*", after:=.Range("A1"), LookIn:=xlValues, _
               lookat:=xlWhole, searchdirection:=xlPrevious)
       End With
Set alz = Range("a7:a" & lz.Row)
For Each az In alz
   If az.Offset(-2, 1) = az Then
ber1 = Range(Cells(az.Row, 7), Cells(az.Row, 200)).Address
       With ThisWorkbook.Sheets("Daten").Range(ber1)
         Set lz = .Find(what:="*", after:=.Range("A1"), LookIn:=xlValues, _
               lookat:=xlWhole, searchdirection:=xlPrevious)
       End With
   ber1 = Range("g" & lz.Row, lz.Address).Address
   ber2 = Range("b" & az.Row, Cells(az.Row, (lz.Column - 5))).Address
   MsgBox (ber1 & vbCrLf & ber2)
     Sheets("Daten").Range(ber1).Copy Destination:=Sheets("AP (1A)").Range(ber2)
       End If
Next
End Sub
Gruß
Dirk


  

Betrifft: AW: Wenn A7=B5 dann kopiere Bereich und füge ein von: Matze
Geschrieben am: 10.02.2012 14:16:39

Hallo Dirk,

das mit den Göttern ist doch immer eine Angelegenheit der Sichtweise. Aus meinem Blickwinkel bist du ein Gott :)

Grundsätzlich hast du meine Beschreibung richtig verstanden, soweit ich sie richtig beschrieben habe.
Dein Makro tut auch schon mal in Ansätzen, was ich erwartet habe ...
Zwei "Kleinigkeiten" sind da aber noch:

- zum einen habe ich nicht erwähnt, dass in Spalte A und Reihe 5 eine Formel steht, die jeweils ein Datum aus einem anderen Blatt übernimmt (='Daten'!A7 .... ='Datum'!E12 .... usw.) .... ich weiß nicht ob das beim vergleichen ein Problem darstellt, oder ob da eine Varibale als Wert deklariert werden muss, denn komischweise funktioniert dein Makro nur in den Zellen in denen ich Datenbedingt "#NV" stehe habe

- zweitens, sollte das Makro die Reihe 5 Zellenweise mit den Zellen in Spalte A auf Gleichheit untersuchen und bei "wahr" am besten den WERT aus dem Blatt Daten in den "Schnittpunkt" kopieren, da ich sonst lauter Formeln aus Blatt "Daten" noch einmal in dem Blatt "AP (1A)" stehen habe.

Ich danke Dir wie verrückt, dass du dich mit meinen Problemen beschäftigst.

Grüße
Matze


  

Betrifft: AW: Wenn A7=B5 dann kopiere Bereich und füge ein von: Dirk
Geschrieben am: 10.02.2012 18:53:19

Hallo Matze,
deinen ersten punkt kann ich nicht bestätigen, kann auch sein, das ich das erst geprüft hatte nachdem ich mit den änderungen fertig war.

zu 2
ich hoffe ich bin nicht wieder schwer von begriff gewesen.

prüfen a7=b2 wenn true dann kopiere alle Werte (ohne Formel) aus dem Blatt Daten (die Zeile)
prüfen a8=c2 wenn true dann kopiere alle Werte (ohne Formel) aus dem Blatt Daten (die Zeile)
prüfen a9=d2 wenn true dann kopiere alle Werte (ohne Formel) aus dem Blatt Daten (die Zeile)
....

wenn das so richtig ist dann bitte schön
https://www.herber.de/bbs/user/78847.xlsm
Die Datei hatte ich selber bebaut, wie ich deine Beschreibung verstanden hatte.

wenn nicht würd ich dich bitten ne Beispieldatei (mit dem Blatt Daten) hochzuladen.
kannst die Daten ja durch ein paar Zahlen Tausen.

Gruß
Dirk


Beiträge aus den Excel-Beispielen zum Thema "Wenn A7=B5 dann kopiere Bereich und füge ein"