Microsoft Excel

Herbers Excel/VBA-Archiv

VBA-Code vereinfachen und dynamisch machen

Betrifft: VBA-Code vereinfachen und dynamisch machen von: DerBurch
Geschrieben am: 28.08.2014 14:10:21

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

  

Betrifft: AW: VBA-Code vereinfachen und dynamisch machen von: DerBurch
Geschrieben am: 28.08.2014 14:12:13

Danke schon mal im Voraus und Schöne Grüße
Damian


  

Betrifft: AW: VBA-Code vereinfachen und dynamisch machen von: yummi
Geschrieben am: 28.08.2014 14:31:30

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


  

Betrifft: AW: VBA-Code vereinfachen und dynamisch machen von: DerBurch
Geschrieben am: 28.08.2014 14:39:08

Hey Yummi,

ich wusste doch das dass einfacher geht :P

Danke dir für deine Mühen
Schönen Druß Damian


  

Betrifft: noch kürzer von: yummi
Geschrieben am: 28.08.2014 14:43:40


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

;-)



  

Betrifft: AW: noch kürzer von: DerBurch
Geschrieben am: 28.08.2014 14:54:42

Sehr schön!
Sieht viel besser aus. Danke!
:D


  

Betrifft: AW: noch kürzer von: schauan
Geschrieben am: 29.08.2014 21:21:42

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


  

Betrifft: AW: noch kürzer von: schauan
Geschrieben am: 31.08.2014 06:37:44

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


 

Beiträge aus den Excel-Beispielen zum Thema "VBA-Code vereinfachen und dynamisch machen"