Osterrätsel – gemacht und gelöst
Vor einigen Wochen habe ich ein Osterrätsel mit folgender Aufgabe gestellt:
„Leo liebt Primzahlen seine Freunde essen und Kommas weglassen. Leo hat 64 (leider keine Primzahl) Zahlen (Primzahlen!) auf dem Blatt „Tabelle1“ der Datei „Osterraetsel.xlsx“ versteckt.
Wie lautet die Summe dieser Zahlen, die Leo versteckt hat? (eine Primzahl)
Fügt man an der richtigen Stelle ein Komma ein – wie heißt diese Zahl?
Tipp: man findet sie mehrmals in Excel.
Du kannst die Datei von compurem.de/Osterraetsel.xlsx herunterladen.
Für die richtige Antwort gibt es: ein großes Lob! Von mir und von Leo.“
Öffnet man die Datei, sieht man ein leeres Blatt. Richtig: in Tabelle1 befinden sich die Zahlen. Das Blatt Tabelle1 muss man einblenden:

Dort befinden sich viererlei Dinge:
- Zahlen
- Kommentare mit Zahlen
- Kommentare mit Bildern
- Bilder


Wie habe ich die hineinbekommen?
Die Zahlen habe ich mit einem VBA-Skript in zufällige Zellen geschrieben. Ebenso die Kommentare mit den Werten:
Const Zahl As String = "|41597|30851|31139|1481|49043|44159|36877|22901|29021|25367|59197|52379|52081|27211|55829|58391|28211"
Dim MyValueZeile As Long
Dim MyValueSpalte As Integer
Dim i As Integer
Dim xlZelle As Range
Randomize
For i = 1 To 17
MyValueSpalte = Round((16000 * Rnd), 0) + 1
MyValueZeile = Round((1000000 * Rnd), 0) + 1
Set xlZelle = ActiveSheet.Cells(MyValueZeile, MyValueSpalte)
With xlZelle
.AddComment
.Comment.Visible = False
.Comment.Text Text:=CStr(Split(Zahl, "|")(i))
.Comment.Shape.TextFrame.Characters.Font.Size = 32
End With
Next i
MsgBox "fertig"
Und die Grafiken in den Kommentaren? Die kann man mit PowerPoint erstellen. Man erstellt eine Folie mit einer Form:

Mit ein bisschen VBA-Code wird die Form mit den Primzahlen „beschossen“:
Const Zahlen As String = "30269|40483|5669|10313|31159|40883|37549|24043|46589|56779|46601|43691|34687|41621|43961|9067|17027|30497|56531|24953|50993|47309|23743"
Sub MacheBilder()
Dim i As Integer
For i = 0 To UBound(Split(Zahlen, "|"))
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = Split(Zahlen, "|")(i)
ActivePresentation.SaveCopyAs2 "C:\Osterratsel24\Folie1.jpg", ppSaveAsJPG
FileCopy "C:\Osterratsel24\Folie1.jpg", _
"C:\Osterratsel24\Bild\" & Chr(i + 65) & ".jpg"
Next i
End Sub
Das Ergebnis:

Und die kann man nach Excel importieren:
Dim MyValueZeile As Long
Dim MyValueSpalte As Integer
Dim i As Integer
Dim xlZelle As Range
For i = 1 To 22
MyValueSpalte = Round((16000 * Rnd), 0) + 1
MyValueZeile = Round((1000000 * Rnd), 0) + 1
Set xlZelle = ActiveSheet.Cells(MyValueZeile, MyValueSpalte)
With xlZelle
.AddComment
.Comment.Visible = False
.Comment.Text Text:=""
.Comment.Shape.Fill.UserPicture "C:\Osterratsel24\Bild\" & Chr(i + 64) & ".jpg"
End With
Next i
MsgBox "fertig"
Zugegeben: Die fehlenden fünf Bilder habe ich per Hand beschriftet und eingefügt.
####
Wie bekommt man die Zahlen wieder heraus?
Eine Lösung wäre VBA.
Eine andere Power Query. Ich zeige mal Power Query:
Im openXML der Datei steckt ja alles drin:

In der Datei sharedStrings.xml befinden sich die Zahlen:

Und die kann man mit Power Query auslesen …
In der Datei „comments1.xml“ befinden sich die Werte der Kommentare:

Und die kann man mit Power Query auslesen …
Und die Bilder? Die befinden sich als Binärdateien im Ordner „media“:

Und wie kann man „schnell“ diese Zahlen auslesen, ohne sie abtippen zu müssen?
Power Query stellt in Excel in Microsoft 365 den Connector „Bild aus Datei“ zur Verfügung. Leider kann man nicht auf alle Bilder eines Ordners zugreifen. Sondern nur auf ein Bild. Das stellt jedoch kein Problem dar: Fertigt man einen Screenshot der Bilder an, speichert ihn ab und greift darauf zu:

so kann man die Daten nach Excel einfügen:

Und dann? Power Query – oder:
=FILTER(ZUSPALTE(A1:U10);(ZUSPALTE(A1:U10)>0)*(ISTZAHL(ZUSPALTE(A1:U10))))

Und die Bilder? Die werden in Excel aufgelistet in Start / Bearbeiten / Suchen und auswählen / Aufgabenbereich:

Oder aus der Datei drawing1.xml:

Und so lassen sich dann die 64 Zahlen in eine Tabelle eintragen und summieren:

Das Ergebnis der vier Summen lautet: 2718281. Setzt man ein Komma nach der ersten Ziffer, also 2,718281, so hat man die Eulersche Zahl e. Und richtig: Man kann sie nicht nur durch =EXP(1) in Excel erzeugen – „e“ befindet sich auch zwei Mal in „Excel“.
Übrigens: Euler hieß mit Vornamen Leonhard. Eben jener geniale Leo, dem ich dieses Rätsel widme. Er hat sich über die vier korrekten Antworten gefreut. Ich mich auch.