mikrocontroller.net

Forum: PC-Programmierung Feld Prüfen in Excel


Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte ein Feld in Excel Prüfen, ob zum Beispiel 5 Mal eine 0 
aneinander gereiht ist. Dabei sollen auch Diagonalen mit einbezogen 
werden.

Das Feld sieht zum Beispiel so aus:
Beispiel 1: Fehlerfall, da vertikal 5 Nullen aufeinander folgen

0 1 1 1 1 
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

Beispiel 2: Fehlerfall, da horizontal 5 Nullen aufeinander folgen

0 0 0 0 0 
0 1 1 1 1
1 1 1 1 1
0 1 1 1 1
0 1 1 1 1

Beispiel 3: Fehlerfall, da diagonal 5 Nullen aufeinander folgen

0 0 1 1 0 
0 0 1 1 1
1 1 0 1 1
0 1 1 0 1
0 1 1 1 0

Beispiel 4: Alles ok

0 1 1 1 0
1 0 0 1 1
0 1 1 1 0
1 1 1 0 1
0 0 0 1 0

Meine Idee war eigentlich mit Bereich verschieben die Anzahl der Nullen 
mit einem bestimmten Wert zu vergleichen. Wie man im Beispiel 4 aber 
sieht, ist dies nicht möglich. Soweit ich weiß kann Excel auch nicht 
Diagonal vorgehen.

Hat jemand eine Lösungsidee bzw weiß, ob dies Überhaupt machbar ist?
Die Diagonale Komponente muss leider mit rein.

Autor: Wühlhase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, eigentlich ganz einfach: Lauter Wenn()-Anweisungen benutzen.

Oder vielleicht doch ein VBA-Skript...das macht auch Arbeit, aber 
weniger Schmerzen.

Ist das Feld beliebig groß, oder bleibt es bei 5x5? Was wird das? Eine 
Excel-Variante von vier gewinnt in Excel, da der Chef den 
Internetverkehr auf Browsergames überwacht? (Ich warte ja darauf, das 
jemand mal Bomberman oder ein Flugzeugspiel in Excel realisiert... :D)

Autor: sgd (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
5 Summen horizontal,
5 Summen vertikal,
2 Summen diagonal

auf Null prüfen.

Autor: Peter M. (r2d3)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wühlhase schrieb:

> Internetverkehr auf Browsergames überwacht? (Ich warte ja darauf, das
> jemand mal Bomberman oder ein Flugzeugspiel in Excel realisiert... :D)

Schach in Excel mit schönen Spielfiguren macht auch Spass.
Nachdenken muss man nur kurz beim Färben des Spielfelds.

Autor: Wühlhase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sgd schrieb:
> 5 Summen horizontal,
> 5 Summen vertikal,
> 2 Summen diagonal
Schöne Lösung.

Autor: sgd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wühlhase schrieb:
> Schöne Lösung.

Geht bestimmt noch schöner.
Zumindest wäre diese Lösung schnell implementiert.

Autor: Peter M. (r2d3)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
sgd schrieb:
> Geht bestimmt noch schöner.

Was ist schön?

Elegant wäre eine benutzerdefinierte Excelfunktion, die eine 5x5-Matrix 
nimmt und einen Wahrheitswert zurückgibt.

So schön die sind, haben solche Funktionen bei mir die Neuberechnung 
eines simplen Tabellenblatts immer ausgebremst.

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wühlhase schrieb:
> Ist das Feld beliebig groß, oder bleibt es bei 5x5?

es sollte beliebig groß sein.

Wühlhase schrieb:
>> 5 Summen horizontal,
>> 5 Summen vertikal,
>> 2 Summen diagonal

klingt schon mal gut, realisiere ich das wie folgt:

A1+B2+C3+D4+E5 als erste diagonale
E1+D2+C3+B4+A4 als zweie diagonale

Wie erweitere ich das auf eine beliebige Anzahl?
Ich müsste da praktisch immer Bereich verschieben nutzen oder?

Autor: Peter M. (r2d3)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
m. s. schrieb:

> Wie erweitere ich das auf eine beliebige Anzahl?
> Ich müsste da praktisch immer Bereich verschieben nutzen oder?

Ich sehe keine tabellenblattorientierte Lösung, es sei denn eine 
benutzerdefinierte Funktion.

Autor: sgd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
m. s. schrieb:
> Wie erweitere ich das auf eine beliebige Anzahl?

Wird die zu überprüfende Reihe dann auch immer angepasst, also

5x5 -> 5
6x6 -> 6
(...)?

Dann gibt es immer nur diese zusätzlichen zwei Diagonalen
zu den "einfachen" Reihen und Spalten.

Ich würde das dynamisch in VBA lösen.

Autor: Nop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde es auch per VBA versuchen, ist finde ich deutlich schneller zu 
realisieren als über tausende WENN() abfragen...

Diagonalabfragen für beleibig große Felder...
Zeile 1 stehen lassen, Zeile 2 um eins nach links verschieben, Zeile 3 
um zwei nach links verschieben... usw
Das gleiche dann noch mit nach rechts verschieben, dann musst du nur 
noch vertikal und horizontal prüfen und das ist wirklich schnell 
erledigt

Autor: X4U (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nop schrieb:
> als über tausende WENN() abfragen...

Sind doch nur 3.

So aus dem Kopf:

WENN (A1=0; WENN (A2=0 ...
WENN (A1=0; WENN (B1=0 ...
WENN (A1=0; WENN (B2=0 ...

Bei größeren Feldern ist A1 dann eine "relative Adresse" die (in 5er 
Schritten) durchgezählt wird

Autor: Maddin S. (maddin91)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich fand das Problem interessant darum hab ich mal ne Excel gebastelt. 
Ist vielleicht nicht schön aber es funktioniert.

Für jede Zeile bildest du die Summe über die ensprechende Anzahl der 
Zellen in denen maximal eine 0 vorkommen darf. Dasselbe für Spalten und 
Diagonalen und am Ende guckst du ob in den so enstandenen Matritzen eine 
0 steht. Wenn ja, dann hast du irgendwo deine Zeile/Spalte/Diagonale mit 
den x nullen.

Ist schwer zu erklären darum guck dir einfach mal die Excel an.
Vielleicht hilfts ja.
Ansonsten ist es mit VBA ein 3-Zeiler. (Vielleicht 5 :D )

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das funktioniert jetzt super!

Vielen Dank!



Meine Überlegung wäre jetzt noch:
Ist es möglich, das ganze so zu ergänzen, dass zusammenhängende Felder 
mit dem Wert 0 gezählt werden, egal ob die horizontal, vertikal oder 
anders zueinander liegen?

Meine Idee dafür wäre, dass ich jedes Feld auf den Wert 0 Prüfe.
Wenn das Feld 0 ist, soll die Zeile-1 Spalte-1, Zeile-1, zeile-1 
Spalte+1,
spalte-1,spalte+1 etc berechnet werden, um die umliegenden felder dann 
auch jeweils auf den wert zu prüfen. Gleichzeitig soll ein Zähler für 
die Maximale Anzahl erreicht werden. ist dieser erreicht, dann soll es 
stoppen.

Ich weiß, dass dieses Vorgehen ein riesen Code für excel wäre, aber es 
wäre interessant.

Autor: Maddin S. (maddin91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird in Excel nichts. Selbst in VBA ist das keine leichte Aufgabe, 
weil du nicht weißt wie groß der Bereich mit zusammenhängenden nullen 
ist.

Autor: Petra (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

sicher nicht die sauberste Lösung, aber es könnte zum Denken anregen:
Sub test()
    Dim rng As Range
    Set rng = Range("A1")
    
    Debug.Print ThrewSize(rng)
End Sub

Function ThrewSize(First As Range)
    Dim allCols As Range
    Dim test As Boolean
    
    test = True

    lastCol = First.End(xlToRight).Column
    lastRow = First.End(xlDown).Row

    Set allCols = Range(First, Cells(lastRow, lastCol))

    'test first row horincontal
    For Each hc In Range(First, Cells(First.Row, lastCol)).Cells
        If TestVertical(hc, allCols.Rows.Count) Then
            test = False
            Exit For
        End If
    Next hc
    
    'test first col vertical

    ThrewSize = test
End Function

Function TestVertical(cell, Size As Integer)
    Dim test As Boolean
    test = True

    For i = 0 To Size - 1
        If cell.Offset(i, 0).Value = 1 Or Not test Then
            test = False
            Exit For
        End If
    Next i

    TestVertical = test
End Function

ich habe jetzt nur Horinzontal gemacht...
=> geprüft müssen ja nur (wenn ichs richtig verstanden habe) die erste 
Zeile, die erste Spalte und die beiden Max-Diagonalen...

im Sub test, gibst du die erste Zelle an... daraus kann man dann die 
Matrix erkennen <- egal wie groß... sollte die Matrix nicht Quadratisch 
sein müsste man halt das selbe Spiel für die Diagonalen machen und die 
0er mitzählen... aber Offset(1,1) ist ja jetzt auch keine kunst <- 
ebenso negativ...

Ab jetzt sollte es für jemanden der den VBA-Editor aufbekommt eigentlich 
von alleine gehen... die einzige offene Frage ist geht es evtl. "noch 
eleganter"
=> z.B. Summen Bilden, <- wobei das in den Diagonalen trotzdem auf 
solche for eaches hinauslaufen würde

cheers pet

Autor: X4U (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maddin S. schrieb:
> Das wird in Excel nichts. Selbst in VBA ist das keine leichte Aufgabe,
> weil du nicht weißt wie groß der Bereich mit zusammenhängenden nullen
> ist.

So als Idee:
Was wäre wenn die Tabelle auf ein zweites Tabellenblatt gespiegelt wird 
wo die Nullen als Einsen und alle anderen Zahlen als minus 1 Million 
erscheinen?

Dann könnte doch die Summe des Bereichs so langen berechnet werden bis 
Sie negativ wird. Das muss man dann vermutlich horizontal und vertikal 
machen.

Autor: Maddin S. (maddin91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es jetzt so verstanden, dass gezählt werden soll wie viele 
nullen in dem gesamten Bereich zusammenhängend sind.

0 1 1 0 0
1 0 0 1 1
0 0 1 1 0
1 0 1 0 1
0 0 0 1 0

Hier sind zum Beispiel alle nullen zusammenhängend. Die Ausgabe müsste 
dann die Anzahl der nullen sein also 14. Hab ich das richtig verstanden?

Und wenn man das Beispiel leicht ändert hat man plötzlich zwei Gruppen 
zusammenhängender nullen:

0 1 1 0 0
1 0 0 1 1
1 1 1 1 0
1 0 1 0 1
0 0 0 1 0

5 oben und 7 unten. Denkbar wäre dann eine Ausgabe, dass jede null durch 
die Anzahl der angrenzenden nullen ersetzt wird. also so:

5 1 1 5 5
1 5 5 1 1
1 1 1 1 7
1 7 1 7 1
7 7 7 1 7

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maddin S. schrieb:
> 5 oben und 7 unten. Denkbar wäre dann eine Ausgabe, dass jede null durch
> die Anzahl der angrenzenden nullen ersetzt wird. also so:
>
> 5 1 1 5 5
> 1 5 5 1 1
> 1 1 1 1 7
> 1 7 1 7 1
> 7 7 7 1 7

Hallo Maddin, das sieht super aus!
Wie hast du das gemacht ?

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
X4U schrieb:
> Was wäre wenn die Tabelle auf ein zweites Tabellenblatt gespiegelt wird
> wo die Nullen als Einsen und alle anderen Zahlen als minus 1 Million
> erscheinen?
>
> Dann könnte doch die Summe des Bereichs so langen berechnet werden bis
> Sie negativ wird. Das muss man dann vermutlich horizontal und vertikal
> machen.

Das habe ich nicht ganz verstanden

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Petra schrieb:
> Sub test()
>     Dim rng As Range
>     Set rng = Range("A1")
>
>     Debug.Print ThrewSize(rng)

Danke für deine Mühe Petra. VBA mag ich aber leider gar nicht und es 
sollte automatisch erfolgen :/

Autor: Carl D. (jcw2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
m. s. schrieb:
> Petra schrieb:
>> Sub test()
>>     Dim rng As Range
>>     Set rng = Range("A1")
>>
>>     Debug.Print ThrewSize(rng)
>
> Danke für deine Mühe Petra. VBA mag ich aber leider gar nicht und es
> sollte automatisch erfolgen :/

Eine VBA-Funktion läßt sich einfach in einer Formel benutzen. Die wird 
dann, wie alle anderen auch, automatisch berechnet.

Autor: Maddin S. (maddin91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
m. s. schrieb:
> Maddin S. schrieb:
>> 5 oben und 7 unten. Denkbar wäre dann eine Ausgabe, dass jede null durch
>> die Anzahl der angrenzenden nullen ersetzt wird. also so:
>>
>> 5 1 1 5 5
>> 1 5 5 1 1
>> 1 1 1 1 7
>> 1 7 1 7 1
>> 7 7 7 1 7
>
> Hallo Maddin, das sieht super aus!
> Wie hast du das gemacht ?

Das war leider nur ein Beispiel wie die Ausgabe aussehen könnte, weil 
ich mir auch nicht sicher war, ob du das so gemeint hast.

Ich hab jetzt auch nochmal längere Zeit nachgedacht und selbst in VBA 
fällt mir keine Lösung für das Problem ein, weil es doch viel komplexer 
ist als ich zunächst dachte. Bin gespannt ob da jemand ne Idee hat.

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal die Frage, soll es bei den 5x5 Feldern bleiben oder können die 
sich auch in der Größe unterscheiden (25x25? Oder vielleicht auch nicht 
quadratisch?)?
Und bleibt es auch bei dem Inhalt von 1en und 0en?

Wie genau soll das später in deinem Excel Workbook aussehen? Sind 
mehrere Tabellen auf einem Arbeitsblatt oder nur eine die dann beliebeig 
groß ist?
Ein paar Informationen bräuchten wir schon wenn du eine fertige Datei 
haben möchtest oder zumindes passende Informationen.

Aber der Ansatz mit der Überprüfung ob sich in einem benachbarten Feld 
einen entspechende Zahl befindet würde ich weiter befolgen. Ich denke 
auch nur so lässt sich das sinnvoll "berechnen".
Oder reicht es dir zum Beispiel auch wenn alle 0en eingefärbt werden und 
du sie dann selber zählen müsstest?

Autor: m.s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Feldgröße darf variabel sein.
Es ist nur eine Tabelle auf einem Arbeitsblatt. Diese hat eine feste 
Größe von 800*600.

Im Prinzip reicht mir die "einfachere Lösung" für ein 5x5 Feld, dann 
kann ich mir den Rest selbst zusammen bauen.
Es steht nur 0 oder 1 in jeder Zeile

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn dir das einfärben reichen sollte (musst dann halt selber noch 
die zusamnhänge erkennen und die Blöcke zählen), dann sollte das 
funktionieren:
Private Sub test()
Dim LetzteZeile As Integer, LetzteSpalte As Integer
Dim Matrix() As Variant
Dim MatrixZeile As Integer, MatrixSpalte As Integer

LetzteZeile = ActiveWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
LetzteSpalte = ActiveWorkbook.ActiveSheet.Cells(1, 256).End(xlToLeft).Column
ReDim Matrix(LetzteZeile, LetzteSpalte)
Matrix = ActiveWorkbook.ActiveSheet.Range("A1:" & ActiveSheet.Cells(LetzteZeile, LetzteSpalte).Address(RowAbsolute:=False, ColumnAbsolute:=False)).Value

MatrixZeile = 1
MatrixSpalte = 1
For Each element In Matrix
    If element = "0" Then
        ActiveWorkbook.ActiveSheet.Cells(MatrixZeile, MatrixSpalte).Interior.Color = vbRed
    End If
    
    If MatrixZeile = LetzteZeile Then
        MatrixSpalte = MatrixSpalte + 1
        MatrixZeile = 0
    End If
    MatrixZeile = MatrixZeile + 1
Next element
End Sub

Autor: m.s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort!

Leider kenne ich mich mit VBA gar nicht aus, kannst du mir erklären wie 
ich es einfüge und benutze?

MfG

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm erkennt aber nicht deine usprüngliche Frage mit fünf 0en in 
Reihe usw.
Sollen es denn immer fünf 0en in Reihe sein oder ändert sich die Zahl 
auch dynamisch mit der Feldgröße?

Ich kann dir dann eine fertige Excel hier hochladen

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Feldgröße ist Dynamisch. Die gesucht Zahl ist aber immer 0.

Ich möchte praktisch immer wissen, wie groß die größte zusammenhängende 
"Null-Folge" ist, sprich der höchsten Anzahl von zusammenhängenden 
Nullen.

Vielleicht könnte man das so lösen:

0 suchen, von 0 ausgehend alle 8 angrenzenden Zellen kontrollieren, ob 
dieser benachbarten Zellen ebenfalls 0 ist. Falls ja, Adresse dieser 0 
merken und das Selbe Prinzip weiterlaufen.
Dabei wäre nur drauf zu achten, dass man die Adresse der letzten 0 nicht 
berücksichtigt, das dies dann eine Endlosschleife wäre.
Leider kenne ich mich in VBA gar nicht aus :/

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Me schrieb:
> Ich kann dir dann eine fertige Excel hier hochladen

Das wäre super.

Wenn nicht nur Reihen, sondern auch Spalten und Diagonalen 
berücksichtigt werden könnten und die Feldgröße variabel ist, wäre dies 
perfekt.



Zu den Diagonalen habe ich hier etwas gefunden:
http://www.excelformeln.de/formeln.html?welcher=88
Variable Zeilen und Spalten lassen sich eigentlich über Summen ganz gut 
lösen, indem man die Startadresse vorgibt und als Endadresse zum 
Beispiel startadresse+8 eingibt, über indirekt().

Vielleicht hilft dir das

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
m. s. schrieb:
> Ich möchte praktisch immer wissen, wie groß die größte zusammenhängende
> "Null-Folge" ist, sprich der höchsten Anzahl von zusammenhängenden
> Nullen.

Ich glaube wir reden immer noch aneinander vorbei...
Du hast in deinem ersten Post ein Beispiel gemacht, in der du meintest 
wenn in einem 5x5 Feld 5 mal eine 0 in Reihe, Spalte oder diagonal 
vorkommt sell es gemeldet werden. In deinem "alles OK" Beispiel sind 3 
0en diagonal. Soll in dem Fall diese gemeldet werden. Wann gebau soll 
denn jetzt eigentlich ein Fehler kommen? Wenn eine ganze Reihe voll mit 
0en ist oder nur fünf am Stück? Deine jetzige Aussagen passen irgendwie 
nicht mehr zu deinem ersten Post...

Falls es dir wirklich nur um benachbarte 0en und deren benachbarte 0en, 
und deren benachbarte... Usw... geht... Das wird schwierig, daher das 
Skript das die alle 0en einfärbt und du sie eben selber noch zahlen 
musst

Autor: Maddin S. (maddin91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck dir mal mein Beispiel von oben an. mit den 5 nullen in einer 
Reihe/Spalte/Diagonale hat das nichts mehr zu tun. Er möchte, dass die 
maximale Anzahl zusammenhängender nullen zurückgegeben wird. Die können 
irgendwie zusammenhängen, solange sie sich quer, längs oder diagonal 
berühren.

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maddin S. schrieb:
> Guck dir mal mein Beispiel von oben an. mit den 5 nullen in einer
> Reihe/Spalte/Diagonale hat das nichts mehr zu tun. Er möchte, dass die
> maximale Anzahl zusammenhängender nullen zurückgegeben wird. Die können
> irgendwie zusammenhängen, solange sie sich quer, längs oder diagonal
> berühren.

Danke, so eine Aussage habe ich gesucht.
Und die Antwort ist...
Soetwas wird kaum realisierbar sein.
m.s. dein Ansatz ist richtig und so wollte ich es auch angehen, es ist 
jedoch "etwas" schwieriger als gedacht...
Außerdem werde ich dafür nicht bezahlt :D

Autor: Maddin S. (maddin91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Reden =)
auf den ersten Blick klingt es einfach. Auf den zweiten nicht mehr :D

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem 5x5 Quadrat würde es mir auch schon reichen.
Auch wenn nur Vertikal und Horizontal drin sind.
Diagonal wäre ein guter Zusatz, aber kein muss!

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es würde auch reichen, wenn mir jemand ein Programm zeigt, dass
in einem X mal X großem Feld (größe dürft ihr euch aussuchen) die anzahl 
der aneinander hängenden nullen zählt.

Dann würde ich mein variables Feld einfach mit vielen dieser Quadrate 
abdecken (bereich verschieben) .

Autor: Me (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
m. s. schrieb:
> Es würde auch reichen, wenn mir jemand ein Programm zeigt, dass
> in einem X mal X großem Feld (größe dürft ihr euch aussuchen) die anzahl
> der aneinander hängenden nullen zählt.
>
> Dann würde ich mein variables Feld einfach mit vielen dieser Quadrate
> abdecken (bereich verschieben) .

Du bist gut... Programm zeigen und dann nicht mal wissen wie man einen 
VBA Code in Excel einfügt...

Was auch immer du jetzt schon wieder mit der horizontalen und vertikalen 
meinst...
Was willst du denn jetzt eigentlich??!!!
Aneinanderreihen ODER horizontal, vertikal und diagonal??
Das ist was komplett unterschiedliches!


Ich glaube du solltest dir erst mal im klaren sein was du eigentlich 
willst und nicht jeden Tag etwas anderes fordern...


Für die Aneinanderreihung aller 0en habe ich jetzt eine funktionierede 
Datei, welche auch anzeigt wie viele 0en aneinandergereiht sind

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Me schrieb:
> Was auch immer du jetzt schon wieder mit der horizontalen und vertikalen
> meinst...
> Was willst du denn jetzt eigentlich??!!!
> Aneinanderreihen ODER horizontal, vertikal und diagonal??
> Das ist was komplett unterschiedliches!

Naja, ich sag es mal so:
Das horizontale und vertikale , bzw Zeilen und Spaltenweise prüfen, wie 
viele Nullen aneinander hängen, ist sozusagen eine Vereinfachung der 
anderen Version.

Da zu der komplexen Aufgabe niemand ein Idee hatte, wollte ich wissen, 
ob vielleicht jemand diese Vereinfachung lösen kann.

Me schrieb:
> Für die Aneinanderreihung aller 0en habe ich jetzt eine funktionierede
> Datei, welche auch anzeigt wie viele 0en aneinandergereiht sind

Du hast das hier aber super gelöst.
Das ist genau das was ich brauche! Sieht super aus!
Wie hast du es gemacht?

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Komplett in VBA gelöst.
Als erstes wird jeder 0 ein Index zugewiesen, also eine fortlaufende 
Zahl.
Im zweiten Schritt prüfe ich dann jedes benachbarte Feld jedes einzelnen 
Felds auf eine 0 ab. Ist es eine 0, dann bekommen sie den gleichen Index 
wie sie selbst.
Ist das erledigt, gibt es immer noch zu viele Indizes, daher lasse ich 
den Vorgang öfters durchlaufen.
Danach werden größere benachbarte Felder zusammengefügt indem alle 
Indizes eines Feldes gleich dem andern Feld gesetzt werden.
Anschließend werden dann die Indizes neu nummeriert, sodass diese wieder 
eine fortlaufend Nummer sind. Jedes 0er Feld hat nun seine eigene 
Indexnummer.
Anhand dieser Nummer wird dann die Farbe bestimmt.
Fehlt nur noch die Anzahl der 0en pro Index zu zählen und das in das 
jeweilige Excel-Feld zu schreiben.

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nicht schlecht!
Eine gute Herangehensweise.

Kannst du mir die Datei bitte hochladen?
Ich weiß in VBA nämlich nicht so bescheid

Autor: Me (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Feld kann beliebig groß sein.
Button zum starten des Makros ist zwischen Zeile 1 und 2 bei Spalte AA 
bis AD.

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Respekt!
Das ist genau das, was ich gesucht habe!
Vielen Dank für deine Mühe, ich weiß diese zu schätzen!

Du hast deinen Code mit einem Kennwort versehen, ich würde diesen Code 
gerne um einige Zeilen und Spalten erweitern, verrätst du mir das 
Kennwort?

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja habe ich.
Wie gesagt, dein Feld kann so groß sein wie es will.
Es wird immer erkannt und das Makro skaliert dynamisch mit. Nur die 
Makrolaufzeit wird logischerweise eben höher.
Du musst keine Spalten oder Zeilen hinzufügen...
Und nein, sonst hätte ich es nicht so eingestellt :)

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Me schrieb:
> Es wird immer erkannt und das Makro skaliert dynamisch mit.

Das ganze funktioniert aber nicht, wenn sich in leeres Feld dazwischen 
befindet.
Wenn ich in Zeile 38 ein paar Nullen einfüge, aber ein Feld freilasse, 
dann funktioniert das ganze nicht mehr

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst auch nicht einfach eine Zeile oder Spalte freilassen, da ich 
auf leere Zeilen/SPalten abfrage und so die Feldgröße bestimme... 
Außerdem kannst du da nicht einach im Code eine Spalten kunzufügen... 
hahaha
m.s. schrieb:
> Es ist nur eine Tabelle auf einem Arbeitsblatt.
Hier das hast du geschreiben und so habe ich es umgesetzt!
Es war nie die Rede von Leerzeilen un deiner Tabelle...

Wo wir wieder bei dem Punkt sind, klar und präzise Forderungen stellen 
und die NICHT im Laufe des Projekts oder noch besser nach Abschluss 
ändern...

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Me schrieb:
> Wo wir wieder bei dem Punkt sind, klar und präzise Forderungen stellen
> und die NICHT im Laufe des Projekts oder noch besser nach Abschluss
> ändern...

Nicht meckern.... " eine Tabelle" heißt nicht, dass in jeder Zelle etwas 
stehen muss ;)

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und ich weiß wirklich nicht, wieso du ein Passwort eingefügt hast.
Mittlerweile weiß jeder, dass man den Code in VBA einfach lesen kann, 
wenn man es in OpenOffice öffnet. Oder eben mit einem Hex Konverter 
entfernt.

Was wolltest du mit dem Passwort bezwecken?

Autor: Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du dich so gut auskennst hätte es kein Problem für dich sein können 
den ersten Code einfach in vba den debugger einzufügen... Dumm anstellen 
und eine fertige Datei fordern... Clever

Mach was du willst, entfernt das Passwort und änder den Code, ist mir 
egal... Ich lasse mich nicht für dumm verkaufen
Ich bin raus, jetzt muss du halt vba lernen, wäre sowieso nicht 
schlecht.

Und das nächste mal nimm dir das zu Herzen
Me schrieb:
> Wo wir wieder bei dem Punkt sind, klar und präzise Forderungen stellen
> und die NICHT im Laufe des Projekts oder noch besser nach Abschluss
> ändern...
Das hat nichts mit meckern zu tun

Autor: m. s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Musst nicht gleich zickig werden, war nur ein Hinweis ;)
Oder bist du jetzt verärgert weil den Code doch jeder sehen kann?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.