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

CopyPaste Schleife - bitte um Hilfe

CopyPaste Schleife - bitte um Hilfe
29.12.2014 12:05:43
Thorben

Hallo Ihr lieben,
ich hoffe Ihr hattet alle schöne Weihnachtstage und viele Schokomänner und Frauen :o)
ich brauche mal Hilfe bei folgendem:
Tabelle 1
Zahlen in A2:A30000
Tabelle 2
Berechnungen
In A3 / Tabelle 2 kann per CopyPaste oder manuell nun eine Zahl aus Tabelle 1 kopiert / geschrieben werden. Anschließend steht dann in den Zellen S41 und D44 in Tabelle 2 ein entsprechendes Ergebnis.
Da ich gerne diesen manuellen CopyPaste Weg umgehen möchte soll es mit einer VBA Schleife organisiert werden.
Also alle Zahlen aus Tabelle 1 in Tabelle 2 nacheinander berechnen und jeweils das Ergebnis aus den Zellen S41 und D44 aus Tabelle 2 neben die Zahlen in Tabelle 1 schreiben.
Anbei eine Bsp.Mappe
https://www.herber.de/bbs/user/94629.xlsx
Ich hoffe das ist verständlich erklärt.
Besten Dank schon mal im Voraus.
MfG
Thorben

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

Betreff
Datum
Anwender
Anzeige
AW: CopyPaste Schleife - bitte um Hilfe
29.12.2014 18:55:14
Dieter Klemke
Hallo Thorben,
du kannst das mit dem folgenden Programm machen:
Sub Verarbeitung()
Dim letzteZeileE As Long
Dim wb As Workbook
Dim wsE As Worksheet
Dim wsB As Worksheet
Dim zeileE As Long
Set wb = ThisWorkbook
Set wsE = wb.Worksheets("Ergebnis")
Set wsB = wb.Worksheets("Berechnung")
letzteZeileE = wsE.Cells(wsE.Rows.Count, "A").End(xlUp).Row
If letzteZeileE < 2 Then letzteZeileE = 2
wsE.Range(wsE.Cells(2, "B"), _
wsE.Cells(letzteZeileE, "C")).ClearContents
For zeileE = 2 To letzteZeileE
wsB.Range("A3") = wsE.Cells(zeileE, "A")
wsE.Cells(zeileE, "B") = wsB.Range("S41")
wsE.Cells(zeileE, "C") = wsB.Range("D44")
Next zeileE
End Sub

(Ich habe dein Blatt "Tabelle1" in "Ergebnis" und das Blatt "Tabelle2" in "Berechnung" umbenannt.
Die ergänzte Arbeitsmappe findest du hier:
https://www.herber.de/bbs/user/94638.xlsm
Viele Grüße
Dieter

Anzeige
Super Danke! ähm.kann man da nochn Turbo einbauen?
30.12.2014 11:53:42
Thorben
Dieter / Thorben
Das läuft ja prima durch, endlich mal alles auf einen Blick. Dafür schon mal danke.
Meinst Du das mann die If For Next Anweisung irgendwie anders verarbeiten kann?
Meine derzeit 11250 Duchgänge laufen schon seit 1 Std., und sind noch nicht fertig!!!
An den Berechnungen kann es nicht liegen, die dauern bei eine Nummer ca. 0,103 Sekunden + etwas Zeit fürs eintragen sollte es bei 11250 Durchgängen nach ca. max 20-25 Minuten erledigt sein!
Vielen Dank schon einmal für weiteren Support.
MfG
Thorben

AW: Super Danke! ähm.kann man da nochn Turbo einbauen?
30.12.2014 13:22:03
hary
Moin
Teste mal so.Ohne Zwischentabelle.
Dim letzteZeileE As Long
Dim wb As Workbook
Dim wsE As Worksheet
Dim wsB As Worksheet
Dim zeileE As Long
Dim a As Variant
Dim i As Long
Set wb = ThisWorkbook
Set wsE = wb.Worksheets("Ergebnis")
Set wsB = wb.Worksheets("Tabelle3")
letzteZeileE = wsE.Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To letzteZeileE
a = Application.Match(wsE.Cells(i, 1), wsB.Columns(1), 0)
If IsNumeric(a) Then
'"vorhanden"
wsE.Cells(i, 2) = wsB.Cells(a, 2) - wsB.Cells(a, 3)
wsE.Cells(i, 3) = wsE.Cells(a, 2) * wsB.Cells(a, 4)
End If
Next

gruss hary

Anzeige
AW: oder..
30.12.2014 13:48:08
hary
Moin nochmal
... du baust die Fromel rein.
Dim letzte As Long
With Worksheets("Ergebnis")
letzte = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("B2:B" & letzte).FormulaLocal = "=SVERWEIS(A2;Tabelle3!A:D;2;0)-SVERWEIS(A2;Tabelle3!A: _
D;3;0)"
.Range("C2:C" & letzte).FormulaLocal = "=B2*SVERWEIS(A2;Tabelle3!A:D;4;0)"
End With

gruss hary

AW: Super Danke! ähm.kann man da nochn Turbo einbauen?
30.12.2014 13:23:27
Dieter Klemke
Hallo Thorben,
eine Beschleunigung erreichst du, wenn du deine Berechnung, die jetzt durch Formeln im Blatt "Berechnung" gemacht wird, auch in VBA durchführst.
Bei deiner Miniberechnung könnte das so aussehen:

Sub Verarbeitung_neu()
Dim C8 As Double
Dim D8 As Double
Dim D44 As Double
Dim dauer As Single
Dim E8 As Double
Dim fehl As Boolean
Dim letzteZeileE As Long
Dim rng As Range
Dim S41 As Double
Dim wb As Workbook
Dim wsB As Worksheet
Dim wsD As Worksheet
Dim wsE As Worksheet
Dim zeileD As Long
Dim zeileE As Long
dauer = Timer
Set wb = ThisWorkbook
Set wsB = wb.Worksheets("Berechnung")
Set wsD = wb.Worksheets("Daten")
Set wsE = wb.Worksheets("Ergebnis")
letzteZeileE = wsE.Cells(wsE.Rows.Count, "A").End(xlUp).Row
If letzteZeileE < 2 Then letzteZeileE = 2
wsE.Range(wsE.Cells(2, "B"), _
wsE.Cells(letzteZeileE, "C")).ClearContents
Set rng = wsD.Columns("A")
For zeileE = 2 To letzteZeileE
zeileD = Zeilennummer(Suchbegriff:=wsE.Cells(zeileE, "A"), _
SuchBereich:=rng, _
Fehler:=fehl)
If fehl Then
wsE.Cells(zeileE, "B") = "nicht gefunden"
Else
C8 = wsD.Cells(zeileD, "B")
D8 = wsD.Cells(zeileD, "C")
E8 = wsD.Cells(zeileD, "D")
S41 = C8 - D8
D44 = S41 * E8
wsE.Cells(zeileE, "B") = S41
wsE.Cells(zeileE, "C") = D44
End If
If zeileE Mod 100 = 0 Then
Application.StatusBar = "Zeile = " & zeileE
End If
Next zeileE
dauer = Timer - dauer
MsgBox "Dauer=" & Format$(dauer, "#,##0.00") & " Sek."
Application.StatusBar = Empty
End Sub
Function Zeilennummer(Suchbegriff As Double, _
SuchBereich As Range, _
Fehler As Boolean) As String
Fehler = False
On Error GoTo FehlerBeh
Zeilennummer = Application.WorksheetFunction. _
Match(Suchbegriff, SuchBereich, False)
On Error GoTo 0
Exit Function
FehlerBeh:
Fehler = True
End Function
Für den Zeitvergleich zwischen beiden Versionen habe ich eine Zeitmessung eingebaut.
Ich füge die ergänzte Mappe bei:
https://www.herber.de/bbs/user/94650.xlsm
Viele Grüße
Dieter

Anzeige
Vielen Dank Ihr 2! Die Miniberechnung...
30.12.2014 14:11:22
Thorben
ist eigentlich eine recht Große und besteht aus mehreren statistischen Erhebungen. Diese werden miteinander verdrahtet und dessen Kummulierung dann als Vorhersage in S41 ausgeworfen!
Trotz allem geht das recht schnell voran da sich die Daten in fertigen Kreuztabellen befinden und nur per Sverweis geholt werden.
Mein Beispiel ist tatsächlich nur "mini" da es mir Hauptsächlich um die Schleife zum Auslesen ging.
Also an dieser Stelle besten Dank für 3 super Lösungen.
Ich werde mich jetzt hinsetzen, staunen und lernen!
Guten Rutsch Ihr 2
MfG
Thorben

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige