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

Fehler 2015

Fehler 2015
10.08.2016 12:02:56
ViGo
Hallo zusammen!
Ich hab ein Problem mit folgender Formel:
aa = Sheets("Marktanalyse").Application.Evaluate("=index(if(counta(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & ")>=1,large(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & " ,1),""""))")
Wenn ich mit der Maus über die Variable aa fahre, dann bekomm ich den Fehler 2015 angezeigt. Ich hab im Netz gelesen, dass VBA meist nicht weiß, welches Tabellenblatt gemeint ist, aber hab ich das nicht mit
aa = Worksheets("Marktanalyse").Evaluate....
abgefangen? Könnt ihr mir da weiterhelfen?
Viele Grüße, ViGo

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler 2015
10.08.2016 12:19:24
Daniel
Hi
naja, das hilft so nichts.
bei Evaluate muss die Formel so geschrieben werden, wie sie in englisch in der Zelle stehen müsste.
dazu muss eben der Tabellenblattname, so wie er auf dem Reiter steht, mit "!" und in Hochkomma vor die Zelladresse geschreiben werden, aber das hast du ja gemacht.
das Tabellenblatt brauchst du für Range und Cells, das müsstest du aber mit der WITH-Klammer realisieren:
With Sheets("Marktanalyse")
aa = Application.Evaluate(=index(if(counta(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), .Cells( _
letztezeile, 29)).Address & ")>=1,large(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & " ,1),""""))")
End with
da du hier aber von der Range nur den Adressstring ermittelst, ist es vollkommen egal, auf welchem Tabellenblatt die Range liegt, du kannst also einfach auch den Blattbezug vor Range und Cells ganz weglassen und dann das Blatt verwenden, welches grad zufällig aktiv ist (ausser, du arbeitest mit Diagrammblättern und ein Diagrammblatt wäre aktiv, dann funktionert das nicht)
Gruß Daniel
Anzeige
AW: Fehler 2015
10.08.2016 12:30:57
ViGo
Ja das mit dem ! und Hochkomma vor dem Tabellenblattnamen hab ich von dir gelernt! :)
Aber das war ein guter Tipp mit:
bei Evaluate muss die Formel so geschrieben werden, wie sie in englisch in der Zelle stehen müsste.
Ich hab das nun einfach mal in eine Zelle geschrieben, also so:
=index(if(counta(Marktanalyse!AC3:AC7)>=1,large(Marktanalyse!AC3:AC7,1),""))
und da scheint irgendetwas falsch mit der Formel zu sein....
AW: Fehler 2015
10.08.2016 12:53:47
Daniel
Hi
die Formel an sich ist kompletter Unfug.
die Index-Funktion braucht als ersten Parameter einen Zellbereich, als zweiten Parameter eine Zeilen- und als dritten Parameter eine Spaltennummer.
du bietest ihr aber als ersten Parameter eine Zahl (Large) oder einen Text (leerstring) an.
das kann nicht funktioneren.
Was willst du überhaupt berechnen?
bevor du mit VBA und Evaluate anfängst, solltest du die Formel erstmal in Excel funktionsfähig erstellen.
Gruß Daniel
Anzeige
AW: Fehler 2015
10.08.2016 13:08:40
ViGo
Insgesamt möchte ich in einer Spalte die 5. größten Werte ermitteln. Dabei kann es vorkommen, dass ein Wert zweimal vorkommt.
Beispiel:
größter Wert: 80
zweitgrößter Wert:80
drittgrößter Wert: 70
viertgrößter Wert:60
Fünftgrößter Wert: 50
Weil ich mit den gefundenen Werte anschließend weiterarbeiten muss (ich lese Informationen aus), brauch ich jeweils ihre Adresse.
Wenn ich die Adresse nicht hab, gibt VBA mir für die ersten beide Werte dieselben Infos aus (was so nicht stimmt).
AW: Fehler 2015
10.08.2016 13:15:00
Daniel
Hi
ist per Formel aufwendig.
in VBA würde ich einfach die Liste absteigend sortieren und dann die obersten 5 Werte verwenden.
wenn die Originaladresse benötigt wird, kann man ja die originanlzeilennummer vor dem Sortieren in einer Hilfsspalte sichern.
wobei sich bei deiner Aufgabe die Frage stellt, welche Werte verwendet werden sollen, wenn der grösste wert 3x und der zweitgrösste wert auch 3x vorkommt, nimmst du dann 6 Werte? oder nur 5 und nach welcher Regel fällt der letzte Weg?
Gruß Daniel
Anzeige
AW: Fehler 2015
10.08.2016 12:23:08
ChrisL
Hi
Grundsätzlich so (ohne Sheet vor Application, dafür mit With-Rahmen)...
With Sheets("Marktanalyse")
aa = Application.Evaluate("=index(if(counta(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & ")>=1,large(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & " ,1),""""))")
End With
Allerdings stimmt die Formel generell nicht. Index ist wie folgt aufgebaut:
=INDEX(Matrix;Zeile;Spalte)
du hast aber...
=INDEX(Ergebnis aus Wenn-Abfrage)
somit nur ein Argument statt drei
cu
Chris
Anzeige
AW: Fehler 2015
10.08.2016 12:39:58
ViGo
@Chris: ja, das stimmt mit dem Formelaufbau.
Ich kenn zwar die Spalte, weiß aber nicht in welcher Zeile das steht. Die Matrix müsste die Spalten-Range sein...
Also so ist der ganze Code, vllt bringt dies ja mehr Einsicht...
Sub NW_berechnen()
Dim letztezeile As Long
With Worksheets("Marktanalyse")
letztezeile = Worksheets("Marktanalyse").UsedRange.SpecialCells(xlCellTypeLastCell).Row
'Größten NW finden
Worksheets("Auswahl_Ergebnis_1").Cells(14, 3).FormulaLocal = "=wenn(anzahl2(" & "'Marktanalyse'! _
" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & ")>=1;KGRÖSSTE(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & " ;1);"""")"
Worksheets("Auswahl_Ergebnis_1").Cells(14, 3) = Worksheets("Auswahl_Ergebnis_1").Cells(14, 3). _
Value
With Worksheets("Marktanalyse")
aa = Application.Evaluate("=index(if(counta(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), . _
Cells(letztezeile, 29)).Address & ")>=1,large(" & "'Marktanalyse'!" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & " ,1),""""))")
.Cells(aa, 29).ClearContents
End With
End Sub
Ich suche also in einer Spalte den größten Wert. Dann soll die Adresse des gefundenen größten Wertes ermittelt werten, um ihn zu löschen....
So ist der Plan!
Anzeige
AW: Fehler 2015
10.08.2016 13:02:44
ChrisL
Hi
Selbst wenn du die höchste Zahl ermittelst, hast du damit noch nicht die Position. Es fehlt ein VERGLEICH/MATCH.
Probier mal...
Sub t()
Dim letzteZeile As Long
With Worksheets("Marktanalyse")
letzteZeile = .Cells(.Rows.Count, 29).End(xlUp).Row
If letzteZeile >= 3 Then
.Cells(Application.Match(WorksheetFunction.Max(.Range("AC3:AC" & letzteZeile)), _
.Columns(29), 0), 29).ClearContents
End If
End With
End Sub

Wenn die letzteZeile 3 oder höher, dann müsste auch ein Wert vorhanden sein (darum auf Anzahl2 verzichtet). Allfällige Duplikate sind nicht berücksichtigt.
cu
Chris
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge