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

Zelladresse in Code mit - Syntaxfrage

Zelladresse in Code mit - Syntaxfrage
11.02.2009 08:54:00
Peter
Guten Tag
Innerhalb eines Codes füge ich eine neue Codezeile ein. Dabei gibt mir "Variante 1" für die Zeile 5 den richtigen Wert.
Nun möchte ich G5 ersetzen, damit in jeder Schlaufe der richtige Wert resultiert.
Anstatt G5 schreibe ich für G
[spName].column ' dies ergibt die Zahl 7
und für 5 schreibe ich
zNr ' dies ist eine Longvariable, die hochgezählt wird und immer die entsprechende Zeilennummer zurückgibt.
Irgend etwas mache ich jedoch falsch, denn weder Code Variante 2 noch 3 funktionieren. Beide Male stoppt der Code auf der entsprechenden Codezeile.
Was mache ich falsch?
Danke für eine Antwort.
Gruss, Peter
Variante 1
.Cells(zNr, [spVerändNAVclass].Column) = WorksheetFunction.Round( _
[MAX(IF(spxNa = G5,spxVe))-MIN(IF(spxNa= G5,spxVe))], 12)
Variante 2
.Cells(zNr, [spVerändNAVclass].Column) = WorksheetFunction.Round( _
[MAX(IF(spxNa = .cells(znr,[spName].column),spxVe))-MIN(IF(spxNa = .cells (znr ,[spName].column),spxVe))], 12)
Variante 3
.Cells(zNr, [spVerändNAVclass].Column) = WorksheetFunction.Round( _
[MAX(IF(spxNa = .cells(znr,[spName].column).address(0,0),spxVe))-MIN(IF(spxNa = .cells ( _
znr ,[spName].column).address(0,0),spxVe))], 12)

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

Betreff
Datum
Anwender
Anzeige
Nachtrag
11.02.2009 09:18:00
Peter
Guten Tag
ich habe nun noch eine Stringvariable erstellt, der ich die Zellreferenz zuweise. Beim ersten Durchlauf hat strZe den Wert "G5".
Wie muss ich diese in die Formel unten einbetten?
Gruss, Peter
.Cells(zNr, [spVerändNAVclass].Column) = WorksheetFunction.Round( _
[MAX(IF(spxNa = strZe ,spxVe))-MIN(IF(spxNa= strZe &,spxVe))], 12)
AW: Rückfrage - Beispielmappe?
11.02.2009 09:27:00
Erich
Hi Peter,
hast du mal eine Beispielmappe, in der Variante 1 ein richtiges Ergebnis für G5 brächte?
Ich glaube das nämlich nicht. Den Ausdruck
MAX(IF(spxNa = G5,spxVe))
verstehe ich so nicht. Der Teil "IF(spxNa = G5,spxVe)" ist spxVe, wenn spxNa=G5 ist, sonst FALSCH.
(Es ist kein Wert für den Sonst-Zweig des IF angegeben.)
Das MAX wird dann über nur einen Wert gebildet - entweder
MAX(spxVe) = spxVe
oder MAX(FALSCH), und das ist Null.
Beim MIN dahinter ist es ähnlich.
Hilfreich wäre zu wissen, was du berechnen willst - vielleicht erstmal einfach als Excelformel.
(Ich meine die Bestimmung der Zielzeile, die Spalte ist wohl 12.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Rückfrage - Beispielmappe?
11.02.2009 09:36:00
Peter
Hallo Erich
Danke für deine Antwort.
Jetzt habe ich es doch noch geschafft.
Wie in meinem zweiten Eintrag beschrieben, habe ich der Variable strZe die Zelladresse zugewiesen, die dann entsprechend hochzählt.
Dann habe ich [] durch Evaluate(" ....") ersetzt und zuletzt habe ich dann in den String die beiden strZe eingefügt.
.Cells(zNr, [spVerändNAVclass].Column) = WorksheetFunction.Round( _
Evaluate("MAX(IF(spxNa =" & strZe & " ,spxVe))-MIN(IF(spxNa=" & strZe & ",spxVe))"), 12)
Damit habe ich die die Formel (Beispiel Zeile 5) in der Tabelle ersetzt:
{=MAX(WENN(spxNa=G5;spxVe))-MIN(WENN(spxNa=G5;spxVe))}
spxNa und spxVe sind Spaltenbereiche. Mit der Formel resp. dem Code errechne ich die Differenz zwischen dem Max und dem Min Wert der Einträge im Bereich spxVe, bei denen in Spalte spxNa der gleiche Name eingetragen ist.
Gruss, Peter
Anzeige
AW: Sorry - Lange Leitung
11.02.2009 09:52:00
Erich
Hi Peter,
sorry, da habe ich wirklich heftig auf der Leitung gestanden.
(... und die 12 war auch nicht die Spalte, sondern die Nachkommastellen ...)
Nur ein Tipp - nachdem du es selbst vollbracht hast.
Mit Zwischenwert könnte es übersichtlicher sein:

Sub aaa()
Dim zNr As Long, strZe As String
Dim dblW As Double
strZe = "G5"
zNr = 8
With ActiveSheet
'Variante 1
dblW = Evaluate("MAX(IF(spxNa=" & strZe & ",spxVe))-MIN(IF(spxNa=" & strZe & ",spxVe))")
.Cells(zNr, [spVerändNAVclass].Column) = WorksheetFunction.Round(dblW, 12)
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Sorry - Lange Leitung
11.02.2009 11:08:00
Peter
Hallo Erich
Danke für die Antwort.
Ja, das macht wirklich Sinn, das so übersichtlicher zu gestalten.
Freundlicher Gruss, Peter
AW: Rückzug - Missverständnis!
11.02.2009 09:32:00
Erich
Hi Peter,
spxNa und spxVe sind Bereiche - und da kann man natürlich MIN und MAX bilden.
Ich hatte das nicht als Arrayformel gesehen. Muss jetzt noch mal drüber denken.
Eine Beispielmappe wäre günstig.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige