Clever-Excel-Forum

Normale Version: Formel zentral verwalten zwecks einfacher Änderungen?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
(25.08.2020, 12:27)BoskoBiati schrieb: [ -> ]Hi,

dann stelle mal eine Mustertabelle vor.

ich hab sie im oberen beitrag hinzugefügt. Danke schonmal fürs Anschauen!  :100:
Hallo,

ich würde die einzelnen Einträge auslagern in eine separate Tabelle. Zum Ändern einer Formel genügt es den gesamten Formelbereich zu markieren, die Änderungen einzutragen in die oberste Zeile und mit STRG + ENTER abzuschließen, dann sind alle Formeln geändert. Außerdem kann man Formeln kopieren, die passen sich dann an.


[attachment=33731]
Hallo enigmak2,

anbei mal ein Versuch mit einer VBA-Fkt., sofern ich das richtig verstanden habe, denn ich habe keine Ahnung von xml. (s. Mappe)
Bitte mal testen!

Sigi
@BoskoBiati

Vielen Dank dass du dir die Arbeit gemacht hast den Inhalt in die Zellen zu übertragen. Damit kann man den Inhalt leicht verändern aber wenn man mehrere Arbeitsmappen hat mit hunderten von Seiten ist es sehr kompliziert eine Formel zu ändern.

@Sigi.21

Vielen Dank! Das ist genau was ich gesucht habe. Jetzt kann ich den code den du geschrieben hast studieren, dass ich dann andere Stellen mit einen ähnlichen Aufbau den Code selber schreiben kann. Das Angenehme ist, dass es auf diese Art sehr viel übersichtlicher ist wenn man Änderungen vornehmen will und er sich zentral ändern lässt.
Ist diese Art von Formel eigentlich ressourcenhungriger für Excel wenn es auf mehrere Seiten steht als normal über die Formelzeile so wie ich es ursprünglich gehabt habe?
(25.08.2020, 21:15)enigma2k schrieb: [ -> ]Ist diese Art von Formel eigentlich ressourcenhungriger für Excel wenn es auf mehrere Seiten steht als normal über die Formelzeile so wie ich es ursprünglich gehabt habe?

Hallo enigma2k,

freut mich, dass es auf Anhieb funktioniert.

Du kannst die VBA-Fkt. wie eine Excelformel einsetzen. Auch auf tausenden Zeilen und auf mehreren Tabellen. Ob eine VBA-Fkt. ressourcenhungriger als eine "normale" Formel ist, hängt davon ab, was da verarbeitet wird.  Vgl. eine einfache Summe() mit einer komplexen Matrixformel(). So auch bei VBA.
Bei der hier vorliegenden VBA-Fkt. passiert nicht so viel, ein paar wenn/dann-Unterscheidungen und ein paar Textverkettungen. Da sollte zu den Formeln kein Unterschied bemerkbar sein.

Sigi
Hi,

man braucht hier keine {} um die Formel!
Mit select Case ist das Ganze wohl etwas schneller:

Code:
Function xmlText(Exercise As String, Header As String, Audio As String, Info As String, PostID As Long) As String
Dim Aus As String
Select Case Info
    Case "w"
            Aus = "<line><word1>" & Exercise & "</word1>" & "<word2>" & Header & "</word2>" & "<info>" & Audio & "</info></line>"
    Case Is = "A"
            Aus = "<line><orig-a>" & Exercise & "</orig-a>" & "<trans-a>" & Header & "</trans-a>" & "<info>" & Audio & "</info></line>"
    Case Is = "B"
            Aus = "<line><orig-b>" & Exercise & "</orig-b>" & "<trans-b>" & Header & "</trans-b>" & "<info>" & Audio & "</info></line>"
    Case Is = "start"
            Aus = "<dialog><header>" & Header & "</header><audio>" & Audio & "</audio><post-id>" & PostID & "</post-id>"
    Case Is = "end"
            Aus = "</dialog>"
    Case Else
            Aus = " E R R O R  /  F E H L E R "
End Select
    xmlText = Aus
End Function

Beachte, dass VBA auf Groß- und Kleinschreibung achtet! a ist nicht gleich A!
@BoskoBiati

Vielen Dank für die Optimierung, werde es morgen gleich ausprobieren. :100:  Arbeite mich gerade durch einen VBA Kurs, echt toll was da alles geht mit Excel und VBA. gibt es eigentlich eine leichte Möglichkeit das case sensitive abzuschalten damit es egal ist ob etwas groß oder klein geschrieben wird?
Hi,

z.B. so:

Code:
Option Explicit

Function xmlText(Exercise As String, Header As String, Audio As String, Info As String, PostID As Long) As String
Dim Aus As String
Select Case LCase(Info)
    Case "w"
            Aus = "<line><word1>" & Exercise & "</word1>" & "<word2>" & Header & "</word2>" & "<info>" & Audio & "</info></line>"
    Case Is = "a"
            Aus = "<line><orig-a>" & Exercise & "</orig-a>" & "<trans-a>" & Header & "</trans-a>" & "<info>" & Audio & "</info></line>"
    Case Is = "b"
            Aus = "<line><orig-b>" & Exercise & "</orig-b>" & "<trans-b>" & Header & "</trans-b>" & "<info>" & Audio & "</info></line>"
    Case Is = "start"
            Aus = "<dialog><header>" & Header & "</header><audio>" & Audio & "</audio><post-id>" & PostID & "</post-id>"
    Case Is = "end"
            Aus = "</dialog>"
    Case Else
            Aus = " E R R O R  /  F E H L E R "
End Select
    xmlText = Aus
End Function

oder so:

Code:
Option Explicit

Function xmlText(Exercise As String, Header As String, Audio As String, Info As String, PostID As Long) As String
Dim Aus As String
Select Case UCase(Info)
    Case "W"
            Aus = "<line><word1>" & Exercise & "</word1>" & "<word2>" & Header & "</word2>" & "<info>" & Audio & "</info></line>"
    Case Is = "A"
            Aus = "<line><orig-a>" & Exercise & "</orig-a>" & "<trans-a>" & Header & "</trans-a>" & "<info>" & Audio & "</info></line>"
    Case Is = "B"
            Aus = "<line><orig-b>" & Exercise & "</orig-b>" & "<trans-b>" & Header & "</trans-b>" & "<info>" & Audio & "</info></line>"
    Case Is = "START"
            Aus = "<dialog><header>" & Header & "</header><audio>" & Audio & "</audio><post-id>" & PostID & "</post-id>"
    Case Is = "END"
            Aus = "</dialog>"
    Case Else
            Aus = " E R R O R  /  F E H L E R "
End Select
    xmlText = Aus
End Function
@BoskoBiati

Vielen Dank das mit dem CaseSensitiv hat super geklappt! 


Ich würde den code gerne umwandeln dass er mit einem Array arbeitet. Also anstatt dass ich die Formel in jede Zeile schreiben muss, dass ich ihn nur in eine Zeile schreibe und dann alle 4 Spalten und die jeweiligen Zeilen auswähle. Danach soll die Formel durch jede Zeile des Arrays durchgehen und im Grunde das gleiche machen wie vorher schon.

Habe schon einiges dazu gegoogelt aber leider hat das so noch nie jemand gemacht. Meistens wird es immer nur mit Zahlen gemacht und selbst da gibt’s unterschiedliche Arten.

Sollte man so ein Array definieren für diesen Einsatz?
Code:
Function ssmlarray(ParamArray text() As Variant)
 
oder einfach nur

Code:
Function ssmlarray(text)

Danach nehme ich an eine For Schleife mit dem gleichen Code wie bisher 

Code:
    Case Is = "w"
        Ausgabe = "Das Wort lautet: " & Original & " " & Translation
       
    Case Is = "a"
        Ausgabe = "Das ist Person A"
       
    Case Is = "b"
        Ausgabe = "Das ist Person B"
       
    Case Else
        Ausgabe = "E R R O R"
Seiten: 1 2