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

Forumthread: Ausgeblendete Zellen im Makro nicht berücksichtige

Ausgeblendete Zellen im Makro nicht berücksichtige
09.05.2017 15:43:18
Thomas
Hallo,
ich habe dieses wunderbare Makro, das mir die Top 10 Werte von einem Blatt in ein anderes ausliest.
Sub High10()
Dim lRow As Long
Sheets("Sheet2").Range("F2:F12").Value = Evaluate("transpose(LARGE('Sheet1'!AL4:AL65" & lRow & " _
,{1,2,3,4,5,6,7,8,9,10}))")
End Sub
Mein Problem:
Wenn ich in Blatt 1 einen Filter setze,der die Werte in Spalte AL ändert, wird dies bei der Ausgabe der Werte in Blatt 2 nicht berücksichtigt - d.h. es werden auch die nun durch den Filter ausgeblendeten Zellen berücksichtigt.
Ist es jemanden möglich das Makro so anzupassen, dass nur die tatsächlich sichtbaren Zellen berücksichtigt werden?
Vielen Dank vorab!
Thomas
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ausgeblendete Zellen im Makro nicht berück.
09.05.2017 16:01:18
Daniel
HI
ohne es jetzt getestet zu haben:

ersetze das LARGE(...) durch AGGREGAT(15,5,...)

Aggregat ist eine Sammlung von bestehenden Funktionen, um diese in ihrer Funktionalität zu erweitern.
die 15 steht für die Funktion KGrößte/Large und die 5 dafür, dass ausgeblendete Werte ignoriert werden sollen.
durch das Evaluate lässt du hier ja nicht VBA, sondern Excel rechnen und da gelten dann die Regeln für Excelformeln.
Und die besagen, dass nur Teilergebnis und Aggregat berücksichtigen, ob eine Zeile aus- oder eingeblendet ist.
das mit den SpecialCells(xlcelltypevisible) kann hier auch nicht funktionieren, weil dadurch Zellbereiche entstehen, die aus mehreren Teilbereichen zusammengesetzt sind und sowas ist für viele Funktionen ebenfalls ein Problem.
Gruß Daniel
Anzeige
AW: Ausgeblendete Zellen im Makro nicht berück.
09.05.2017 16:56:21
Thomas
Hi Daniel,
Danke für die Antwort. Ich habs getestet. Nun bekomm ich leider einen "#VALUE!" Fehler im Ausgabeblatt. Eine Idee, woran das liegen kann?
Zur Sicherheit, das sieht bei mir jetzt so aus:
Sub High10()
Dim lRow As Long
Sheets("Sheet2").Range("F2:F12").Value = Evaluate("transpose(AGGREGAT(15,5'Sheet1'!B4:B65" &  _
lRow & " _,{1,2,3,4,5,6,7,8,9,10}))")
End Sub

Anzeige
Daniels Vorschlag hat nicht berücksichtigt, ...
09.05.2017 17:28:51
Luc:-?
…dass die Fkt AGGREGAT auf engl Aggregate heißt, Thomas.
Gruß, Luc :-?
AW: Ausgeblendete Zellen im Makro nicht berücksichtige
09.05.2017 16:15:25
ChrisL
Hi Thomas
Sub High10()
Dim lRow As Long, rng As Range, i As Byte
With Sheets("Sheet1")
lRow = .Cells(Rows.Count, 38).End(xlUp).Row
Set rng = .Range("AL4:AL" & lRow).SpecialCells(xlCellTypeVisible)
For i = 1 To 10
Sheets("Sheet2").Cells(i + 1, 6) = WorksheetFunction.Large(rng, i)
Next i
End With
End Sub
cu
Chris
Anzeige
AW: Ausgeblendete Zellen im Makro nicht berücksichtige
09.05.2017 16:57:44
Thomas
Hi Chris,
wenn ich das versuche bekomm ich 2 verschiedene Fehler:
1. "Run-time error 1004: Application defined or object defined error"
2. "Unable to get the Large property of the WorksheetFunction class"
Der 2.Fehler dürfte ein Folgefehler des 1. sein, …
09.05.2017 17:25:50
Luc:-?
…Thomas;
man sollte ja auch sicherheitshalber vor der Schleife rng prüfen:
If Not rng Is Nothing Then
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Ausgeblendete Zellen im Makro nicht berücksichtige
09.05.2017 18:15:32
ChrisL
Hi Thomas
Luc hat natürlich recht. Wenn keine Zelle sichtbar ist, dann führt dies zu Fehlern.
Sub High10()
Dim lRow As Long, rng As Range, i As Byte
With Sheets("Sheet1")
lRow = .Cells(Rows.Count, 38).End(xlUp).Row
Set rng = .Range("AL4:AL" & lRow).SpecialCells(xlCellTypeVisible)
If rng Is Nothing Then
MsgBox "keine Zelle sichtbar"
Exit Sub
End If
For i = 1 To 10
Sheets("Sheet2").Cells(i + 1, 6) = WorksheetFunction.Large(rng, i)
Next i
End With
End Sub

Aber irgendwie komisch, weil sichtbare Werte wirst du doch haben? Vielleicht Spalten verschoben (38 = Spalte AL).
(Übrigens Aggregat gibt es ab XL2010. Da ich noch mit XL2007 unterwegs bin, die kleine Schleife)
cu
Chris
Anzeige
AW: Jetzt funktioniert es
10.05.2017 13:42:25
Thomas
Chris, Luc, alle,
vielen Dank für die Hilfe! Mit dem obigen Code funktioniert es!
(Zur Info bzgl. Aggregat - hatte beides versucht, mit e und ohne e am Ende - selbes Resultat)
Viele Grüße!
AW: Jetzt funktioniert es
10.05.2017 16:58:03
Thomas
Und hier eine nächste Frage :)
Wie muss der Code angepasst werden, wenn ich nun mehrere Spalten gleichzeitig analysieren will?
Z.B.: A, B, C, AL, etc. und die jeweiligen höchsten Werte dann im Sheet 2 in entsprechenden Spalten z.B.: F,G,H,L etc. ausgelesen haben möchte?
Hab leider 0 VBA-Kentnisse ...
VG
Thomas
Anzeige
AW: Jetzt funktioniert es
10.05.2017 18:38:28
ChrisL
Hi Thomas
Zum Beispiel: Erstelle bitte mal eine konkrete Musterdatei. :)
Was heisst gleichzeitig? Der Reihe nach A->F, dann B->G usw. oder gleichzeitig über mehrere Spalten d.h. es gibt nur ein Ergenis?
Gibt es Muster?
A-F
B-G
C-H
AL-L fällt aus der Reihe
cu
Chris
Anzeige
AW: Jetzt funktioniert es
11.05.2017 08:33:39
ChrisL
Hi Thomas
Vielleicht so...
Sub t()
Call High10(Worksheets("Tabelle1"), Worksheets("Tabelle2"), "A", "F")
Call High10(Worksheets("Tabelle1"), Worksheets("Tabelle2"), "B", "G")
'usw.
End Sub

Sub High10(WSQuelle As Worksheet, WSZiel As Worksheet, SpalteQuelle As String, SpalteZiel As  _
String)
Dim lRow As Long, rng As Range, i As Byte
With WSQuelle
lRow = .Cells(Rows.Count, SpalteQuelle).End(xlUp).Row
Set rng = .Range(SpalteQuelle & "4:" & SpalteQuelle & lRow).SpecialCells(xlCellTypeVisible)
If Not rng Is Nothing Then
For i = 1 To 10
WSZiel.Cells(i + 1, SpalteZiel) = WorksheetFunction.Large(rng, i)
Next i
Else
MsgBox "keine Zelle sichtbar"
End If
End With
End Sub
cu
Chris
Anzeige
AW: Jetzt funktioniert es
11.05.2017 17:17:51
Thomas
Hi Chris
Also, meine Idee ist folgende, siehe hierzu diese Datei als Beispiel: https://www.herber.de/bbs/user/113514.xlsm
Ich möchte in Sheet 2, z.B. in Spalte A von Zelle 2 bis 12, die 10 höchsten Werte aus Sheet 1 in Spalte C von Zelle 3 bis z.b. 40. Sofern Reihen in Sheet 1 ausgeblendet sind, sollen diese bei der Auswertung in Sheet 2 nicht berücksichtigt werden. - Das hattest Du ja bereits perfekt :).
Wenn ich jetzt aber neben oben beschriebenem Prozess, dasselbe noch für andere Spalten und Werte aus Sheet 1 machen möchte, z.B. für Spalte D von Zelle 3 bis 40. und mir die Ergebnisse dann in Sheet 2 in Spalte B von Zelle 2 bis 12 ausgewertet werden sollen usw. - wie müsste das Makro angepasst werden?
Evtl. hast Du das ja bereits mit Deinem neuen Vorschlag getan - mein Problem ist nur, dass ich keine Kentnisse habe, das richtig zu kombinieren, so dass das funktioniert wie beschrieben ...
Viele Grüße
Thomas
Anzeige
AW: Jetzt funktioniert es
12.05.2017 08:54:43
ChrisL
Hi Thomas
Der zweite Code bleibt unverändert. Der erste kann wie folgt angepasst werden (enthält die Parameter Tabelle Quelle, Tabelle Ziel, Spalte Quelle, Spalte Ziel)
Sub t()
Call High10(Worksheets("Sheet1"), Worksheets("Sheet2"), "C", "A")
Call High10(Worksheets("Sheet1"), Worksheets("Sheet2"), "D", "B")
Call High10(Worksheets("Sheet1"), Worksheets("Sheet2"), "E", "C")
Call High10(Worksheets("Sheet1"), Worksheets("Sheet2"), "F", "D")
Call High10(Worksheets("Sheet1"), Worksheets("Sheet2"), "G", "E")
Call High10(Worksheets("Sheet1"), Worksheets("Sheet2"), "H", "F")
End Sub
(Den Code könnte man noch über eine Schleife zusammenfassen, aber ist ja nur ein Beispiel)
cu
Chris
Anzeige
oder
09.05.2017 19:29:10
snb

Sub M_snb()
Columns(6).SpecialCells(12).Name = "snb"
Cells(1, 9).Resize(10) = [index(large(snb,row(1:10)),)]
End Sub

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Ausgeblendete Zellen in Excel Makros ignorieren


Schritt-für-Schritt-Anleitung

Um ausgeblendete Zellen in einem Excel-Makro zu ignorieren, kannst du das folgende Vorgehen nutzen. Hier wird die Funktion AGGREGAT verwendet, die in Excel ab Version 2010 verfügbar ist.

  1. Öffne dein Excel-Dokument und gehe zur VBA-Entwicklungsumgebung (drücke ALT + F11).
  2. Füge ein neues Modul hinzu und kopiere den folgenden Code:
Sub High10()
    Dim lRow As Long, rng As Range, i As Byte
    With Sheets("Sheet1")
        lRow = .Cells(Rows.Count, "AL").End(xlUp).Row
        Set rng = .Range("AL4:AL" & lRow).SpecialCells(xlCellTypeVisible)
        If Not rng Is Nothing Then
            For i = 1 To 10
                Sheets("Sheet2").Cells(i + 1, 6) = WorksheetFunction.Large(rng, i)
            Next i
        Else
            MsgBox "Keine Zelle sichtbar"
        End If
    End With
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus.

Mit diesem Code werden nur die tatsächlich sichtbaren Werte in Spalte AL berücksichtigt, sodass ausgeblendete Zeilen ignoriert werden.


Häufige Fehler und Lösungen

  1. Fehler: "#VALUE!"

    • Dieser Fehler tritt auf, wenn keine sichtbaren Zellen vorhanden sind. Stelle sicher, dass du die Sichtbarkeit der Zellen überprüfst, bevor du die Schleife startest.
  2. Fehler: "Run-time error 1004"

    • Dies passiert, wenn der Bereich rng leer ist. Füge eine Überprüfung ein, um sicherzustellen, dass rng nicht Nothing ist.
  3. Fehler beim Verwenden von AGGREGAT

    • Wenn du AGGREGAT verwenden möchtest, stelle sicher, dass du die Syntax korrekt angibst. Beispiel:
Sheets("Sheet2").Range("F2:F12").Value = Evaluate("transpose(AGGREGAT(15,5,'Sheet1'!AL4:AL" & lRow & ",{1,2,3,4,5,6,7,8,9,10}))")

Alternative Methoden

Eine weitere Methode ist die Verwendung von SpecialCells. Hier ist ein Beispiel:

Sub High10Alternative()
    Dim lRow As Long
    Dim rng As Range
    lRow = Sheets("Sheet1").Cells(Rows.Count, "AL").End(xlUp).Row
    Set rng = Sheets("Sheet1").Range("AL4:AL" & lRow).SpecialCells(xlCellTypeVisible)
    ' Hier kannst du dann mit rng weiterarbeiten
End Sub

Diese Methode stellt sicher, dass nur die sichtbaren Zellen berücksichtigt werden.


Praktische Beispiele

Wenn du mehrere Spalten gleichzeitig analysieren möchtest, kannst du die folgende Funktion verwenden:

Sub t()
    Call High10(Worksheets("Sheet1"), Worksheets("Sheet2"), "C", "A")
    Call High10(Worksheets("Sheet1"), Worksheets("Sheet2"), "D", "B")
    ' Füge weitere Spalten hinzu
End Sub

Hierbei wird die Funktion High10 für verschiedene Spalten aufgerufen, und die Ergebnisse werden in die jeweils angegebenen Zielspalten geschrieben.


Tipps für Profis

  • Verwende die AGGREGAT-Funktion, um die Verarbeitungsgeschwindigkeit zu erhöhen, insbesondere bei großen Datensätzen.
  • Wenn du mit mehreren Tabellen arbeitest, implementiere eine ordentliche Fehlerbehandlung, um unerwartete Probleme während der Ausführung zu vermeiden.
  • Stelle sicher, dass du immer die neuesten Excel-Versionen verwendest, um Zugriff auf alle Funktionen zu haben.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das Makro nur sichtbare Zellen berücksichtigt? Um sicherzustellen, dass nur sichtbare Zellen berücksichtigt werden, verwende die SpecialCells(xlCellTypeVisible) Methode.

2. Was tun, wenn ich eine Fehlermeldung erhalte? Überprüfe den Code auf richtige Syntax und stelle sicher, dass der Bereich, auf den du zugreifst, tatsächlich Daten enthält. Füge gegebenenfalls Fehlerbehandlungsroutinen hinzu.

3. Gibt es eine Möglichkeit, das Makro für mehrere Spalten gleichzeitig zu verwenden? Ja, du kannst die Funktion so anpassen, dass sie mehrere Spalten nacheinander analysiert, indem du Parameter für Quell- und Zielspalten übergibst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige