Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
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

Andere Berechnung in Makro

Andere Berechnung in Makro
06.05.2004 21:19:52
Daniel
Hallo Zusammen.
In einem 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)
Wie muss es heißen?
Oder braucht Ihr das ganze Makro?
Gruß
Daniel

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Andere Berechnung in Makro
PeterW
Hallo Daniel,
um deine Frage beantworten zu können müsstest du die Aufgabe etwas genauer beschreiben; ist der Bezug in der Formel immer gleich oder muss die Formel auf die Zeile lngRow verweisen? Der einfachste Weg für dich (und uns) dürfte eine Beispieldatei mit Erklärungen und dem vorhandenen funktionierenden Code sein.
Gruß
Peter
AW: Andere Berechnung in Makro
06.05.2004 22:01:11
Daniel
Ok, dann doch das komplette Makro:
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 "1DayROC" 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
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 Wie muss es heißen?
Beste Grüße,
Daniel
Anzeige
AW: Andere Berechnung in Makro
PeterW
Hallo Daniel,
mag an der Tageszeit liegen aber ohne zu wissen, von wo aus das Makro gestartet wird kann ich nur im Kaffeesatz lesen ('1DayROC' taucht in deinem Makro nicht auf). Vielleicht findet sich ein anderer Antworter, der das Problem lösen kann.
Gruß
Peter
Mein Fehler!
06.05.2004 22:29:42
Damiel
Sorry, neuer Versuch:
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

Anzeige
AW: Andere Berechnung in Makro
06.05.2004 22:28:56
Josef
Hallo Daniel!
Versuch mal
wsPos.Cells(lngRow + 1, c).FormulaR1C1 = _
"=IF(AND('1DayROC'!R[1]C[-1]<=0,Calc!R[1]C[-1]<=0),'1DayROC'!R[1]C[-1],0)"

Gruß Sepp
AW: Andere Berechnung in Makro
07.05.2004 07:49:16
Daniel
Hallo Sepp!
An sich scheint das Makro zu funktionerien.
Leider ist aber die Geschwindigkeit sehr, sehr beshcränkt.
Im Gegensatz zu den MAkros die Du mir vorher gemacht hast,
wird hier Zelle für zelle berechnet. Das ist einfach nicht machbar.
Gibt es eine effizientere Lösung?
Grüße
Daniel
Anzeige
AW: Andere Berechnung in Makro
Josef
Hallo Daniel!
Ich dachte, di willst die Formel in den Zellen!
In deinem Code hab ich keine Variablen für "1DayROC" bzw. "Calc" gefunden,
deshalb so.
If Sheets("1DayROC").Cells(lngRow + 1, c - 1) &lt= 0 And Sheets("Calc").Cells(lngRow + 1, c - 1) &lt= 0 Then
wsPos.Cells(lngRow + 1, c) = Sheets("1DayROC").Cells(lngRow + 1, c - 1)
Else
wsPos.Cells(lngRow + 1, c) = 0
End If
Gruß Sepp
AW: Andere Berechnung in Makro
07.05.2004 08:11:57
Daniel
@ Sepp!
Bitte schau Dir mal das Posting an PeterW an.
Da habe ich das komplette Makro kopiert.
In dem Posting, das Du gelesen hast war ein Fehler drin!
Danke.
Melde mich dann Abend wieder.
Schönen Tag.
Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige