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

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

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

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 …
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
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

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige