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

Formel per Makro ersetzen

Formel per Makro ersetzen
Simon
Hallo miteinander,
ich habe folgendes Problem und versuche es mal bestmöglich zu beschreiben
in Spalte A stehen Monate untereinander
Januar 08
Februar 08
usw es sind recht viele Perioden und ich müsste jede Formel extra ausbessern um das Problem zu beheben. Die Indexformel steht in Spalte C immer für den Monat untereinander und steht dann mehrmals nebeneinander:
=INDEX('[Y-B10-09.xls]QB10 Monat Januar 2009'!$1:$65536;VERGLEICH($D$2; '[Y-B10-09.xls]QB10 Monat Januar 2009'!$B:$B;0);VERGLEICH(E$2; '[Y-B10-09.xls]QB10 Monat Januar 2009'!$1:$1))
Diese soll immer durch diese jeweils dann für den Monat ersetzt werden:
=WENN(ISTFEHLER(INDEX('[Y-B10-09.xls]QB10 Monat Januar 2009'!$1:$65536;VERGLEICH($D$2; '[Y-B10-09.xls]QB10 Monat Januar 2009'!$B:$B;0);VERGLEICH(E$2; '[Y-B10-09.xls]QB10 Monat Januar 2009'!$1:$1)));0; INDEX('[Y-B10-09.xls]QB10 Monat Januar 2009'!$1:$65536;VERGLEICH($D$2; '[Y-B10-09.xls]QB10 Monat Januar 2009'!$B:$B;0);VERGLEICH(E$2; '[Y-B10-09.xls]QB10 Monat Januar 2009'!$1:$1)))
Formeln können im Bereich von E5:E1000 (hab ich jetzt mal geschrieben so viele Perioden werden es wohl nie sein, aber es sollte halt eine hohe Zahl verdeutlichen), wenn die alle ersetzt sind könnte ich es nach rechts ziehen und das Problem wäre erledigt. Für das aktuelle Beispiel habe ich es händisch gemacht und es hat funktioniert.

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Formel per Makro ersetzen
02.07.2011 18:41:45
Tino
Hallo,
vielleicht ist dies ein Ansatz.
Den String für die Formel habe ich mit dem Rekorder aufgezeichnet.
Sub Makro1()
Dim strNewFormel$, rngBereich As Range, rngFormel As Range
Dim iCalc%, lngMaxRow&

    'ActiveCell.FormulaR1C1 
    strNewFormel = _
    "=IF(ISERROR(INDEX('[Y-B10-09.xls]QB10 Monat Januar 2009'!R1C1:R65536C256," & _
    "MATCH(R2C4, '[Y-B10-09.xls]QB10 Monat Januar 2009'!R1C2:R65536C2,0)," & _
    "MATCH(R2C, '[Y-B10-09.xls]QB10 Monat Januar 2009'!R1C1:R1C256))),0, " & _
    "INDEX('[Y-B10-09.xls]QB10 Monat Januar 2009'!R1C1:R65536C256," & _
    "MATCH(R2C4, '[Y-B10-09.xls]QB10 Monat Januar 2009'!R1C2:R65536C2,0)," & _
    "MATCH(R2C, '[Y-B10-09.xls]QB10 Monat Januar 2009'!R1C1:R1C256)))"

With Application
    iCalc = .Calculation
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False
    .Calculation = xlCalculationManual
    
    With Sheets("Tabelle1") 'Tabelle anpassen 
        lngMaxRow = .Cells(.Rows.Count, 5).End(xlUp).Row 'letzte Zeile 
        
        If lngMaxRow >= 5 Then
            'Bereich mit wo die Formel ersetzt werden soll 
            Set rngBereich = .Range("E5", .Cells(lngMaxRow, 5))
            On Error Resume Next
            For Each rngFormel In rngBereich
                If rngFormel.HasFormula Then
                    rngFormel.FormulaR1C1 = strNewFormel
                End If
            Next rngFormel
        End If
    End With
    
    .Calculation = iCalc
    .EnableEvents = True
    .ScreenUpdating = True
    .DisplayAlerts = True
End With

If Err.Number <> 0 Then
    MsgBox Err.Description, _
           vbCritical + vbMsgBoxSetForeground + vbMsgBoxHelpButton, _
           "Error: " & Err.Number, Err.HelpFile, Err.HelpContext
End If

End Sub
Gruß Tino
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige