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

Forumthread: Monate als Array

Monate als Array
Heinz
Hallo Leute
Ich möchte in den Sheets Jänner bis Dezember in den Zellen C3:AG147 die selbe Formel einfügen
Mein unteres Makro funktioniert nicht,wie gewollt.
Könnte mir bitte jemand weiterhelfen?
Gruß
Heinz

Sub Test()
Dim VMonat  As Variant
VMonat = Array(" ", "Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", _
"August", "September", "Oktober", "November", "Dezember")
VMonat.Range("C3:AG147").FormulaR1C1 = "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)" ' _
Formel einfügen
End Sub

Anzeige

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

Betreff
Benutzer
Anzeige
AW: Monate als Array
27.02.2012 19:08:45
Josef

Hallo Heinz,
Sub Test1()
  Dim lngIndex As Long
  
  For lngIndex = 1 To 12
    Sheets(Format(DateSerial(1, lngIndex, 1), "MMMM")).Range("C3:AG147").FormulaR1C1 = _
      "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
  Next
  
End Sub



'oder
Sub Test2()
  Dim VMonat As Variant
  Dim lngIndex As Long
  
  VMonat = Array(" ", "Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", _
    "August", "September", "Oktober", "November", "Dezember")
  
  For lngIndex = 0 To UBound(VMonat)
    Sheets(VMonat(lngIndex)).Range("C3:AG147").FormulaR1C1 = _
      "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
  Next
  
End Sub



« Gruß Sepp »

Anzeige
AW: Monate als Array
28.02.2012 13:07:54
Heinz
Hallo Leute
Wäre es eventuell möglich,das die Formel in Werte umgesetzt wird ?
Habe es selber schon mit Paste:=xlPasteValues getestet,komme leider zu keinen Erfolg.
Gruß
Heinz
Option Explicit
'von: Josef Ehrensberger  Formel von Jänner bis Dezember
Sub Test2()
Dim lngIndex As Long
Application.ScreenUpdating = False
For lngIndex = 1 To 12
Sheets(Format(DateSerial(1, lngIndex, 1), "MMMM")).Range("C3:AG147").FormulaR1C1 = _
"=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
Next
End Sub

Anzeige
AW: Monate als Array
28.02.2012 13:53:36
Rudi
Hallo,
teste mal:
Sub Test2()
Dim lngIndex As Long
Application.ScreenUpdating = False
For lngIndex = 1 To 12
With Sheets(Format(DateSerial(1, lngIndex, 1), "MMMM")).Range("C3:AG147")
.FormulaR1C1 = "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
.Value = .Value
End With
Next
End Sub

Gruß
Rudi
Anzeige
Danke Rudi
28.02.2012 13:59:49
Heinz
Hallo Rudi
Hat auf anhieb funktioniert !!!
Recht herzlichen Dank
Gruß
Heinz
oder ausnahmmsweise mit Select
27.02.2012 19:11:27
Erich
Hi Heinz,
so sollte es auch funktionieren:

Option Explicit
Sub Makro1()
Dim VMonat ' As Variant
VMonat = Array(" ", "Jänner", "Februar", "März", "April", "Mai", "Juni", _
"Juli", "August", "September", "Oktober", "November", "Dezember")
Sheets(VMonat).Select
Range("C3:AG147").Select
Selection.FormulaR1C1 = "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Monate als Array
27.02.2012 19:14:29
JoWe
Hallo Heinz H,
so vllt:
Sub Test()
    Dim VMonat, b As Variant
    VMonat = Array("Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", _
      "August", "September", "Oktober", "November", "Dezember")
    For b = Lbound(VMonat) To Ubound(VMonat) - 1
        Sheets(VMonat(b + 1)).Range("C3:AG147").FormulaR1C1 = _
        "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
    Next
End Sub

Code eingefügt mit VBA in HTML 1.2 - http://vbahtml.origo.ethz.ch
Gruß
Jochen
Anzeige
Danke an Josef Ehrensberger, Erich G. & Jochen
28.02.2012 10:58:26
Heinz
Danke an Josef Ehrensberger, Erich G. & Jochen
Hallo ihr 3,recht herzlichen D A N K für eure Hilfe.
Funktionieren alle Hilfestellungen wie gewollt.
Gruß
Heinz
;
Anzeige

Infobox / Tutorial

Monate als Array in Excel nutzen


Schritt-für-Schritt-Anleitung

Um eine Formel in den Zellen C3:AG147 für die Monate von Jänner bis Dezember in Excel einzufügen, kannst Du das folgende VBA-Makro verwenden. Dieses Beispiel funktioniert in Excel 2010 und neueren Versionen.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul ein: Rechtsklick auf "VBAProject (DeinDateiname)", dann "Einfügen" > "Modul".
  3. Kopiere den folgenden Code in das Modul:
Sub Test()
    Dim lngIndex As Long
    Application.ScreenUpdating = False
    For lngIndex = 1 To 12
        Sheets(Format(DateSerial(1, lngIndex, 1), "MMMM")).Range("C3:AG147").FormulaR1C1 = _
        "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
    Next
    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus, um die Formel in den angegebenen Zellen zu implementieren.

Häufige Fehler und Lösungen

Fehler 1: "Laufzeitfehler 9 – Index außerhalb des gültigen Bereichs"

  • Lösung: Stelle sicher, dass alle Blätter von "Jänner" bis "Dezember" in Deiner Arbeitsmappe existieren. Falls nicht, erstelle die entsprechenden Blätter.

Fehler 2: Formel wird nicht korrekt angewendet

  • Lösung: Überprüfe, ob die Referenzen in der Formel korrekt sind. Die Ranges R500C3:R523C33 und R500C2:R523C2 müssen in Deiner Tabelle vorhanden sein.

Alternative Methoden

Es gibt mehrere Ansätze, um die Formel auf die Monate zu verteilen. Hier ist eine andere Methode, die das gleiche Ergebnis erzielt:

Sub TestAlternative()
    Dim VMonat As Variant
    Dim lngIndex As Long
    VMonat = Array("Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")

    For lngIndex = LBound(VMonat) To UBound(VMonat)
        Sheets(VMonat(lngIndex)).Range("C3:AG147").FormulaR1C1 = _
        "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
    Next lngIndex
End Sub

Diese Methode verwendet ein Array mit den Monatsnamen und ist eine elegante Lösung, um die Formel in alle relevanten Zellen einzufügen.


Praktische Beispiele

Hier ist ein praktisches Beispiel für das Einfügen von Werten anstelle von Formeln:

Sub TestMitWerten()
    Dim lngIndex As Long
    Application.ScreenUpdating = False
    For lngIndex = 1 To 12
        With Sheets(Format(DateSerial(1, lngIndex, 1), "MMMM")).Range("C3:AG147")
            .FormulaR1C1 = "=INDEX(R500C3:R523C33,MATCH(RC2,R500C2:R523C2,0),)"
            .Value = .Value ' Wandle die Formel in Werte um
        End With
    Next
    Application.ScreenUpdating = True
End Sub

Diese Methode ist nützlich, wenn Du die Formeln in feste Werte umwandeln möchtest, um die Daten zu schützen.


Tipps für Profis

  • Verwendung von Application.ScreenUpdating = False: Dies verbessert die Leistung, da Excel nicht bei jeder Änderung aktualisiert wird.
  • Fehlerbehandlung einfügen: Füge eine Fehlerbehandlung hinzu, um sicherzustellen, dass Dein Makro auch bei unerwarteten Problemen robust bleibt.
  • Code kommentieren: Kommentiere Deinen Code, um die Lesbarkeit zu erhöhen und die Wartung zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um mehr Zellen zu bearbeiten?
Du kannst die Range in Range("C3:AG147") anpassen, um die gewünschten Zellen zu ändern.

2. Funktioniert dieses Makro in älteren Excel-Versionen?
Das Beispiel ist für Excel 2010 und neuere Versionen geeignet. Bei älteren Versionen könnte es kleine Anpassungen benötigen.

3. Was kann ich tun, wenn ich keine VBA-Erfahrung habe?
Nutze die integrierten Excel-Funktionen für einfache Berechnungen oder ziehe in Betracht, eine Schulung für VBA zu besuchen, um Deine Fähigkeiten zu erweitern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige