Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

FormulaLocal vs. FormulaR1C1
#1
Hi,

ich habe folgende Tabelle:

Protokoll
ABCDG
838VVE0149Update BurgererledigtA
839VVE0150ArbeitssicherheitläuftP
840VVE0150ArbeitssicherheitläuftA
841VVE0150ArbeitssicherheitläuftA
842VVE0150ArbeitssicherheitläuftA
843VVE0150ArbeitssicherheitläuftA
844PEE0222XDUpdater überarbeitenläuftP
845PEE0222XDUpdater überarbeitenläuftA
846PEE0222XDUpdater überarbeitenläuftA
847VVE0151Versuch im "Blitzlabor"läuftP
848VVE0151Versuch im "Blitzlabor"läuftA
849VVE0151Versuch im "Blitzlabor"läuftA
850

verwendete Formeln
Zelle Formel Bereich N/A
A838:A850=WENN(LINKS(B838;1)="E";"P";WENN(LINKS(B838;1)="V";"V";""))
B838,B840:B843,B845:B846,B848:B850=WENN(G838="A";B837;"")
C838:C850=WENN(G838="P";LINKS(H838;23);WENN(G838="A";C837;""))
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 19.08 einschl. 64 Bit


Nun sollen per Button unterhalb der aktiven Zeile weitere Zeilen eingefügt werden.
  1. (zwischendrin, folgend auf ein "P" in Spalte G): z.B. in Zeile 840, dann soll in G stehen "A" und in B "VE0150", also der Begriff der Zeile drüber
  2. (zwischendrin, folgend auf ein "A" in Spalte G): z.B. in Zeile 841, dann soll in G stehen "A" und in B "VE0150", also der Begriff der Zeile drüber
  3. (neues Projekt, darunter (Vorgängerzeile hat "A" in Spalte G) oder zwischendrin (Folgezeile hat "P" in Spalte G)): dann soll in G stehen "P" und B soll leer sein zur Eingabe einer neuen Projektnummer
Die Formeln in A und C werden einfach fortgeschrieben.
In B steht immer entweder die Formel (z.B. =WENN(G840="A";B839;"")) oder eine Projektnummer.

Wenn ich eine Formel statt FormulaR1C1 nun Formula oder FormulaLocal formulieren will, wie würde die Makro-Code-Zeile dann lauten müssen?
z.B. für:
=WENN(G853="A";B852;"")
Range("B" & loZeile + 1).FormulaR1C1 = "=IF(RC[5]=""A"",R[-1]C,"""")"
Range("B" & loZeile + 1).FormulaLocal = ?
Range("B" & loZeile + 1).Formula = ?
Es gibt doch die Möglichkeit in einem Excel-Blatt automatisch zwischen R1C1 und lokal umformulieren zu lassen, mit allen "", wer sagt mir, wie das geht?

Momentan verwende ich dieses Makro:
Sub ZeileEinfügen()
  '
  ' ZeileEinfügen Makro
  '
  Dim loZeile As Long
  '
 
  Application.ScreenUpdating = False
 
  loZeile = ActiveCell.Row
  '   ActiveCell.EntireRow.Insert
  Rows(loZeile + 1 & ":" & loZeile + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
  Range("A" & loZeile - 1).Copy Range("A" & loZeile + 1)
  Range("C" & loZeile - 1).Copy Range("C" & loZeile + 1)
  Range("B" & loZeile + 1).FormulaR1C1 = "=IF(RC[5]=""A"",R[-1]C,"""")"   'Beispiel: =WENN(G853="A";B852;"")
 
  '   so geht es nicht, denn dann steht auf Dauer nichts in B, weil ja G auch leer ist.
  '   If Range("G" & loZeile + 1) = "A" Then
  '      Range("B" & loZeile + 1) = Range("B" & loZeile)
  '   Else
  '      Range("B" & loZeile + 1) = ""
  '   End If
 
  Range("B" & loZeile + 1).Select
  Application.CutCopyMode = False
  Application.ScreenUpdating = True
 
End Sub
dabei wird aber in der Zeile, die nach einfügen eine nach unten rutscht, die Formel nicht komplett weitergezählt in B und C:
B854: =WENN(G854="A";B852;"")
C854: =WENN(G854="P";LINKS(H854;23);WENN(G854="A";C852;""))
anstatt 852 müßte da jeweils 853 stehen.
Antworten Top
#2
Bitte, lade eine Beispieldatei hoch !
Antworten Top
#3
Hi,

(18.10.2016, 12:20)snb schrieb: Bitte, lade eine Beispieldatei hoch !

ok.
Folgt gleich.

Reicht der bisherige Bereich?
Antworten Top
#4
Hallo Ralf,

Peter Haserodt hat hier was zu Formula.... geschrieben
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#5
In Spalte A:


PHP-Code:
=MID("VP";2-(LEFT(B1;1)="V");1

Vielleicht reicht eine 'intelligente' Tabelle.
Antworten Top
#6
So, hier die Beispieldatei.

.xlsb   Protokoll erweitern.xlsb (Größe: 33,62 KB / Downloads: 4)
Antworten Top
#7
Hi,

jetzt ist mir noch was Neues eingefallen:

es soll in Spalte D bei der Zeile des Projektes ("P" in Spalte G) das erledigt oder läuft oder abgebrochen eingetragen werden, wenn die dazugehörenden Aufgaben ("A" in Spalte G) entsprechend markiert werden.

  1. mindestens ein "läuft" => läuft
  2. alle "läuft" => läuft
  3. alle "erledigt" => erledigt
  4. Mehrheit "erledigt", Minderheit "abgebrochen" => erledigt
  5. alle abgebrochen => abgebrochen
  6. alle "wartet" => wartet
  7. Minderheit "wartet" => läuft
  8. fehlt noch was?

Das wird vermutlich am besten ein unabhängiges Makro, das per Button manuell angestoßen wird?
Antworten Top
#8
Hallo,

hier mal mein Entwurf für den ersten Teil:


Code:
loZeile = ActiveCell.Row
   '   ActiveCell.EntireRow.Insert
   Rows(loZeile + 1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
   Range("A" & loZeile & ":G" & loZeile).Copy Range("A" & loZeile + 1 & ":G" & loZeile + 1)
   If Range("A" & loZeile + 2) = "" Then
        If Cells(7, loZeile) = "A" Then
            Cells(2, loZeile + 1).Clear
            Cells(7, loZeile + 1) = "P"
        End If
   Else
        If Cells(7, loZeile) = "P" Then Cells(7, loZeile + 1) = "A"
    End If
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#9
Hi Edgar,

(18.10.2016, 13:37)BoskoBiati schrieb: hier mal mein Entwurf für den ersten Teil

Danke!
Ich glaube, Du hast bei den Cells() die Zeilen und Spalten vertauscht, denn es machte zuerst komische Sachen.

Ich habe es nun so gemacht:
Sub ZeileEinfügen()
   ' 
   ' ZeileEinfügen Makro 
   ' 
   Dim loZeile As Long
   ' 
   Application.ScreenUpdating = False
   loZeile = ActiveCell.Row
   
   'nach Edgar ------------------------ 
   Rows(loZeile + 1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
   Range("A" & loZeile & ":G" & loZeile).Copy Range("A" & loZeile + 1 & ":G" & loZeile + 1)
   If Range("A" & loZeile + 2) = "" Then
      If Range("G" & loZeile) = "A" Then
         Range("G" & loZeile + 1) = "P"                        'neues Projekt in letzter Zeile 
         Range("B" & loZeile + 1).Clear                        'löschen der alten Projektnummer für neues Projekt 
         Range("C" & loZeile + 2) = Range("C" & loZeile + 1)   'Beheben des "grüner Dreieck"-Fehlers 
      End If
   Else
      If Range("G" & loZeile) = "P" Then
         Range("G" & loZeile + 1) = "A"                        'neue Aufgabe in bestehendem Projekt 
         Range("C" & loZeile + 2) = Range("C" & loZeile + 1)   'Beheben des "grüner Dreieck"-Fehlers 
      End If
   End If
   Range("D" & loZeile + 1).Clear
   '----------------------------------- 
   
   Range("B" & loZeile + 1).Select
   Application.CutCopyMode = False
   Application.ScreenUpdating = True
   
End Sub

Füge nun mal irgendwo eine Zeile ein, dann schaue in den darunterliegenden Zeilen in Spalte C, dort ist ein grünes Dreieck, weil die Formel nicht mehr korrekt ist. Ich habe den Fehler nun durch kopieren der Formel drüber umgangen.

Weitere Beobachtung:
Wenn unterhalb der "P"-Zeile eine neue Zeile eingefügt wird, dann steht in "B" & loZeile+1 ebenfalls die Projektnummer und nicht die Formel.
Wenn unterhalb einer "A"-Zeile eine neue Zeile eingefügt wird, dann steht in "B" & loZeile+1 richigerweise die Formel.
Aber andererseits ist das eigentlich kein Problem, denn wenn ich in der ganzen Spalte auf die Formel verzichte, wird ja die obige Nummer kopiert und bei neuen Projekten danach gelöscht.
Fazit: die Formel ist überflüssig. Das Makro ist so ok.
Antworten Top
#10
Hallo,

bei mir sagt das grüne Dreieck, dass die Formel sich auf leere Zellen bezieht. Das kann man abschalten. Die meisten Fehlermeldungen habe ich bei mir abgeschaltet.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste