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.

verketten mit Leerzeichen
#11
Hallo zusammen,

erst einmal vielen Dank für Eure Mühe und die Antworten.
die einzige Formel die bei mir funktioniert ist die von Jonas, allerdings auch noch mit einem Fehler.
Am weitesten komme ich mit der VBA Function - leider auch noch mit einem Fehler.

Der Fehler ist die ascii Wertverschiebung - wenn das Ergebnis >ascii 122 ist (das "z")
Ich habe das über eine wenn Formel gelöst, also zum Beispiel:
ich habe als Ausgangswert den Buchstaben "u" welcher den ascii Wert 117 hat.
um beim decodieren auf das korrekte Ergebnis zu kommen muss ich beispielsweise den Buchstaben um 11 Stellen verschieben.
Also ascii 117 + 11 = 128, das wäre aber das €urozeichen.
Also sage ich, wenn 117 + 11 > 122, dann 117 - 26 + 11. Das Ergebis wäre 102 - also das "f". Und wenn der Ausgangswert + die Verschiebung von 11 nicht > 122, dann nur den Ausgangswert + die Verschiebung.

Mein Problem besteht halt nun darin, das in jeder Zelle je ein Buchstabe steht - und die Leerzeichen sind leere Zellen.
wenn ich das nun verkette, fliegen mir die Leerzeichen raus und ich habe einen Ergebnissatz ohne Leerzeichen.



hier mal meine Formeln:
die einzelnen Buchstaben ziehe ich so aus dem Quelltext: =TEIL(Tabelle1!$B$7;B6;1)
Der ascii Wert: =CODE(B7)
mit dieser Formel mache ich die Verschiebung: =WENN(B8=32;"";WENN(B8+$A$11>122;ZEICHEN(B8-26+$A$11);ZEICHEN(B8+$A$11)))

B7 ist der Originalbuchatabe
B8 der ascii Wert
in A11 steht der Wert, um den ich verschieben möchte (1 - 26) - wobei 26 wieder den Ausgangsbuchstaben ergibt.

Bernd
Antworten Top
#12
Hallo,

teste mal dies:


Code:
Function Fen(ByVal rng As Range)

Tx = rng.Value
For i = 1 To Len(Tx)
   If Mid(Tx, i, 1) <> " " Then
       T = Chr(Asc(Mid(Tx, i, 1)) - 6)
       If Asc(T) > 96 Then
           Ty = Ty & T
       Else
           Ty = Ty + Chr(Asc(T) + 6 + 8)
       End If
   Else
       Ty = Ty & " "
   End If
Next i
Fen = Ty
End Function


Ich halte diesen Caesar-Code (ROT-n) für ein nettes Spiel bei einem Kindergeburtstag mit 9-12 jährigen. Für Ältere ist der Spruch: Spieglein, Spieglein an der Wand, wer hat Rot-1 in Internetland.

mfg
Antworten Top
#13
Hallo Fennek,

klasse, der Code funktioniert.
Kann man dem Code eine Zelle zuweisen, in der der Wert der Verschiebung steht?
Beispiel:
in A1 steht der Quellcode
in B1 steht der Wert, um den verschoben werden soll

Denn es ist ja nicht immer derselbe Wert - der ändert sich ja

Bernd
Antworten Top
#14
Du meinst Fenneks UDF, Bernd,
denn in meiner Formel ist auch eine enthalten. Hinter deren Namen liegt ein Link, wie man unschwer an der blauen Schrift und an der Unterstreichung bei Mauskontakt erkennen könnte! Der Link bietet eine BspDatei zum Download an. Darin ist die UDF enthalten.
Mit deinen Variabilisierungswünschen sähen Detlefs und meine Formeln dann so aus, wobei ich in Detlefs Formel TEXTVERKETTEN durch die UDF VJoin ersetzt habe (A1=kodierter Text, A2=Verschiebung):
{=VJoin(ZEICHEN(WENNFEHLER(1/(1/((CODE(TEIL($A$1;ZEILE(INDIREKT("1:"&LÄNGE($A$1)));1))-A2<97)*26+CODE(TEIL($A$1;ZEILE(INDIREKT("1:"&LÄNGE($A$1)));1))-A2-52))+52;32));"")}
{=VJoin(TEIL(" abcdefghijklmnopqrstuvwxyz";REST(WENNFEHLER(SUCHEN(TEIL(A1;SPALTE(INDIREKT("ZS1:ZS"&LÄNGE(A1);0));1);"abcdefghijklmnopqrstuvwxyz");A2-26)+26-A2;26)+1;1);"")}
Beide Formeln sollten auf jeden Fall funktionieren, sofern du die UDF übernimmst. Für Detlefs Originalformel müsstest du über die neue Xl-Abo-Funktion TEXTVERKETTEN verfügen, was nicht der Fall zu sein scheint.
Ansonsten teile ich Fenneks Ansicht, dass das Kinderkram ist! Das könnte man auch komplizierter gestalten, zB:
• Eigenes Alfabet bzw spezielle Zeichengruppen in diversen Varianten → Angabe der Variante
• Zusätzliche zyklische Verschiebungen → Angabe der Verschiebung
• Ggf Rückwärtsausgabe, gern auch blockweise und im Wechsel → Angabe entsprd
• Künstliche Verlängerung von Worten durch Füllzeichen nach ggf wechselnden Mustern → Angabe der Mustervariante
• Umkehrung/Tarnung normaler Zeichenhäufigkeiten → fest vorgesehen oder angegeben
Und alle diese zusätzlichen Angaben zur Verschlüsselung könnten ebenfalls nach einem bestimmten Muster oder Algorithmus codiert werden.

Ansonsten viel Spaß beim „Indianerspielen“…! ;-]
Morrn, Castor
Antworten Top
#15
Hi,

(15.06.2017, 02:26)Castor schrieb: Mit deinen Variabilisierungswünschen sähen Detlefs und meine Formeln dann so aus, wobei ich in Detlefs Formel TEXTVERKETTEN durch die UDF VJoin ersetzt habe (A1=kodierter Text, A2=Verschiebung)

bei meinem Excel sieht das Ergebnis mit variabler Verschiebung so aus:

Tabelle2
ABCD
1verschlüsselter Text:hk tuz gyngskj ul soyzgqky gtj znay sgqk znks ixosky
2Verschiebung:26
3Klartext Verschiebung fix:be not ashamed of mistakes and thus make them crimes
4Klartext Verschiebung B2:hk tuz gyngskj ul soyzgqky gtj znay sgqk znks ixosky
5Klartext Verschiebung B2:hk tu gyngskj ul soy gqky gtj nay sgqk nks ixosky

verwendete Formeln
Zelle Formel Bereich N/A
D3{=VJoin(TEIL(" abcdefghijklmnopqrstuvwxyz";REST(WENNFEHLER(SUCHEN(TEIL(Tabelle2!B1;SPALTE(INDIREKT("ZS1:ZS"&LÄNGE(Tabelle2!B1);0));1);"abcdefghijklmnopqrstuvwxyz");-20)+20;26)+1;1);"")}$D$3
D4{=VJoin(ZEICHEN(WENNFEHLER(1/(1/((CODE(TEIL($B$1;ZEILE(INDIREKT("1:"&LÄNGE($B$1)));1))-B2<97)*26+CODE(TEIL($B$1;ZEILE(INDIREKT("1:"&LÄNGE($B$1)));1))-B2-52))+52;32));"")}$D$4
D5{=VJoin(TEIL(" abcdefghijklmnopqrstuvwxyz";REST(WENNFEHLER(SUCHEN(TEIL(B1;SPALTE(INDIREKT("ZS1:ZS"&LÄNGE(B1);0));1);"abcdefghijklmnopqrstuvwxyz");B2-26)+26-B2;26)+1;1);"")}$D$5
{} Matrixformel mit Strg+Umschalt+Enter abschließen
Matrixformeln sind durch geschweifte Klammern {} eingeschlossen
Diese Klammern nicht eingeben!!

Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 19.07 einschl. 64 Bit



Was mache ich falsch?
Antworten Top
#16
Code:
Sub M_snb()
    Dim sn() As Byte
    sn = Cells(1).Value
    
    For j = 0 To UBound(sn) Step 2
      c00 = c00 & Chr(sn(j) + 6 * (sn(j) <> 32))
    Next
    
    MsgBox c00
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#17
Hallo,

auf der Suche, wie man ein Byte-Array ohne Schleife um 6 vermindern kann, bin ich auf diese Seite gestoßen:

http://www.motobit.com/help/scptutl/clu46.htm

Aber auf meinem xl 2016 ist die genannte Reference (scriptUtil) nicht vorhanden.

mfg
Antworten Top
#18
Der Inhalt von Zelle B2 ist falsch, Ralf,
denn der muss hier 6 sein, wie es uns auch Papabaer mitgeteilt hatte. ;)
Dann ergeben sich auch in den anderen Formeln die Werte der 1.Formel.
In diesem Zusammenhang wären natürlich mehrere unterschiedliche Urtexte interessant, die unterschiedlich (verschoben) verschlüsselt den gleichen codierten Text ergeben. Ein solcher codierter Text könnte dann mehrere mehr oder weniger sinnvolle Lösungen haben. Die allein richtige könnte sich dann aus der Verwendung eines bestimmten vereinbarten Worts oder eines/r Zeichens/kombination ergeben. Aber das dürfte wohl ungleich arbeitsaufwendiger, wenn nicht gar unmöglich sein…
Gruß, Castor
[-] Folgende(r) 1 Nutzer sagt Danke an Castor für diesen Beitrag:
  • Rabe
Antworten Top


Gehe zu:


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