Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
424to428
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
424to428
424to428
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Nochmal wegen Makro

Nochmal wegen Makro
07.05.2004 17:29:44
@
Hallo Sepp.
Leider fuktioniert das immernoch nicht so wie ich will (Effizienz), deshalb hier nochmal das komplette Makro:
Die Berechnung soll ja auf
WENN(UND('1DayROC'!B4 umgestellt werden.
Ich schaffe das irgendwie nicht so einzufügen, dass es nicht Zelle für zelle berechnet. Danke für die Hilfe!
Option Explicit
Sub Changes() Dim rng As Range Dim c As Integer, maxc ' Anzahl der Spalten Dim lngE As Long 'für letzte gefüllte Zeile Dim lngRow As Long 'Zeilenzähler in "ROCs" Dim wsPos As Worksheet, wsNeg As Worksheet, wsROCs As Worksheet Set wsPos = Worksheets("Pos") Set wsNeg = Worksheets("Neg") Set wsROCs = Worksheets("ROCs") 'Lösche wsPos.Cells.Delete Shift:=xlUp wsNeg.Cells.Delete Shift:=xlUp 'Übertrage Erste Spalte und erste Zeile aus Datablatt Application.CutCopyMode = False wsPos.Select wsROCs.Columns("A:A").Copy wsPos.Range("A1").Select wsPos.Paste wsROCs.Rows("1:1").Copy wsPos.Range("A1").Select wsPos.Paste wsPos.Range("A1").Select maxc = 1 With wsROCs 'Letzte gefüllte Zelle in Zeile 1 (Überschrift) ermitteln While IsEmpty(.Cells(1, maxc)) = False: maxc = maxc + 1: Wend If maxc < 2 Then Exit Sub 'Letzte gefüllte Zelle in Spalte "B" ermitteln lngE = IIf(IsEmpty(.Range("B65536")), .Range("B65536").End(xlUp).Row, 65536) For c = 2 To maxc lngRow = 2 For Each rng In wsROCs.Range(.Cells(2, c), .Cells(lngE, c)) If rng <> "" And rng.Offset(1, 0) <> "" Then 'wenn Zelle in Zeile r und r+1 gefüllt dann wsPos.Cells(lngRow + 1, c) = (rng.Offset(1, 0) / rng) - 1 lngRow = lngRow + 1 'Zeilenzähler erhöhen End If Next rng Next c End With End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Nochmal wegen Makro
07.05.2004 19:29:37
Josef
Hallo Daniel!
Sorry aber die Verwirrung nimmt zu!
die Sheets "1DayROC" und "Calc", sind für mich zumindest,
nicht auffindbar!
Bitte beschreib nochmal genau was wann wohin kopiert bzw.
wie berechnet werden soll!
Gruß Sepp
AW: Nochmal wegen Makro
07.05.2004 19:35:10
Daniel
Hmm. Langsam wundere ich mich was ich mache.... :-)
Es muss noch
Dim wsCalc as Worksheet dazu.
Set wsCalc = Worksheets ("Calc")
und wsROCs = Worksheets("1DayROC")
Sorry, bin im Moment etwas durch den Wind.
Daniel
Nachtrag
07.05.2004 19:40:43
Daniel
Und was geändert werden soll:
In dem Makro habe ich folgende Berechnnung:
wsPos.Cells(lngRow + 1, c) = (rng.Offset(1, 0) / rng) - 1
lngRow = lngRow + 1 '
Statt dieser hätte ich nun gerne diese:
WENN(UND('1DayROC'!B4&lt=0;Calc!B4&lt=0);'1DayROC'!B4;0)
Anzeige
AW: Nachtrag
07.05.2004 20:23:34
Josef
Hallo Daniel!
Trotz Verwirrung, versuch mal diesen Code.
Option Explicit

Sub Changes()
Dim rng As Range
Dim intC As Integer
Dim intCol ' Anzahl der Spalten
Dim lngE As Long 'für letzte gefüllte Zeile
Dim lngRow As Long 'Zeilenzähler in "ROCs"
Dim wsPos As Worksheet
Dim wsNeg As Worksheet
Dim wsROCs As Worksheet
Dim wsCalc As Worksheet
Set wsPos = Worksheets("Pos")
Set wsNeg = Worksheets("Neg")
Set wsROCs = Worksheets("1DayROC")
Set wsCalc = Worksheets("Calc")
'Lösche
wsPos.Cells.ClearContents 'besser als .Delete Shift:=xlUp
wsNeg.Cells.ClearContents 'besser als .Delete Shift:=xlUp
'Übertrage Erste Spalte und erste Zeile aus Datablatt
wsPos.Activate 'eigentlich auch unnötig
wsROCs.Columns("A:A").Copy wsPos.Range("A1")
wsROCs.Rows("1:1").Copy wsPos.Range("A1")
Application.CutCopyMode = False
With wsROCs
'Letzte gefüllte Zelle in Zeile 1 (Überschrift) ermitteln
intCol = IIf(IsEmpty(.Range("IV1")), .Range("IV1").End(xlToLeft).Column, 256)
'Letzte gefüllte Zelle in Spalte "B" ermitteln
lngE = IIf(IsEmpty(.Range("B65536")), .Range("B65536").End(xlUp).Row, 65536)
For intC = 2 To intCol
lngRow = 2
For Each rng In wsROCs.Range(.Cells(2, intC), .Cells(lngE, intC))
If rng <> "" And rng.Offset(1, 0) <> "" Then
'wenn Zelle in Zeile r und r+1 gefüllt dann
If wsROCs.Cells(lngRow, intC) <= 0 And wsCalc.Cells(lngRow, intC) <= 0 Then
wsPos.Cells(lngRow, intC) = wsROCs.Cells(lngRow, intC)
'mit der Zeile bin ich mir nicht sicher!
'du schreibst "WENN(UND('1DayROC'!B4<=0;Calc!B4<=0);'1DayROC'!B4;0)"
'das heist für mich, du willst eine Zeile tiefer suchen!
'wenn ja, dann musst du schreiben ".Cells(lngRow + 1, intC)"
Else
wsPos.Cells(lngRow, intC) = 0
End If
lngRow = lngRow + 1 'Zeilenzähler erhöhen
End If
Next
Next
End With
End Sub

Mit den Zeilen bin ich mir aber nicht ganz sicher!(siehe Kommentar)
Gruß Sepp
Anzeige
Danke!
07.05.2004 20:36:47
Daniel
Hallo Sepp!
Es scheint zu gehen. Traumhaft!
Danke!
Daniel
AW: Danke!
07.05.2004 20:41:44
Josef
Hallo Daniel!
Dieser Teil geht kürzer!
With wsROCs
'Letzte gefüllte Zelle in Zeile 1 (Überschrift) ermitteln
intCol = IIf(IsEmpty(.Range("IV1")), .Range("IV1").End(xlToLeft).Column, 256)
'Letzte gefüllte Zelle in Spalte "B" ermitteln
lngE = IIf(IsEmpty(.Range("B65536")), .Range("B65536").End(xlUp).Row, 65536)
For intC = 2 To intCol
For lngRow = 2 To lngE
If .Cells(lngRow, intC) <= 0 And wsCalc.Cells(lngRow, intC) <= 0 Then
wsPos.Cells(lngRow, intC) = .Cells(lngRow, intC)
Else
wsPos.Cells(lngRow, intC) = 0
End If
Next
Next
End With

Gruß Sepp
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige