Microsoft Excel

Herbers Excel/VBA-Archiv

Zeilenumbruch bei sehr langer Codezeile | Herbers Excel-Forum


Betrifft: Zeilenumbruch bei sehr langer Codezeile von: Peter
Geschrieben am: 16.01.2012 13:32:28

Liebes Forum

Mir ist nicht klar, ob ich die lange Codezeile auf mehrere Zeilen verteilen kann (und wenn ja, wo das hier im konkreten Fall geht.

Sub ArrayFormelnEintragen()
Dim Zelle as Range
For Each Zelle in Range ("Eintrag")
With Zelle
        .FormulaArray = "=IF(RC13="""","""",INDEX(INDIRECT(""'""&_Q&RC4&""'!""&N_T(R2C)&""2:""& _
N_T(R2C)&""12""),MAX(IF((INDIRECT(""'""&_Q&RC4&""'!E2:E12"")<=_D)*(INDIRECT(""'""&_Q&RC4&""'!C2:C12"")=MAX(IF(INDIRECT(""'""&_Q&RC4&""'!E2:E12"")<=_D,INDIRECT(""'""&_Q&RC4&""'!C2:C12"")))),ROW(R1:R11)))))"
End With
Next
End Sub
Gruss, Peter

  

Betrifft: AW: Zeilenumbruch bei sehr langer Codezeile von: Rudi Maintaire
Geschrieben am: 16.01.2012 13:49:54

Hallo,
kann man mit Leerzeichen+_ machen.
Der Formelstring kommt mir aber sehr merkwürdig vor. z.B. hier: ""&_Q&RC4&""
Wie soll der denn im Klartext aussehen?

Gruß
Rudi


  

Betrifft: AW: Zeilenumbruch bei sehr langer Codezeile von: Peter
Geschrieben am: 16.01.2012 14:02:48

Hallo Rudi
Ich musste da etwas basteln, damit die Formel 255 Zeichen nicht überschreitet.
_& ist eine benannte Zelle, dort ist [Simulation_Quelle.xlsm] eingetragen. Der von dir erwähnte Teilstring ist dann [Simulation_Quelle.xlsm]RC4, resp. das ganze Argument dort
[Simulation_Quelle.xlsm]RC4!E2:E12

Zu deiner Antwort: ich habe das an verschiedenen Stellen versucht, jedoch ohne Erfolg, denn ich erhalte immer die Fehlermeldung "erwartet Anweisungsende". Vielleicht geht das gar nicht, weil ich nirgends einen eigentlichen String habe?

Gruss, Peter


  

Betrifft: unverständlich von: Rudi Maintaire
Geschrieben am: 16.01.2012 14:38:06

Hallo,
welche Formel soll in der Zelle stehen?

Gruß
Rudi


  

Betrifft: AW: unverständlich von: Peter
Geschrieben am: 16.01.2012 14:44:40

Hallo Rudi
Genau die Formel, die bei
.FormulaArray = "" in den Anführungszeichen steht
Das funktioniert alles, störend ist nur, dass dieser Code weit über den rechten Rand des Bildschirms hinausragt und ich deshalb zwei oder drei Zeilenumbrüche machen möchte, damit alles auf einmal ersichtlich ist.

Gruss, Peter


  

Betrifft: und ohne Schleife von: Josef Ehrensberger
Geschrieben am: 16.01.2012 16:02:30


Hallo Peter,

geht auch ohne Schleife.

Sub ArrayFormelnEintragen()
  With Range("Eintrag")
    .Cells(1, 1).FormulaArray = "=IF(RC13="""","""",INDEX(INDIRECT(""'""&_Q&RC4&""'!""&" & _
      "N_T(R2C)&""2:""N_T(R2C)&""12""),MAX(IF((INDIRECT(""'""&_Q&RC4&""'!E2:E12""" & _
      ")<=_D)*(INDIRECT(""'""&_Q&RC4&""'!C2:C12"")=MAX(IF(INDIRECT(""'""&_Q&RC4&" & _
      """ '!E2:E12"")<=_D,INDIRECT(""'""&_Q&RC4&""'!C2:C12"")))),ROW(R1:R11)))))"
    .FillRight
    .FillDown
  End With
End Sub






« Gruß Sepp »



  

Betrifft: AW: und ohne Schleife von: Peter
Geschrieben am: 16.01.2012 22:02:47

Hallo Sepp
Das ist eine super Hinweis.
Hier im konreten Fall kann ich das so nicht machen, da in den einzelnen Spalten unterschiedliche Werte eingetragen werden (Beträge, Strings, Datum).
Ich habe deshalb versucht, nach Einfügen der Array-Formel in .Cells(1,1) diese Zelle zu kopieren und nur die Formeln im Bereich "Eintrag" einzufügen.
Allerdings stoppt mir der Code bei .PasteSpecial.
Was habe ich falsch gemacht?

Gruss, Peter

Sub ArrayFormelnEintragen()
  With Range("TestEintrag")
    .Cells(1, 1).FormulaArray = "=IF(RC13="""","""",INDEX(INDIRECT(""'"" &_Q&RC4&""'!""&" & _
        "N_T(R2C)&""2:""&N_T(R2C)&""12""),MAX(IF((INDIRECT(""'""&_Q&RC4&""'!E2:E12""" & _
        ")<=_D)*(INDIRECT(""'""&_Q&RC4&""'!C2:C12"")=MAX(IF(INDIRECT(""'""&_Q&RC4&" & _
        """'!E2:E12"")<=_D,INDIRECT(""'""&_Q&RC4&""'!C2:C12"")))),ROW(R1:R11)))))"
    .Cells(1, 1).Copy
    .PasteSpecial xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

End Sub



  

Betrifft: AW: und ohne Schleife von: Josef Ehrensberger
Geschrieben am: 16.01.2012 23:19:40


Hallo Peter,

wenn die Referenzierung stimmt, dann geht das schon mit .Fill, wenn nicht, dann stimmt sie mit dem kopieren und einfügen auch nicht!

Die PasteSpecial - Methode geht hier nicht, händisch übrigens auch nicht, weil du damit den Teil eines Arrays ändern willst, und da kommt eben eine Fehlermeldung




« Gruß Sepp »



  

Betrifft: AW: und ohne Schleife von: Peter
Geschrieben am: 17.01.2012 07:24:12

Hallo Sepp
Vielleicht liegt ein kleines Missverständnis vor. Die Referenzierung klappt schon. Doch das Ergebnis der Abfrage liefert z.B. in der einen Spalte ein Datum und da mit rechts und unten abfüllen das Format aus der ersten Zelle übernommen wird, wird mir in der entsprechenden Spalte auch das Datumsformat überschrieben; alle Zellen enthalten dann das Format der ersten Zelle.
Deshalb dachte ich an die Lösung, die ich jeweils bei direkter Bearbeitung im Excel verwende: ich kopiere die erste Zelle, wähle den ganzen Bereich aus und füge nur die Formel ein; dann bleiben die ursprünglichen und gegebenenfalls unterschiedlichen Zellformate erhalten.
Gruss, Peter


  

Betrifft: AW: und ohne Schleife von: Josef Ehrensberger
Geschrieben am: 17.01.2012 07:45:58


Hallo Peter,

dann schreib die Formel doch je Spalte nur in die erste Zeile und fülle diese Spalte nach unten aus, dann sparst du dir wenigstens ein paar Schleifendurchläufe.




« Gruß Sepp »



  

Betrifft: AW: und ohne Schleife von: Peter
Geschrieben am: 17.01.2012 10:04:41

Hallo Sepp
Vielen Dank. Ich werde das so machen.
Ich habe trotzdem noch eine Verständnisfrage:
Weshalb kann ich eine Matrixformel zwar nicht kopieren, aber trotzdem nach unten oder rechts ausfüllen?
Ist das "Ausfüllen" nicht auch so ähnlich wie kopieren?

Gruss, Peter


  

Betrifft: AW: und ohne Schleife von: Josef Ehrensberger
Geschrieben am: 17.01.2012 10:16:46


Hallo Peter,

nein, probier es doch mit der Hand aus.

Schreib die Formel in eine Zelle, d kannst problemlos die Zelle an der unteren rechten Ecke fassen und nach unten ziehen, du kannst aber nicht die Zelle kopieren und dann in den größeren Bereich einfügen, wenn du die Formlezelle mit auswählst.




« Gruß Sepp »



  

Betrifft: AW: Vielen Dank - owT von: Peter
Geschrieben am: 17.01.2012 10:25:02




  

Betrifft: AW: Zeilenumbruch bei sehr langer Codezeile von: Josef Ehrensberger
Geschrieben am: 16.01.2012 15:53:36


Hallo Peter,

du must jeweils vor und nach & _ ein Anführungszeichen (") setzen, damit sich pro Zeile ein abgeschlossener String ergibt.

Sub ArrayFormelnEintragen()
  Dim Zelle As Range
  For Each Zelle In Range("Eintrag")
    With Zelle
      .FormulaArray = "=IF(RC13="""","""",INDEX(INDIRECT(""'""&_Q&RC4&""'!""&" & _
        "N_T(R2C)&""2:""N_T(R2C)&""12""),MAX(IF((INDIRECT(""'""&_Q&RC4&""'!E2:E12""" & _
        ")<=_D)*(INDIRECT(""'""&_Q&RC4&""'!C2:C12"")=MAX(IF(INDIRECT(""'""&_Q&RC4&" & _
        """ '!E2:E12"")<=_D,INDIRECT(""'""&_Q&RC4&""'!C2:C12"")))),ROW(R1:R11)))))"
    End With
  Next
End Sub




« Gruß Sepp »



  

Betrifft: AW: Zeilenumbruch bei sehr langer Codezeile von: Peter
Geschrieben am: 16.01.2012 21:49:34

Hallo Sepp
Das hat jetzt geklappt.
Vielen Dank
Gruss, Peter


  

Betrifft: String aufteilen von: Harald Kapp
Geschrieben am: 16.01.2012 14:53:21

Hallo Peter,
Du kannst nicht innerhalb eines Strings auf eine Fortsetzungszeile wechseln. Das dazu nötige "_" wird der Interpreter als Teil des Strings interpretieren. Also musst Du den String auftrennen, z.B. so (der Teil " & _ " vor "=MAX..."):

With Zelle
.FormulaArray = "=IF(RC13="""","""",INDEX(INDIRECT(""'""&_Q&RC4&""'!""&N_T(R2C)&""2:""& _
N_T(R2C)&""12""),MAX(IF((INDIRECT(""'""&_Q&RC4&""'!E2:E12"")<=_D)*(INDIRECT(""'""&_Q&RC4&""'!C2:C12"")" & _
"=MAX(IF(INDIRECT(""'""&_Q&RC4&""'!E2:E12"")<=_D,INDIRECT(""'""&_Q&RC4&""'!C2:C12"")))),ROW(R1:R11)))))"
End With


Gruß Harald


Beiträge aus den Excel-Beispielen zum Thema "Zeilenumbruch bei sehr langer Codezeile"