(21.12.2018, 19:12)Marc Z. schrieb: Kannst du mir das bitte kurz erklären.
Danke.
Bei mir würde das so aussehen A2 und B2 Eingabefelder. Nach Veränderung muss aktualisiert werden... Das Icon kann man sich ja ins Menüband "legen" - so mach ich das...
Arbeitsblatt mit dem Namen 'Tabelle3'
A
B
C
1
Fahrstrecke für:
im Jahr:
Gesamt:
2
A
2017
1783,60
3
4
Tag
Wettkampf
Strecke
5
08.01.2017
RWK
137,20
6
21.04.2017
Training
137,20
7
08.06.2017
Training
137,20
8
08.09.2017
Vorbereitungskampf
137,20
9
14.09.2017
Training
137,20
10
17.09.2017
Vorbereitungskampf
0,00
11
07.10.2017
Mentaltraining / Training
137,20
12
08.10.2017
Mentaltraining
137,20
13
15.10.2017
RWK
137,20
14
26.10.2017
Training
137,20
15
04.11.2017
Training
137,20
16
12.11.2017
RWK
137,20
17
03.12.2017
Training
137,20
18
10.12.2017
RWK
137,20
Zelle
Formel
C2
=SUMME(C5:C18)
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.01] MS Excel 2010
22.12.2018, 12:11 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2018, 12:40 von Kuwer.
Bearbeitungsgrund: verbesserte Version
)
Hallo Marc,
hier mein Vorschlag, der ebenfalls den Spezialfilter (Filter erweitert) nutzt.
Der Kriterienbereich befindet sich im Blatt Fahrstrecke in den Zeilen 3:4 in der Version Filtern mit Funktionen und ist ausgeblendet.
Fahrstrecke
A
B
C
D
E
F
G
1
Fahrstrecke für:
A
Gesamt:
2353,40 km
im Kalenderjahr
2016
2
3
4
FALSCH
FALSCH
5
6
Tag
Ort
Wettkampf
Strecke
Formeln der Tabelle
Zelle
Formel
A4
=JAHR(Gesamt!A2)=$F$1
G4
=Gesamt!G2=$B$1
Zur automatischen Aktualisierung bei Änderungen in den Zellen B1 oder F1 befindet sich folgendes Ereignismakro im VBA-Modul des Tabellenblattes Fahrstrecke.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Or Target.Address = "$F$1" Then
Application.ScreenUpdating = False
Sheets("Gesamt").Columns("A:G").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range("A3:G4"), _
CopyToRange:=Range("A6:D6"), _
Unique:=False
Target.Activate
Range("D1").Value = Application.Sum(Range("A6").CurrentRegion.Columns(4))
Application.ScreenUpdating = True
End If
End Sub
Hi Uwe, wenn SpezialFilter, dann hätte ich es so probiert. Das mit den Formeln hatte ich schon (deswegen meine Anmerkung mit der Extra-Spalte). Aber VBA und ich... Dann doch lieber mit Power Query...
Gruß Jörg
ich muss mich erst wieder ganz langsam heran robben. Also bitte ich um Nachsicht
"Wer immer tut, was er schon kann, bleibt immer das, was er schon ist." - Henry Ford
22.12.2018, 14:40 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2018, 14:40 von Marc Z..)
Hallo Uwe,
perfekt!
Danke. Genau sowas habe ich gesucht!
Danke auch an Günter, Jockel und Dieter für die Ansätze. Habe wieder einiges dazu gelernt.
Jetzt würde nur noch als Ergänzung fehlen, dass ich die Zellen B1 und F1 als Dropdown ohne Duplikate, mit der jeweiligen Spalte aus der Gesamtliste als Quelle, auswählen kann. :)
Also dass ich in B1 nur "A, B, C" zur Auswahl habe und bei F1 nur "2011, 2015, 2016,2017,2018".
Natürlich wenn ich nächstes Jahr neue Einträge mache, sollte sich das Dropdown erweitern...
hat jemand eine Idee wie ich das mit den Jahreszahlen hinbekomme?
Ich habe auf meinem Tabellenblatt "Gesamt" eine Spalte mit vielen Datumangaben.
Aus dieser Spalte möchte ich auf ein neues Tabellenblatt "DropDown" eine Spalte erstellen lassen, die nur die Jahreszahlen dieser ersten Spalte wiedergibt und das ganze ohne Duplikate.
Zusätzlich sollte die Spalte dynamisch sein, da im Laufe der Zeit neue Jahreszahlen hinzukommen.
Das ganze sollte mittels VBA funktionieren.
Ziel ist es, diese neue Spalte als dynamische Dropdown Liste zu definieren.
folgender Code kommt (zusätzlich) in das VBA-Modul des Tabellenblattes Fahrstrecke:
Private Sub Worksheet_Activate()
Dim lngZ As Long
Dim oSCAL As Object
Dim varL As Variant
'ArrayList ist ein Objekt von .NET-Framework 3.5
Set oSCAL = CreateObject("System.Collections.ArrayList")
varL = Application.Transpose(Worksheets("Gesamt").Cells(1).CurrentRegion.Columns(1).Value)
For lngZ = 2 To UBound(varL)
If Not oSCAL.Contains(Year(varL(lngZ))) Then oSCAL.Add Year(varL(lngZ))
Next
oSCAL.Sort
varL = Application.Transpose(Worksheets("Gesamt").Cells(1).CurrentRegion.Columns(7).Value)
oSCAL.Clear
For lngZ = 2 To UBound(varL)
If Not oSCAL.Contains(varL(lngZ)) Then oSCAL.Add varL(lngZ)
Next
oSCAL.Sort
With Me.Range("F1").Validation
.Delete
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:=Join(oSCAL.ToArray(), ",")
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Set oSCAL = Nothing
End Sub