Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1376to1380
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

VBA-Code vereinfachen und dynamisch machen

VBA-Code vereinfachen und dynamisch machen
28.08.2014 14:10:21
DerBurch
Hallo allerseits,
ich habe folgendes Problem:
ich habe ein Dropdownmenü mit Jahreszahlen über die Datenüberprüfung generiert und möchte nur die Jahre angezeigt bekommen, die dem jetzigen entsprechen oder frühere. Da die anderen Zellen Formeln beinhalten müssten um es dynamisch zu gestalten bringt die Option leere Zellen ausblenden ja nichts.
Jetzt hab ich eine Anhäufung von If-Anweisungen geschrieben um dem entgegen zu wirken:
Sub Jahr_Anzeigen()
If Year(Now()) > Worksheets("Steuerung").Range("K30") _
And Worksheets("Steuerung").Range("K30") > Worksheets("Steuerung").Range("K29") _
Then Worksheets("Steuerung").Range("k31") = Worksheets("Steuerung").Range("K30") + 1
If Year(Now()) > Worksheets("Steuerung").Range("K31") _
And Worksheets("Steuerung").Range("K31") > Worksheets("Steuerung").Range("K30") _
Then Worksheets("Steuerung").Range("k32") = Worksheets("Steuerung").Range("K31") + 1
If Year(Now()) > Worksheets("Steuerung").Range("K32") _
And Worksheets("Steuerung").Range("K32") > Worksheets("Steuerung").Range("K31") _
Then Worksheets("Steuerung").Range("k33") = Worksheets("Steuerung").Range("K32") + 1
If Year(Now()) > Worksheets("Steuerung").Range("K33") _
And Worksheets("Steuerung").Range("K33") > Worksheets("Steuerung").Range("K32") _
Then Worksheets("Steuerung").Range("k34") = Worksheets("Steuerung").Range("K33") + 1
If Year(Now()) > Worksheets("Steuerung").Range("K34") _
And Worksheets("Steuerung").Range("K34") > Worksheets("Steuerung").Range("K33") _
Then Worksheets("Steuerung").Range("k35") = Worksheets("Steuerung").Range("K34") + 1
If Year(Now()) > Worksheets("Steuerung").Range("K35") _
And Worksheets("Steuerung").Range("K35") > Worksheets("Steuerung").Range("K34") _
Then Worksheets("Steuerung").Range("k36") = Worksheets("Steuerung").Range("K35") + 1
If Year(Now()) > Worksheets("Steuerung").Range("K36") _
And Worksheets("Steuerung").Range("K36") > Worksheets("Steuerung").Range("K35") _
Then Worksheets("Steuerung").Range("k37") = Worksheets("Steuerung").Range("K36") + 1
If Year(Now()) > Worksheets("Steuerung").Range("K37") _
And Worksheets("Steuerung").Range("K37") > Worksheets("Steuerung").Range("K36") _
Then Worksheets("Steuerung").Range("k38") = Worksheets("Steuerung").Range("K37") + 1
End Sub
Jetz meine Frage, wie kann ich das dynamisch und kürzer gestallten?
Also das ich nicht auf die Zellen zugreifen muss sondern z.B. den Tabellennamen verwende oder so?

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code vereinfachen und dynamisch machen
28.08.2014 14:12:13
DerBurch
Danke schon mal im Voraus und Schöne Grüße
Damian

AW: VBA-Code vereinfachen und dynamisch machen
28.08.2014 14:31:30
yummi
Hallo,

Sub Jahr_Anzeigen
dim i as integer
dim strrng1 as string
dim strrng2 as string
dim strrng3 as string
for i = 30 to 37
strrng1 = "K" & i
strrng2 = "K" & i-1
strrng3 = "K" & i+1
If Year(Now()) > Worksheets("Steuerung").Range(strrng1) _
And Worksheets("Steuerung").Range(strrng1) > Worksheets("Steuerung").Range(strrng2) _
Then Worksheets("Steuerung").Range(strrng3) = Worksheets("Steuerung").Range(strrng1) + 1
next i
end Sub
das ist dein gesamter Code ;-)
Gruß
yummi

Anzeige
AW: VBA-Code vereinfachen und dynamisch machen
28.08.2014 14:39:08
DerBurch
Hey Yummi,
ich wusste doch das dass einfacher geht :P
Danke dir für deine Mühen
Schönen Druß Damian

noch kürzer
28.08.2014 14:43:40
yummi

Sub Jahr_Anzeigen
dim i as integer
dim strrng1 as string
dim strrng2 as string
dim strrng3 as string
dim wks as worksheet
dim wkb as workbook
Set wkb = ActiveWorkbook
Set wks = wkb.Sheets("Steuerung")
for i = 30 to 37
strrng1 = "K" & i
strrng2 = "K" & i-1
strrng3 = "K" & i+1
If Year(Now()) > wks.Range(strrng1) _
And wks.Range(strrng1) > wks.Range(strrng2) _
Then wks.Range(strrng3) = wks.Range(strrng1) + 1
next i
end Sub
;-)

Anzeige
AW: noch kürzer
28.08.2014 14:54:42
DerBurch
Sehr schön!
Sieht viel besser aus. Danke!
:D

AW: noch kürzer
29.08.2014 21:21:42
schauan
Hallo zusammen,
ich kann gerade nicht nachvollziehen, wie die codes vermeiden sollen, dass neuere Jahre als 2014 angezeigt werden. Wenn in K29 z.B. 2021 steht und in K30 2020 und in K31 2019 usw tut sich nix. Ebenso nicht, wenn ich 2021, 2022 usw drin habe.
Oder ich habe die Aufgabe falsch verstanden
"ich habe ein Dropdownmenü mit Jahreszahlen über die Datenüberprüfung generiert und möchte nur die Jahre angezeigt bekommen, die dem jetzigen entsprechen oder frühere."
Wenn es nur um eine einfache reihe geht, dann vielleicht so:
Sub Makro2()
With Sheets("Steuerung").Range("K29")
.Value = 2007
.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=Year(Date), Trend:=False
End With
End Sub
ich hab hier k29 gefüllt, wenn da was drin steht, dann codezeile löschen.
Hoffe geholfen zu haben, Grüße von André (schauan) aus Gera - Excel-97-2013

Anzeige
AW: noch kürzer
31.08.2014 06:37:44
schauan
Hallo zusammen,
ich kann gerade nicht nachvollziehen, wie die codes vermeiden sollen, dass neuere Jahre als 2014 angezeigt werden. Wenn in K29 z.B. 2021 steht und in K30 2020 und in K31 2019 usw tut sich nix. Ebenso nicht, wenn ich 2021, 2022 usw drin habe.
Oder ich habe die Aufgabe falsch verstanden
"ich habe ein Dropdownmenü mit Jahreszahlen über die Datenüberprüfung generiert und möchte nur die Jahre angezeigt bekommen, die dem jetzigen entsprechen oder frühere."
Wenn es nur um eine einfache reihe geht, dann vielleicht so:
Sub Makro2()
With Sheets("Steuerung").Range("K29")
.Value = 2007
.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=Year(Date), Trend:=False
End With
End Sub
ich hab hier k29 gefüllt, wenn da was drin steht, dann codezeile löschen.
Hoffe geholfen zu haben, Grüße von André (schauan) aus Gera - Excel-97-2013
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige