Microsoft Excel

Herbers Excel/VBA-Archiv

Formel ändern | Herbers Excel-Forum


Betrifft: Formel ändern von: Claudia
Geschrieben am: 29.11.2009 16:21:27

Hallo zusammen,

ich arbeite sehr viel mit definierten Spaltennamen. Jetzt würde ich gerne folgende Formel so ändern, dass ich hier nur mit den definierten Namen arbeiten kann.

Range("Briefanrede").Cells(2).Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-25]="""","""",IF(RC[-25]=""Herr"",""Sehr geehrter Herr"",IF(RC[-25]=""Frau"",""Sehr geehrte Frau"",""prüfen"")))"
Selection.AutoFill Destination:=Range("aa2:aa10000"), Type:=xlFillDefault
Range("a1").Select

Bedeutet also, dass der If-Teil den Bezug auf den Spaltennamen "Anrede" bekommen muss. Und die Selcetion.AutoFil... muss den Namen Briefanrede bekommen.

Geht sowas? Wenn ja, wie?

Vielen Dank!

LG
Claudia

  

Betrifft: AW: Formel ändern von: fcs
Geschrieben am: 29.11.2009 16:46:41

Hallo Claudia,

funktioniert etwa so.
Ggf. solltest du aber auch die 10000 für die Zeilenzahl noch dynamisch bestimmen, um das Blatt nicht unnötig mit Formeln zu überfrachten.
Entsprechende Anweisung:
Zeile = Cells(Rows.Count, Spalte).End(xlUp).Row
Als Spaltennummer hier dann zum Beispiel die Spalte mit den Namen verwenden.

Gruß
Franz

Sub aatest()
  Dim Spalte As Long
  Spalte = Range("Anrede").Column
  Range("Briefanrede").Cells(2).FormulaR1C1 = _
    "=IF(RC" & Spalte & "="""","""",IF(RC" _
        & Spalte & "=""Herr"",""Sehr geehrter Herr"",IF(RC" & Spalte _
        & "=""Frau"",""Sehr geehrte Frau"",""prüfen"")))"
  Spalte = Range("Briefanrede").Column
  Range("Briefanrede").Cells(2).AutoFill Destination:=Range(Cells(2, Spalte), _
      Cells(10000, Spalte)), Type:=xlFillDefault
End Sub



  

Betrifft: AW: Formel ändern von: Claudia
Geschrieben am: 29.11.2009 16:59:47

Hallo Franz,

vielen Dank für die Hilfe. Muss das aber in Ruhe noch verstehen, sieht doch sehr kompliziert aus. :-)

Kann ich Dich nochmals was fragen? Wie müsste ich das hier machen? Auch diese Spalten haben alle Namen.

Danke schön!

LG
Claudia

Dim bereich1 As Range
Dim bereich2 As Range
Dim Bereich3 As Range
Dim Gesamt As Range
Dim Zelle As Range

Set bereich1 = ActiveSheet.Range("AG:AN")
Set bereich2 = ActiveSheet.Range("AR:AS")
Set Bereich3 = ActiveSheet.Range("Y:Y")

Set Gesamt = Union(bereich1, bereich2, Bereich3)
For Each Zelle In Gesamt
If Cells(Zelle.Row, 1) <> "" Then
If IsNumeric(Zelle.Value) = True And _
Zelle.HasFormula = False Then
Zelle.Value = Zelle.Value * 1
Selection.NumberFormat = "#,##0.00 _€"
End If
End If
Next Zelle
Range("a1").Select
End Sub


  

Betrifft: AW: Formel ändern von: fcs
Geschrieben am: 29.11.2009 17:30:05

Hallo Claude,

was heißt hier kompliziert? Das liegt wohl mehr daran, dass deine Formel kompliziert ist.
Irgendwie muss man Excel ja mitteilen, das es statt "[-25]" den Inhalte einer Variablen in den Formeltext einbauen soll. Und das funktioniert nun einmal so, dass man die festen Formeltextteile und die Variablen verkettet.

Dein Neues Problem. Etwa so, dabei muss dann "SpalteXYZ" durch die entsprechenden Bereichsnamen der Spalten ersetzt werden.

  Dim Spalte1 As Long, Spalte2 As Long, Zeile As Long
  With ActiveSheet
    Zeile = .Cells.SpecialCells(xlCellTypeLastCell).Row
    Spalte1 = .Range("SpalteAG").Column
    Spalte2 = .Range("SpalteAN").Column
    Set bereich1 = .Range(.Cells(1, Spalte1), .Cells(Zeile, Spalte2))
    Spalte1 = .Range("SpalteAR").Column
    Spalte2 = .Range("SpalteAS").Column
    Set bereich2 = .Range(.Cells(1, Spalte1), .Cells(Zeile, Spalte2))
    Spalte1 = .Range("SpalteY").Column
    Set Bereich3 = .Range(.Cells(1, Spalte1), .Cells(Zeile, Spalte1))
  End With
  
  Set Gesamt = Union(bereich1, bereich2, Bereich3)

Gruß
Franz


  

Betrifft: Franz von: Claudia
Geschrieben am: 29.11.2009 17:36:15

Hallo Franz,

das war auch nicht gegen Dich gerichtet. Ich finde jede aufgezezeichnete Formel schwer. Ich versuche gerade Deine erste Formel auf diese Formel anzugleichen, aber ich scheitere. Excel sagt mir, dass hier ein Anweisungsende fehlt.

Ich möchte einfach nur sagen: Wenn Zelle in Spalte Kunde leer, dann Zelle in Kunde2 auch leer. Wenn aber nicht leer, dann nimmt Zellwert aus Spalte Kunde.

Snief.... :-(

Dim spalte As Long
spalte = Range("Kunde").Column
Range("Kunde2").Cells(2).FormulaR1C1 = "=IF(RC" & spalte & "="""","""",(RC" & spalte)))"
spalte = Range("Kunde2").Column
Range("Kunde2").Cells(2).AutoFill Destination:=Range(Cells(2, spalte), _
Cells(20000, spalte)), Type:=xlFillDefault


  

Betrifft: AW: Claudia von: fcs
Geschrieben am: 29.11.2009 18:13:14

Hallöchen nochmal,

da hast du hinter dem letzten Spalte vergessen: & "

  Range("Kunde2").Cells(2).FormulaR1C1 = "=IF(RC" & spalte & "="""","""",(RC" & spalte & ")))"
Dadurch war die Anweisung in der Syntax nicht korrekt.
Gruß
Franz


  

Betrifft: Laufzeitfehler...snief von: Claudia
Geschrieben am: 29.11.2009 20:24:57

Hallo auch noch einmal,

ich bin irgednwie hier für nicht geschaffen. So sieht die ganze Formal aus.

Sub f()
Dim spalte As Long
spalte = Range("Kunde").Column
  Range("Kunde2").Cells(2).FormulaR1C1 = "=IF(RC" & spalte & "="""","""",(RC" & spalte & ")))"

spalte = Range("Kunde2").Column
Range("Kunde2").Cells(2).AutoFill Destination:=Range(Cells(2, spalte), _
Cells(20000, spalte)), Type:=xlFillDefault
End Sub

Jetzt bekomme ich den Laufzeitfehler 1004 mit folgendem Text:

Anwendungs- oder objektdefinierter Fehler

Was mache ich nur falsch?

LG
Claudia


  

Betrifft: AW: Das sind zuviele Klammern. von: Daniel
Geschrieben am: 29.11.2009 20:56:31

im Formelstring:

"=IF(RC" & spalte & "="""","""",(RC" & spalte & ")))"

Gruß Daniel


  

Betrifft: So einfach. Danke! von: Claudia
Geschrieben am: 29.11.2009 21:53:28




Beiträge aus den Excel-Beispielen zum Thema "Formel ändern"