Bedingte Formatierung in LibreOffice Calc kopieren

Photo by David Pisnoy on Unsplash

Seit längerer Zeit habe ich mal wieder mit LibreOffice Calc gearbeitet. In meiner Tabelle hatte ich in mehreren Zellen eine Bedingte Formatierung erstellt, die ich in eine andere Zelle in der Tabelle kopieren wollte. Mit einem schlichten Strg+C und Strg+V, also einem Copy+Paste, bin ich nicht zum Ziel gekommen.

In LibreOffice Calc funktioniert das Kopieren der Bedingten Formatierung anders als in einem Microsoft Excel.

Bedingte Formatierung kopieren

In diesem Beispiel wird in der Zelle „B7“ eine einfache Bedingte Formatierung erstellt, die anschließend in die Zelle „F7“ kopiert werden soll.

LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren

Die Bedingte Formatierung erstellen wir zuerst in der Zelle „B7„, wie im Screenshot dargestellt.

LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren
LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren

Die Bedingte Formatierung ist fertig erstellt und soll nun in die Zelle „F7“ kopiert werden. Mit einem einfachen Copy-Paste ist das in LibreOffice Calc nicht möglich.

  • Setzt den Cursor in die Zelle B7
  • Drückt die Tastenkombination Strg+V
  • Setzt den Cursor in die Zelle F7
  • Drückt die Tastenkombination Strg+Shift+V
  • Wählt in dem neuen Fenster nur „Formatierung“ aus
LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren

Das erfolgreiche Kopieren der Bedingten Formatierung könnt ihr gleich prüfen.

LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren
Fehler, Gruppe existiert nicht! Überprüfen Sie Ihre Syntax! (ID: 47)

Bedingte Formatierung mit Zellbezug kopieren

Eine kleine Besonderheit gilt es beim Erstellen und beim Kopieren von Bedingten Formatierungen in LibreOffice Calc zu beachten.
Habt ihr eine Bedingte Formatierung, die ihr auf eine andere Zelle referenziert, dann wird ein Dollar-Zeichen ($) in die Formel automatisch eingefügt.
Damit referenziert die Bedingte Formatierung immer auf diese Zelle, egal, was ihr in der Tabelle macht oder die Bedingte Formatierung kopiert.

Ihr müsst also schon beim Erstellen der Bedingten Formatierung darauf achten, dass Dollar-Zeichen zu entfernen, damit ihr dann ohne Probleme kopieren könnt.

LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren

In diesem Beispiel verweist die Bedingung 1 auf die Zelle B8 mit Dollarzeichen:

$Tabelle1.$B$8>0

LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren

Damit wir die Bedingte Formatierung auch innerhalb der Tabelle 1 in die gleiche Zeile 8 kopieren können, ist das Dollarzeichen vor dem B zu entfernen:

$Tabelle1.$B8>0

Nun könnt ihr wie oben beschrieben die definierte Bedingung in die Zelle F10 kopieren.

Möchtet ihr die Bedingte Formatierung auch in eine andere Zeile oder in ein anderes Tabellen-Blatt kopieren, müsst ihr die Dollar-Zeichen entsprechend entfernen.

LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren
LibreOffice Calc - Bedingte Formatierung kopieren
LibreOffice Calc – Bedingte Formatierung kopieren

Photo by David Pisnoy on Unsplash

Werte Kopieren von Quell- in Ziel-Tabelle

Mit diesem Makro lassen sich sehr leicht Werte aus einer Quelle in eine andere Ziel-Tabelle kopieren.

  • Es wird für jede definierte Rage (Spalte) die letze beschriebene Zeile ermittelt.
  • In die Tabelle Ziel wird eine Formel für den Übertrag der Werte aus Ziel eingetragen.
  • Die Formeln werden nach erfolgreichem übertrag überschrieben.

Quelle

Ziel

Sub KopiereABASUsersOrg()
'
' Kopiert die Originalwerte aus Quelle in Ziel
'

Application.ScreenUpdating = False

' Tabelle: Quelle     ' Source
' Tabelle Ziel: Ziel    ' Ziel
' Kopiere das Austrittsdatum aus den PMS-Daten-Rohdaten
'
    ' Ermittelt die letzte befüllte Zelle der Tabelle Ziel
    Dim Letzte As Long
    Worksheets("Ziel").Activate
    Letzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    ' Ermittelt die letzte befüllte Zelle der Tabelle Ziel
   
    ' Ermittelt die letzte befüllte Zelle der Tabelle Quelle
    Dim quelle_letzte As Long
    Worksheets("Quelle").Activate
    quelle_letzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    ' Ermittelt die letzte befüllte Zelle der Tabelle Quelle


    ' B3 - Schreibt die Formel in die Zelle
    Worksheets("Ziel").Range("B3").FormulaLocal = _
    "=WENN('Quelle'!B3="""";"""";'Quelle'!B3)"
        ' Kopiert die Formel ans Ende der Spalte
    Worksheets("Ziel").Activate
    Range("B3").AutoFill Destination:=Range("B3:B" & quelle_letzte), Type:=xlFillDefault
    
    ' D3 - Schreibt die Formel in die Zelle
    Worksheets("Ziel").Range("C3").FormulaLocal = _
    "=WENN('Quelle'!C3="""";"""";'Quelle'!C3)"
        ' Kopiert die Formel ans Ende der Spalte
    Worksheets("Ziel").Activate
    Range("C3").AutoFill Destination:=Range("C3:C" & quelle_letzte), Type:=xlFillDefault
    

    
    Letzte = 0
    quelle_letzte = 0

Call FormelnEntfernen

Application.ScreenUpdating = True
End Sub

Mit diesem Makro können die gesetzten Formeln in der Tabelle „Ziel“ entfernt werden.

Private Sub FormelnEntfernen()
'
' Kopiert die Werte in Tabelle "Ziel", um die Formeln zu ersetzen
'

Application.ScreenUpdating = False

 Worksheets("Ziel").Select
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

Daten aus anderer Arbeitsmappe in aktuelle Tabelle kopieren

Ziel

Man möchte in die aktuell geöffnete Arbeitsmappe in eine bestimmte Tabelle Daten aus einer anderen, Arbeitsmappe aus einer definierten Tabelle kopieren.

Wir unterscheiden einfachheitshalber zwischen

  • Zielarbeitsmappe: Die geöffnete Arbeitsmappe, in die die Daten kopiert werden sollen
  • Quellarbeitsmappe: Die Arbeitsmappe, die die zu kopierenden Daten enthält.

Ausganssituation

Die Zielarbeitsmappe ist geöffnet und die Tabelle in welche die Quelldaten importiert werden sollen, ist bereits vorhanden. Jedoch ist der Name und der Speicherpfad der Arbeitsmappe nicht bekannt und muss erst ermittelt werden.

Die Quellarbeitsmappe ist geschlossen und befindet sich im Unterverzeichnis „Quelle“ der Zielarbeitsmappe. Die Daten befinden sich in der Tabelle1 und sind von dort zu kopieren.

In der Zielarbeitsmappe ist eine Tabelle mit dem Namen „Log“ vorhanden, in das Meldungen geschrieben werden.

VBA-Code

Option Explicit

Sub Import_Rohdaten()

Application.ScreenUpdating = False ' Screenupdating ausschalten

If MsgBox("Bitte prüfen Sie vor dem Beginn der Daten-Imports, dass in der Rohdaten-Datei" _
        & Chr(10) & _
        "nur eine Tabelle mit dem Namen  vorhanden ist." _
        & Chr(10) _
        & Chr(10) _
        & Chr(10) & _
        "Möchten Sie mit dem Import fortfahren?", vbYesNo, "Import Rohdaten") = vbYes Then

Worksheets("Import").Select
Range("A1").Select

    Call ImportiereRohdaten

Else
Worksheets("Log").Range("b3").Value = Date & " - " & Time & " - Daten-Import abgebrochen."
Worksheets("Log").Select

End If

Application.ScreenUpdating = True ' Screenupdating einschalten

End Sub


Private Sub ImportiereRohdaten()

Application.ScreenUpdating = False ' Screenupdating ausschalten

    Dim strArbeitsmappe_Pfad As String
    Dim strArbeitsmappe_Name As String
    Dim strArbeitsmappe_Tabellenblatt As String
    Dim strArbeitsmappe As String
    Dim strVerzeichnis As String
    Dim StrDatei As String
    Dim I As Integer
    Dim StrTyp As String
    Dim Dateiname As String
    Dim Dateiname_neu As String
    Dim Zeit As Date
        Dim strQuelle_Workbook As String
    
    ' Definiert den Pfad der geöffneten Arbeitsmappe (= Zielarbeitsmappe)
    ' Der Pfad der geöffneten Arbeitsmappe (= Zielarbeitsmappe) wird jedesmal neu ermittelt.
    strArbeitsmappe_Pfad = ThisWorkbook.Path & ""
    
    ' Definiert den Datei-Namen der geöffneten Arbeitsmappe (= Zielarbeitsmappe)
    ' Der Name wird jedesmal neu ermittelt.
    strArbeitsmappe_Name = ThisWorkbook.Name
    
    ' Definiert das Tabellenblatt in der geöffneten Arbeitsmappe (= Zielarbeitsmappe), in das die Rohdaten importiert werden
    ' Der Name des Tabellenblatts wird jedesmal neu ermittelt.
    ' ACHTUNG: Der Cursor muss sich zwingend in der Tabelle befinden
	  strArbeitsmappe_Tabellenblatt = ActiveSheet.Name ' Ziel-Tabellenblatt
            
    ' Definiert den Quellpfad der die Arbeitsmappe mit Rohdaten (= Quelle) enthält
    ' ACHTUNG: Das Unterverzeichnis ist anzupassen
    strVerzeichnis = ThisWorkbook.Path & "\Quelle"
        
    ' Definiert den Datei-Typ, der die Rohdaten (= Quelle enthält
    StrTyp = "*.xlsx"
    Dateiname = Dir(strVerzeichnis & StrTyp)
    Dateiname_neu = Dateiname
    Zeit = FileDateTime(strVerzeichnis & Dateiname)
    
    ' Definiert den Namen der Arbeitsmappe, die die Rohdaten (= Quelle enthält
    strQuelle_Workbook = strVerzeichnis & Dateiname_neu ' neu
    
    ' Aktiviert die Ziel-Tabelle
    Worksheets(strArbeitsmappe_Tabellenblatt).Activate
    Range("A1").Activate
    
    ' Sucht im Quell-Verzeichnis nach der neuesten Excel-Arbeitsmappe
    Do While Dateiname <> ""
        If Zeit < FileDateTime(strVerzeichnis & Dateiname) Then
            Zeit = FileDateTime(strVerzeichnis & Dateiname)
            Dateiname_neu = Dateiname
        End If
        Dateiname = Dir
    Loop
    
    
    If MsgBox("Es wurde die Datei - " & Dateiname_neu & " - für den Import ausgewählt." & _
        Chr(10) & _
        Chr(10) & _
        "Möchten Sie die Daten importieren?", vbYesNo, "Import Rohdaten") = vbYes Then
        

    ' In der Zielarbeitsmappe wird der Bereich gelöscht
    Sheets(strArbeitsmappe_Tabellenblatt).Select
        ' Ermittelt die letzte befüllte Zelle
        Dim Letzte_Ziel As Long
        Letzte_Ziel = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
        ' Ermittelt die letzte befüllte Zelle
    Range("A1:R" & Letzte_Ziel).Select
    Selection.Clear

    ' Öffnet die Arbeitsmappe mit den Rohdaten (= Quelle)
    Workbooks.Open (ThisWorkbook.Path & "\Quelle" & Dateiname_neu)
    Sheets("Tabelle1").Activate
    
            ' Prüft den Spaltennamen in der Quell-Datei auf Übereinstimmungauf
			' Entspricht die Spaltenüberschrift nicht den Vorgaben, wird der Import abgebrochen
            If ActiveSheet.Range("C1").Value = "Spaltenüberschrift" Then
                'MsgBox ("Spaltename C der Rohdaten entspricht den Vorgaben")


    
    ' Ermittelt die letzte befüllte Zelle
    Dim Letzte_Roh As Long
    Letzte_Roh = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    ' Ermittelt die letzte befüllte Zelle
    Range("A1:R" & Letzte_Roh).Copy
        
        
    ' Aktiviert die Zielarbeitsmappe und fügt die kopierten Daten ein
    Windows(strArbeitsmappe_Name).Activate
    Worksheets(strArbeitsmappe_Tabellenblatt).Activate
    Range("A1").PasteSpecial Paste:=xlPasteValues, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    
    ' Wechselt auf die Rohdaten-Datei und schließt diese
    Windows(Dateiname_neu).Activate
    Application.CutCopyMode = False
    ActiveWorkbook.Close savechanges:=False

    
    ' Wechselt zur Zielarbeitsmappe und setzt den Cursor in die Zelle A1
    Windows(strArbeitsmappe_Name).Activate
    Worksheets(strArbeitsmappe_Tabellenblatt).Activate
    Range("a1").Select

    ' Schreibt in den Log-Bereich in Tabelle "Dashboard"
    Worksheets("Log").Range("b3").Value = Date & " - " & Time & " - Daten-Import erfolgreich abgeschlossen."
    Worksheets("Log").Select


            ' Wenn der Spaltenname nicht den Vorgaben entspricht, wird der Import abgebrochen
            Else
                    'MsgBox "Abbruch - Falsche Spaltenbenennung."
                    ' Wechselt auf die Rohdaten-Datei und schließt diese
                    Windows(Dateiname_neu).Activate
                    Application.CutCopyMode = False
                    ActiveWorkbook.Close savechanges:=False
                    
                    ' Wechselt zur Zielarbeitsmappe und setzt den Cursor in die Zelle A1
                    Windows(strArbeitsmappe_Name).Activate
                    Worksheets(strArbeitsmappe_Tabellenblatt).Activate
                    Range("a1").Select
                    
                    MsgBox "Daten-Import abgebrochen - Falsche Spaltenbenennung in den Rohdaten. Bitte prüfen Sie das Log-File."
                    
                    Worksheets("Log").Range("b3").Value = Date & " - " & Time & " - Daten-Import abgebrochen - falsche Spaltenbenennung in den Rohdaten. Spalte C <> Spaltenüberschrift."
                    Worksheets("Log").Select
                    
            End If

Else
MsgBox "Der Import wurde abgebrochen."
Worksheets("Log").Range("b3").Value = Date & " - " & Time & " - Daten-Import abgebrochen."
Worksheets("Log").Select
    
End If


Application.ScreenUpdating = True ' Screenupdating einschalten

End Sub

Excel – Werte aus Tabellen in einer Tabelle zusammenführen

Ich habe mal eine Frage, wie löst ihr folgendes Problem?

Ausgangssituation

In einer Excel-Arbeitsmappe gibt es mehrere gleiche Tabellen. Mit GLEICH meine ich, dass die Struktur und der Aufbau innerhalb der Tabellenblätter immer gleiche. Also ein bestimmter Wert steht in Tabelle 1, Tabelle 2, Tabelle 3, etc immer in der gleichen Zelle.

Nun zur Aufgabe. In der Arbeitsmappe gibt es eine Tabelle „Overview“ und dort sollen die Werte aus Tabelle 1 bis Tabelle 3 eingefügt werden.

Die einfachste Möglichkeit ist sicherlich in der Tabelle Overview den Cursor in die Zelle zu setzten wo der Wert eingefügt werden soll, dann „=“ einzugeben und mit der Maus in die Zellen in den einzelnen Tabellenblättern zu springen.

Was mich dabei stört, je mehr Tabellen und Werte in die Tabelle Overview übertragen werden sollen, desto länger dauert es.

Zur Verdeutlichung hier die Screenshots:

Tabelle 1
Tabelle 1

Tabelle 2
Tabelle 2
Tabelle 3
Tabelle 3
Tabelle Overview
Tabelle Overview
Tabelle Overview - Formeln
Tabelle Overview – Formeln

Overview
Overview

Hier eine Excel-Datei als Beispiel
Excel – Werte aus Tabellen in einer Tabelle zusammenführen

In der Beispieldatei sind die Werte aus Tabelle 1 bereits in die Tabelle Overview eingefügt worden mit der Formel =Tabelle1!C6, =Tabelle1!C10, =Tabelle1!C14, etc..

Wie kommen die Werte aus Tabelle 2 in die Tabelle Overview? Macht man sich die Mühe, jeden Wert manuell zu übertragen?

Wie macht ihr das?

Hier meine Lösung:

  • Erstelle eine neue Tabelle
  • Markiere den Bereich mit den bereits übertragenen Werten und drücke Strg+C
    Lösungsvorschlag
    Lösungsvorschlag
  • Wechsel in die neue, leere Tabelle und setzte den Cursor in die gleiche Zelle, wo in der Tabelle Overview der erste Wert steht, z.B. Overview!B3 + NeueTabelle!B3. Achtet darauf, dass ihr nur die Formel kopiert
    Lösungsvorschlag
    Lösungsvorschlag
  • Ändert dann für den kopierten Bereich die Formatierung auf TEXT ab.
    Lösungsvorschlag
    Lösungsvorschlag
  • Ersetzt das = durch ein Zeichen, dass nicht in der Formel vorkommt.
    Lösungsvorschlag
    Lösungsvorschlag
  • Kopiert den Bereich und …
    Lösungsvorschlag
    Lösungsvorschlag
  • … fügt diese in einen Editor. Im Beispiel wurde Notepad++ verwendet.
    Lösungsvorschlag
    Lösungsvorschlag
  • Der Tabellenbezug kann nun ganz einfach von Tabelle1 in Tabelle 2 geändert werden. Drückt Strg+F und ersetzt ?Tabelle1 durch =Tabelle2
    Lösungsvorschlag
    Lösungsvorschlag
  • Nachdem die Zellenbezüge geändert wurden, kopiert ihr die Formeln und …
    Lösungsvorschlag
    Lösungsvorschlag
  • … fügt diese in die Tabelle Overview ein und wie durch Zauberhand sind die Werte aus Tabelle 2 da.
    Lösungsvorschlag
    Lösungsvorschlag