Frage von densch92, 38

Zahlen in bestimmten Mustern anordnen bei Excel?

Es geht um Folgendes:

Ich will alle natürlichen Zahlen (1,2,3,...) nehmen und diese in einem Tabellenprogramm oder Ähnlichem in bestimmten Mustern anordnen (Hier mal ein Bild wie ich mir das so vorstelle: http://www.directupload.net/file/d/4495/loh4buua_png.htm, die Linien sind nur dazu da, um das Muster zu zeigen. )

Jede Zahl soll hierbei schön ordentlich in einer eigenen Zelle stehen.

Wenn es nur daru geht , die Zahlen in einer "geraden Linie" senkrcht oder waagrecht anzuordnen, krieg ich das noch hin.

Aber so ein Zickzack Muster oder so stellt da für mich eine Herausforderung dar.

Durch viel Überlegen könnte ich vielleicht noch auf eine Formel kommen, welche Zahl beispielsweise im Kästchen Spalte X Zeile Y stehen muss.

Nun Excel aber dazu zu bringen, mittels dieser Formel mal die Zellen in einem 100X100 Quadrat auszufüllen, ist da schon ein andere Thema.

Vielleicht ist Excel aber auch einfach nur das komplett falsche Programm für solche Spielereien.

Weiß Jemand zufällig ein anderes Programm, dass gut dazu geeignet ist, Zahlen in einem bestimmten Muster automatisch erzeugen und anzeigen zu lassen? :-D

PS Sicher kommt die Frage warum ich das mache:

hat eigentlich keinen tieferen Grund, reine Spielerei.

Suche nur gerne nach Mustern in Zahlen. Diese dann nur alle untereinander stehen zu haben, macht es nur unnötig schwierig . An sich der selbe Grund warum man Zahlenskalen skaliert: Damit zusammenhänge einfacher zu sehen und zu erkennen sind.

Mir ist es nur von Hand schlicht zu mühsam, rund 10000 Zahlen in einem Muster auf ein Blatt Papier zu schreiben. und wenn ich dann gern ein anderes Muster hätte, dann muss ich die Zahlen wieder neu hinschreiben.

Würde ich es jetzt als Programm schreiben, wäre der Input die Zeilen und Spaltenzahl und das Programm fügt dann passend die richtige Zahl in diese Zelle ein.

und halt noch ne Schleife drum, damit das für unzählige Zellen wiederholt wird.

Antwort
von gfntom, 11

Sinnvollerweise würde ich soetwas (in einer beliebigen) Programmiersprache programmieren, das ist wohl weniger Aufwand, als ein anderes Programm dazu zu bringen, deinen Regeln zu folgen. (Natürlich wäre das etwa auch als Makro in Excel möglich)

Die Zellen wären die Datenfelder eines 2-Dimensionalen Arrays.

Ein Pseudoprogramm würde etwa so aussehen:

Zeile :=1
Spalte :=1
Wert = 1

Schreibe Wert in Zeile/Spalte
Wert := Wert+1

Label RECHTS

Spalte = Spalte +1  //nach rechts gehen
Schreibe Wert in Zeile/Spalte
Wert := Wert+1

Solange Spalte > 1 {  //nach links unten gehen
Zeile = Zeile +1
Spalte = Spalte -1
Schreibe Wert in Zeile/Spalte
Wert := Wert+1}

Zeile = Zeile +1   //nach unten gehen
Schreibe Wert in Zeile/Spalte
Wert := Wert+1

Solange Zeile > 1 {  //nach rechts oben gehen
Zeile = Zeile - 1
Spalte = Spalte +1
Schreibe Wert in Zeile/Spalte
Wert := Wert+1}

Wenn Wert<Endwert springe zu Label Rechts

Kommentar von Iamiam ,

DH!, nochmal eine andere Interpretation!

@ densch: du siehst, jetzt haben sich (bisher schon) drei Leute den Kopf zerbrochen und unterschiedliche Lösungen angedacht, jetzt sei so gut und beschreibe noch etwas genauer, was Du Dir darunter vorgestellt hast!

Übrigens musste ich directupload stoppen, um überhaupt weiterarbeiten zu können!

Kommentar von densch92 ,

Naja, ich weiß nicht wirklich genau was es da näher zu beschreiben gibt.

Ich will nur die natürlichen Zahlen in einem Muster anordnen (beispielhaft das oft erwähnte Zickzackmuster)
und das möglichst automatisch weil ich keine Lust habe, 200+ Zahlen von Hand einzutippen.

Mal wieder ein Bild, wie sowas in Excel aussehen sollte:
http://www.bilder-upload.eu/show.php?file=f5699c-1475406980.png

(Ignoriert den blauen Rand)

Nur sollen es eben nicht nur 100 Zahlen oder so sein sondern ich hätte das ganze gerne so eingetragen für die ersten 1000 Zahlen oder so.

beispielsweise.

Da meine Frage offenbar doch viel uneindeutiger ist, wie erwartet, fangen wir mal mit einer einfachen frage an:
Kann man in Excel irgendwie den aktuellen Zeilen oder spaltenwert einer Zelle abfragen und dann diesen in einer Formel verarbeiten?

Expertenantwort
von Iamiam, Community-Experte für Excel, 10

Ich kann keinerlei Systematik in Deinem Muster entdecken, evtl Diagonalen -aber auch Zwischenzeilen?

Zahlen setzen kannst du ohnehin nur mit einem Makro. Statistisch verteilt kannst Du sowas erreichen für Felder beliebiger Größe (s=Spaltenzahl, z=Zeilenzahl, za = 1.Zeile, sa = 1.Spalte) mit einer Makroschleife für n Items:

Kernbefehl:

  • For i = 1 to n
  • Activesheet.Cells(int(Rnd() * z) + za, int(Rnd() * s) + sa).value = i
  • next i

(Da kann es aber vorkommen, dass eine schon beschriebene Zelle nochmal beschrieben wird, die erste Zahl also verschwindet.)

Wenn es das ist, was du suchst., programmiere ich Dir auch noch eine Prüfung, die das verhindert, nur verkompliziert jeder Zusatzschritt erheblich.

Also gib Rückmeldung, vorher mach ich nix!

Oder beschreibe genauer, nach welchem System Du die Zahlen gesetzt haben willst.

Verwandtes Problem: Ein kleines Lotto-Programm hab ich früher schon mal gemacht.

Kommentar von Iamiam ,

der zentrale Befehl geht auch noch viel kürzer, wenn Du den Bereich vorher markierst(Selection) oder benennst (ggf auch in einer Variablen "settest"):

  • Selection.Cells(Rnd() + 1).value = i

(wobei Du Dir das .value auch noch sparen könntest, das ist nämlich das Standardargument, aber der Klarheit wegen tu ichs immer rein.

Expertenantwort
von Ninombre, Community-Experte für Excel, 10

Aus dem Bild kann ich kein echtes Muster erkennen... ich bin auch kein Mathematiker, der elegante Formeln formulieren kann. Das musst Du als Voraussetzung, um das in einem Programm abbilden zu können eigentlich schon machen.

Eine Variante auf die Schnelle:


Sub schraegezahlen()
Dim x, y, i As Integer
i = 1
x = 1
y = 1
Cells(y, x).Value = i
While i < 100

'eins runter
i = i + 1
y = y + 1
Cells(y, x).Value = i
'hoch und rechts bis die obergrenze erreicht ist
While y > 1
i = i + 1
y = y - 1
x = x + 1
Cells(y, x).Value = i
Wend
'eins rüber
i = i + 1
x = x + 1
Cells(y, x).Value = i
'runter und links bis der seitliche rand erreicht ist
While x > 1
i = i + 1
y = y + 1
x = x - 1
Cells(y, x).Value = i
Wend
Wend

End Sub

malt folgendes Bild. Die Begrenzung auf die Zahlen bis 100 funktioniert, wie man sieht, noch nicht richtig, es wird die letzte Reihe noch zu Ende geschrieben.


Edit: Das Bild ist leider nicht das richtige, da waren x und y noch verdreht. Sieht aber ähnlich aus

Kommentar von Iamiam ,

DH! so kann man die Aufgabenstellung auch sehen!

bei ungenau formulierten Anforderungen ist die Interpretation in jede Richtung denkbar: ich hab in Richtung statistische Verteilung gedacht!

Keine passende Antwort gefunden?

Fragen Sie die Community