Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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
Anzeige

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....
Anzeige
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).
Anzeige
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
Anzeige

Infobox / Tutorial

Fehler 2015 in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Formel Überprüfung: Überprüfe deine Formel in Excel und stelle sicher, dass sie korrekt ist. Der Fehler 2015 tritt häufig auf, wenn die Formel nicht im richtigen Format vorliegt. Beispielsweise sollte die Formel für INDEX wie folgt aufgebaut sein:

    =INDEX(Matrix; Zeile; Spalte)
  2. VBA Code anpassen: Wenn du den Fehler im VBA-Code erhältst, passe den Code an, um sicherzustellen, dass du den richtigen Tabellenblattnamen und die richtigen Funktionen verwendest. Nutze die With-Anweisung, um sicherzustellen, dass die richtigen Objekte referenziert werden:

    With Sheets("Marktanalyse")
       aa = Application.Evaluate("=index(if(counta(" & "'" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & ")>=1,large(" & "'" & .Range(.Cells(3, 29), .Cells(letztezeile, 29)).Address & ",1),""""))")
    End With
  3. Fehlerbehebung: Falls der Fehler weiterhin besteht, teste die Formel direkt in einer Excel-Zelle, um sicherzustellen, dass sie funktioniert, bevor du sie in VBA verwendest.


Häufige Fehler und Lösungen

  • Falsches Format: Der häufigste Grund für den Fehler 2015 ist ein falsches Format in der Formel. Stelle sicher, dass alle Klammern und Argumente korrekt gesetzt sind.

  • Tabellenblattbezug: Wenn du Evaluate verwendest, achte darauf, dass der Tabellenblattname in Hochkommas und mit einem ! vor der Zelladresse angegeben ist.

  • Fehlende Parameter: Achte darauf, dass alle benötigten Parameter in deiner Funktion vorhanden sind. Bei INDEX sind dies drei Parameter: Matrix, Zeile und Spalte.


Alternative Methoden

  • Direkte Verwendung von Excel-Funktionen: Anstatt VBA zu verwenden, kannst du die Excel-Funktionen direkt in einer Zelle verwenden, um den größten Wert zu finden:

    =KGRÖSSTE(Marktanalyse!AC3:AC100, 1)
  • Verwendung von VERGLEICH: Um die Position eines Wertes zu finden, kannst du die VERGLEICH-Funktion nutzen:

    =VERGLEICH(MAX(Marktanalyse!AC3:AC100), Marktanalyse!AC3:AC100, 0)

Praktische Beispiele

Angenommen, du möchtest die 5 größten Werte aus einer Liste ermitteln. Du kannst die folgende Formel verwenden:

=KGRÖSSTE(Marktanalyse!AC3:AC100, 1)  ' Größter Wert
=KGRÖSSTE(Marktanalyse!AC3:AC100, 2)  ' Zweitgrößter Wert
=KGRÖSSTE(Marktanalyse!AC3:AC100, 3)  ' Drittgrößter Wert

In deinem VBA-Code kannst du das wie folgt umsetzen:

Sub FindTop5Values()
    Dim topValue As Double
    Dim i As Integer
    For i = 1 To 5
        topValue = Application.WorksheetFunction.KLARGE(Range("AC3:AC100"), i)
        ' Hier kannst du dann die Adresse des topValue finden
    Next i
End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, Variablen zu deklarieren und kann viele Fehler vermeiden.

  • Dokumentation: Halte deine Formeln und den VBA-Code gut dokumentiert, um spätere Fehler einfacher nachvollziehen zu können.

  • Debugging: Nutze die Debugging-Tools in VBA, um Schritt für Schritt durch den Code zu gehen und Fehler leichter zu identifizieren.


FAQ: Häufige Fragen

1. Was bedeutet Fehlercode 2015?
Der Fehlercode 2015 in Excel zeigt an, dass eine Formel nicht korrekt ist oder ein Problem bei der Auswertung aufgetreten ist.

2. Wie kann ich Fehler 2015 in VBA beheben?
Überprüfe die verwendeten Formeln auf korrekte Syntax, stelle sicher, dass alle Parameter vorhanden sind und teste die Formel zuerst in Excel, bevor du sie in VBA verwendest.

3. Kann ich Fehler 2015 auch ohne VBA beheben?
Ja, du kannst Excel-Funktionen direkt in den Zellen verwenden, um die gewünschten Berechnungen durchzuführen, ohne VBA verwenden zu müssen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige