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

Teil einer Formel per VBA austauschen

Forumthread: Teil einer Formel per VBA austauschen

Teil einer Formel per VBA austauschen
27.02.2004 14:16:34
Thorsten Becker
Hallo Zusammen,
ich habe sehr viele Zellen mit folgender Formel zu versehen:
=INDIREKT("'"&home!$A$17&"ic'!B23")+INDIREKT("'"&home!$A$18&"ic'!B23")
Leider verändert Excel den Zellbezug B23 nicht. D.h., dies muss ich nun selbst manuell machen, was jedoch bei mehreren hundert Zellen, z.B. von B23 bis Z50 sehr zeitaufwendig ist. Mir schwebt nun ein Makro vor, welches nach diesem "B23" sucht und es entsprechend einfach durch "ActiveCell.Adress", also die jeweils aktuelle Zellkoordinate ersetzt, z.B. G35 oder $G$35.
Dazu bin ich schon auf folgenden Code gestoßen:

Sub string_aus_formel()
raus = "B23" 'zu ersetzender String
rein = ActiveCell.adress  'PROBLEM, FUNKTIONIERT LEIDER SO NICHT
'einzufügender String
For Each cell In Selection
If cell.HasFormula = True Then
cell.Formula = Application.WorksheetFunction.Substitute(cell.Formula, raus, rein)
End If
Next
End Sub


Hat vielleicht jemand eine Idee, wie ich die Zeile "rein = ActiveCell.adress" korrigieren muss?
Schon jetzt recht herzlichen Dank
Thorsten
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teil einer Formel per VBA austauschen
27.02.2004 14:48:47
Alex K.
Hallo Thorsten,
der Computer versteht nur Englisch :-)
rein = ActiveCell.address
Beachte bitte, dass damit eine absoluter Zellbezug eingefügt wird, also z.B. "$B$10". Wenn du dass nicht willst, also die Form "B10" bevorzugst, dann
rein = ActiveCell.address(False, False)
Besten Dank -> wer 'Schreiben' kann ist ...
27.02.2004 14:54:56
Thorsten Becker
... klar im Vorteil und wenn's dann auch noch mit dem Englischen klappt ... ;-)
Besten Dank nochmal, bin wohl reif für's Wochenende
Viele Grüße
Thorsten
Anzeige
Danke für die Rückmeldung oT
27.02.2004 15:34:00
Alex K.
AW: Teil einer Formel per VBA austauschen
27.02.2004 14:54:17
Ramses
Hallo
das klappt nicht, weil du eine Selection hast.
Damit wird "Rein" automatisch aus der Selection genommen ("ActiveCell.Address")
Mache es auf folgende Weise

Sub string_aus_formel()
Dim rein As Range, cell As Range, repBereich As Range
Dim raus As String
raus = InputBox("Was möchten Sie ersetzen ?", "Ersetzen", "B23")
Set rein = Application.InputBox("Zellbezug..." & vbCrLf & "Wählen Sie die Zelle, auf die Sie sich beziehen wollen", Type:=8)
If rein.Address = "" Then Exit Sub
Set repBereich = Application.InputBox("... ersetzen in:" & vbCrLf & "Wählen Sie den Bereich, wo sie den Bezug ersetzen wollen", Type:=8)
'einzufügender String
For Each cell In repBereich
cell.Replace What:=raus, Replacement:=rein, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next
End Sub

Gruss Rainer
Anzeige
AW: Teil einer Formel per VBA austauschen
27.02.2004 14:56:40
florian
ich habe es auf diese weise zusammengebracht:

Private Sub CommandButton1_Click()
raus = "B23" 'zu ersetzender String
b = 1
For a = 1 To 10
rein = ActiveSheet.Cells(a, b).Address
If Cells(a, b).HasFormula = True Then
Cells(a, b).Formula = Application.WorksheetFunction.Substitute(Cells(a, b).Formula, raus, rein)
End If
Next a
End Sub

was a und b und so ist kannst du dir ja noch nach belieben definieren bzw auf andere zellen legen oder was weis ich...
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Teil einer Formel per VBA austauschen


Schritt-für-Schritt-Anleitung

Um einen Teil einer Formel in Excel per VBA auszutauschen, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf einen der Einträge im Projektfenster und wähle Einfügen > Modul.

  3. VBA-Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub string_aus_formel()
       Dim rein As Range, cell As Range, repBereich As Range
       Dim raus As String
       raus = InputBox("Was möchten Sie ersetzen?", "Ersetzen", "B23")
       Set rein = Application.InputBox("Zellbezug..." & vbCrLf & "Wählen Sie die Zelle, auf die Sie sich beziehen wollen", Type:=8)
       If rein.Address = "" Then Exit Sub
       Set repBereich = Application.InputBox("... ersetzen in:" & vbCrLf & "Wählen Sie den Bereich, wo sie den Bezug ersetzen wollen", Type:=8)
    
       For Each cell In repBereich
           cell.Replace What:=raus, Replacement:=rein, LookAt:=xlPart, _
           SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
           ReplaceFormat:=False
       Next
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.


Häufige Fehler und Lösungen

  • Fehler: "Rein" ist nicht gesetzt: Stelle sicher, dass du eine gültige Zelle auswählst, wenn du nach dem Zellbezug gefragt wirst. Wenn du keine Zelle auswählst, wird das Makro abgebrochen.

  • Problem mit der Auswahl: Wenn du eine Auswahl triffst, die keine Formeln enthält, wird das Makro nicht wie erwartet funktionieren. Überprüfe, ob die Zellen in deinem Auswahlbereich tatsächlich Formeln enthalten.

  • Falscher Zellbezug: Wenn du den falschen Zellbezug ersetzen möchtest, überprüfe den eingegebenen Wert im InputBox.


Alternative Methoden

Falls du kein VBA verwenden möchtest, kannst du auch die Funktion Suchen und Ersetzen in Excel verwenden:

  1. Markiere den Bereich, in dem du den Zellbezug ändern möchtest.
  2. Drücke Strg + H, um das Dialogfeld "Suchen und Ersetzen" zu öffnen.
  3. Gib in das Feld "Suchen nach" den alten Zellbezug (z. B. "B23") und in das Feld "Ersetzen durch" den neuen Zellbezug ein.
  4. Klicke auf "Alle ersetzen".

Diese Methode ist jedoch weniger flexibel, wenn du viele verschiedene Zellbezüge ändern musst.


Praktische Beispiele

Angenommen, du hast die folgende Formel in mehreren Zellen:

=INDIREKT("'"&home!$A$17&"ic'!B23")+INDIREKT("'"&home!$A$18&"ic'!B23")

Du möchtest "B23" durch den Zellbezug der aktuellen Zelle ersetzen. Durch das Ausführen des obigen VBA-Codes kannst du dies schnell und effizient erledigen.


Tipps für Profis

  • Verwende relative Zellbezüge: Wenn du die Werte dynamisch ändern möchtest, nutze relative Zellbezüge in deinen Formeln. Das ermöglicht eine einfachere Anpassung.

  • Testumgebung: Teste deinen Code immer in einer Kopie deiner Datei, um versehentliche Datenverluste zu vermeiden.

  • Dokumentation: Kommentiere deinen VBA-Code ausreichend, um spätere Anpassungen und das Verständnis zu erleichtern.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Zellbezüge gleichzeitig ersetzen?
Du kannst das Makro so anpassen, dass es eine Liste von Zellbezügen akzeptiert und diese nacheinander ersetzt.

2. Was passiert, wenn ich den falschen Zellbezug eingebe?
Das Makro wird versuchen, den angegebenen Zellbezug zu ersetzen, aber wenn er nicht gefunden wird, bleibt die Formel unverändert.

3. Kann ich das Makro auf bestimmte Zellen beschränken?
Ja, beim Auswahlprozess kannst du nur die Zellen auswählen, die du ändern möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige