PDA

Vollständige Version anzeigen : Schleife für endliche Anzahl von Spaltenüberprüfung


N.i.C.o.L.e
05.04.2012, 09:43
Hi Folks,

programmieren ist für mich Neuland und ich hänge gerad etwas. Vielleicht könnt Ihr mir helfen.

Will die Aktion (siehe Code) für die Spalten E:SF ausführen lassen. Bekomme die Schleife einfach nicht hin. Will auch nicht dass in jeder ersten Zeile der Spalte eine 2 steht, sondern eine fortlaufende Zahl die sich immer pro Spalte um den Wert 1 erhöht (D1=1;E1=2,F1=3, usw.).


Es fehlt natürlich noch Sub() am Anfang und End Sub am Ende^^.

Lg Nicole

EarlFred
05.04.2012, 09:46
Hallo,

(siehe Code)

Es fehlt natürlich noch Sub() am Anfang und End Sub am Ende
...und der "Rest" dazwischen auch - aber der scheint ja nicht so wichtig zu sein.

Grüße
EarlFred

N.i.C.o.L.e
05.04.2012, 09:51
Sorry, dachte ich hatte ein Bild angehängt, aber das scheint nicht zu gehen.



Dim i As Integer
i = 1

With Range("E3")
If .Value <> "" Then
Range("E1") = i + 1
With Range("E3").End(xlDown)
If .Row <> Rows.Count Then Range("E1") = i + 1
End With
End If
End With

EarlFred
05.04.2012, 10:06
Hallo Nicole,

tut mir leid - ich erkenne nicht den tieferen Sinn des Codes, also was er eigentlich tun soll.

Grüße
EarlFred

N.i.C.o.L.e
05.04.2012, 10:20
Hi EarlFred,

wenn in Spalte E von Zeile 3 bis Ende Tabelle ein Wert gefunden wird, dann gib in E1 i+1 aus, wenn nichts gefunden wird, dann soll in E1 nichts stehen.

Es geht auch so, das ist wesentlich übersichtlicher.



With Range("E3").End(xlDown)
If .Row <> Rows.Count Then Range("E1") = i + 1
End With



Lg Nicole

EarlFred
05.04.2012, 10:36
Hallo Nicole,

keine Ahnung, ob ich das richtig verstanden habe:
Option Explicit

Sub nicole()
'für die Spalten E:SF ausführen
'wenn in Spalte E von Zeile 3 bis Ende Tabelle ein Wert gefunden wird, dann gib in E1 i+1 aus,
'wenn nichts gefunden wird, dann soll in E1 nichts stehen
Dim lngSpalte As Long
Dim lngCounter As Long

For lngSpalte = 5 To 15 'bis wohin auch immer
If Application.CountA(Range(Cells(3, lngSpalte), Cells(Rows.Count, lngSpalte))) > 0 Then
lngCounter = lngCounter + 1
Cells(1, lngSpalte) = lngCounter
End If
Next lngSpalte

End Sub

Knackpunkt ist: Was, wenn in Spalte E etwas steht (E1=1), in Spalte F nichts und in Spalte G steht wieder was (G1=2 oder 3?).

Grüße
EarlFred

N.i.C.o.L.e
05.04.2012, 13:39
Hi EarlFred,

danke, das hat das Problem gelöst!!!

"Knackpunkt" Im Normalfall sollte das nicht vorkommen, das in einer Spalte nichts steht.

Wollte das analog zu einer Zeilenabfrage machen, aber es scheint nicht zu reichen, wenn man lngSpalte mit lngZeile tauscht. Es wird dann in die Zeile 1 der Spalten bis 15 reingeschrieben. Dachte das ich das so schonmal gesehen hätte (IngZeile). Also wenn in Zeile 3 bis 15 der Spalte 2 Inhalt, dann wieder aufaddieren.

Danke erstmal für deine bisherige Hilfe.

Lg Nicole

EarlFred
05.04.2012, 14:04
Hallo Nicole,

Wollte das analog zu einer Zeilenabfrage machen, aber es scheint nicht zu reichen, wenn man lngSpalte mit lngZeile tauscht
kommt drauf an, wie die Anfrage aussieht...

"Knackpunkt" Im Normalfall sollte das nicht vorkommen, das in einer Spalte nichts steht.
und im "Nichtnormalfall" soll eben passieren: ... ?
Oder ist der Normalfall "immer" gegeben? Dann kann der Code vereinfacht werden.

Naja, egal. Funzt und gut ist.

Frohe Ostern.
EarlFred

N.i.C.o.L.e
05.04.2012, 14:45
Hi EarlFred,

das ist der Code. Der soll beginnenden mit der 3.Zeile der Spalte B eine Abfrage auf Inhalt machen, wenn "nichts drin" dann Abbruch , wenn Inhalt dann in 3. Zeile der Spalte A wieder 1 eintragen. Das dann für die ganzen Zeilen.

Sobald eine Spalte oder Zeile im definierten Bereich keinen Inhalt hat, kann von einer weiteren Prüfung abgesehen werden.



Dim lngZeile As Long
Dim lngCounter As Long

For lngZeile = 3 To 15
If Application.CountA(Range(Cells(2, lngZeile), Cells(Rows.Count, lngZeile))) > 0 Then
lngCounter = lngCounter + 1
Cells(1, lngZeile) = lngCounter
End If
Next lngZeile



Der Code überschreibt mir nur die 1.Zeile der jewiligen Spalten, also wird die Anweisung die du schon oben gepostet hast überschrieben.

Der Normalfall sollte immer gegeben sein. Da das eine Eingabemaske wird in der nur reinkopiert wird. Wenn allerdings eine Spalte ohne Inhalt zwischen 2 Spalten mit Inhalt wäre, wäre das ungünstig. In dem Fall müsst ein Warnhinweis erscheinen der auf die nicht gefüllte Spalte verweist.

Dir auch Frohe Ostern.

Lg Nicole