Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
648to652
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
648to652
648to652
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Nichtgefüllte Zellen per VBA füllen
10.08.2005 07:49:40
Wolfgang
Hallo,
den untenstehenden Code hat mir Micha überlassen (leider finde ich den Beitrag nicht mehr wieder). Er soll bewirken, dass ab einer markierten Zelle in Spalte A die vorgegebene Anzahl von Zellen (von Spalte B bis T) rechts neben der markierten Zelle automatisch gefüllt werden. Grundsätzlich funktioniert das auch. Ich hätte aber noch gerne Änderungen vorgenommen:
-wie muß der Code umgestellt werden, damit nur sichtbare Zellen/Zeilen bedient werden (ich habe etliche Zellen ausgeblendet, die momentan auch mit dem X ausgefüllt werden) ?
-was muß weiterhin umgestellt werden, damit bereits gefüllte Zellen in dem Bereich übersprungen werden und die Anzahl der vorgegenen X dennoch weiterrechnet?
-ist es möglich, dass das Gleiche noch z.B. für 20 Zeilen weiter ebenfalls noch wieder erfolgt. Bsp.: der markierte Bereich ist A6, die X werden ab B6, bis die Anzahl erreicht ist, gesetzt (bereits belegte Zellen werden übersprungen);
Im Anschluß wäre es nun schön, wenn 20 Zeilen weiter, also in dem Beispiel dann ab A26 die gleiche Anzahl X wieder gesetzt werden könnten.
Ich weiß, dass ich bislang immer ein gute Hilfestellung aus diesem Forum erhalten habe und würde mich über weitere Hilfe erneut freuen.
Gruß - Wolfgang
Hier der Code von Micha:

Sub ausfuellen()
Dim reihe As Long, spalte As Long, wieviel As Long, weg As Long
reihe = Selection.Row  'beginnt in der markierten Spalte
wieviel = InputBox("Anzahl X")
weg = 0
Do While weg <= wieviel
For spalte = 2 To 20
If Cells(reihe, spalte) <> "" Then
Else
Cells(reihe, spalte) = "X"
'weg = weg + 1      'wenn nur gesetzte X zählen
End If
weg = weg + 1           'wenn jede Zelle zählt
If weg >= wieviel Then Exit For
Next
reihe = reihe + 1
Loop
End Sub

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nichtgefüllte Zellen per VBA füllen
10.08.2005 09:58:13
Volker
Hallo Wolfgang,
bin nicht sicher, ob ich dich richtig verstanden hab. In dieser Variante werden ausgeblendete Spalten übersprungen und, wenn ein "X" gesetzt wird, 20 Zeilen tiefer auch eins gesetzt.

Sub ausfuellen()
Dim reihe, spalte, wieviel,offset As integer
reihe = Selection.Row  'beginnt in der markierten Spalte
wieviel = InputBox("Anzahl X")
spalte = 2
Offset = 20
Do While wieviel > 0 Or spalte < 21
If Cells(reihe, spalte) <> "" And Columns(spalte).Hidden = False Then
Cells(reihe, spalte) = "X"
Cells(reihe + Offset, spalte) = "X"
wieviel = wiviel - 1
End If
spalte = spalte + 1
Loop
End Sub

Gruß
Volker
Anzeige
AW: Nichtgefüllte Zellen per VBA füllen
10.08.2005 10:30:34
Wolfgang
Hallo Volker,
zunächst herzlichen Dank für Deine schnelle Rückantwort. Ich habe den Code in eine Mappe kopiert und in dem Beispiel die Zeile 3 ausgeblendet, Zelle A1 markiert und in der Eingabemaske gesagt, 25 X zu setzen. Nun will VBA "debuggen" und sagt, es läge ein Anwendungs- oder objektorientierter Fehler vor. In VBA selbst zeigt er dann z.B. bei Spalte die Spalte 257, reihe 1 und offset 20 an. Muß ich evtl. noch etwas anderes voher berücksichtigen/ändern bzw. anpassen? - Wäre für Deine Rückmeldung sehr dankbar.
Gruß - Wolfgang
P.S.
den Tippfehler bei wieviel habe ich dabei korrigiert.
Anzeige
AW: Nichtgefüllte Zellen per VBA füllen
10.08.2005 10:54:55
Volker
Das kommt davon, wenn man seinen eigenen Code nicht testet (schäm)
Die beiden Bedingungen der while-Schleife müssen verundet statt verodert werden und
statt Cells(reihe, spalte) "" muß es natürlich Cells(reihe, spalte) = "" lauten.
Hier noch mal das ganze, nun sogar getestet.

Sub ausfuellen()
Dim reihe, spalte, wieviel, offset As Integer
reihe = Selection.Row  'beginnt in der markierten Spalte
wieviel = InputBox("Anzahl X")
spalte = 2
offset = 20
While wieviel > 0 And spalte < 21
If Cells(reihe, spalte) = "" And Columns(spalte).Hidden = False Then
Cells(reihe, spalte) = "X"
Cells(reihe + offset, spalte) = "X"
wieviel = wieviel - 1
End If
spalte = spalte + 1
Wend
End Sub

Gruß
Volker
Anzeige
AW: Nichtgefüllte Zellen per VBA füllen
Wolfgang
Hallo Volker,
erneut herzlichen Dank für Deine Unterstützung. Ich habe den Code getestet. Soweit läuft er. In Deinem Beispiel werden die X ausschließlich innerhalb der markierten Zeile von B-T gesetzt. Darüber hinaus werden die X ignoriert bzw. nicht mehr gesetzt. Hast Du da evtl. eine Idee, was umgestellt werden müßte, damit, wenn T in der Startzeile erreicht ist, die nächsten X wieder in der folgenden Zeile bei B beginnend usw. gesetzt werden, bis die vorgegebene Anzahl (z.B. 100 X) erreicht ist. In dem Beispiel von Micha klappt das fast, wüßte aber nicht, die beiden Codes zu kombinieren.
Siehst Du weiterhin noch eine Möglichkeit, dass bereits gefüllte Zellen innerhalb dieses Bereiches dann übersprungen werden und Excel trotzdem die Vorgaben herunterzählt, ohne die anderweitig gefüllte Zelle mitzuzählen. Ich habe das getestet, die Zelle wird auch übersprungen, aber offensichtlich aber als vermeintliche "X-Zelle" mitgezählt. In den nächsten 20 Zeilen weiter bleibt dann die anderweitig "besetzte" Zelle leer. Ich hoffe, ich nerve Dich nicht mit meinen Fragen und würde mich über weitere Rückmeldung sehr freuen.
Gruß - Wolfgang
Anzeige
AW: Nichtgefüllte Zellen per VBA füllen
10.08.2005 11:51:48
Volker
Wenn ich richtig verstanden habe, sollen bestehende "X" von den zu schreibenden abgezogen werden, gelle?
Gilt das schon in der markierten Zeile oder erst ab der nächsten?
Ich gehe mal von ersterem aus. Vorhandene "X" in ausgeblendeten Spalten werden auch mitgezählt.

Sub ausfuellen()
Dim reihe, spalte, wieviel, offset As Integer
reihe = Selection.Row  'beginnt in der markierten Spalte
wieviel = InputBox("Anzahl X")
spalte = 2
offset = 20
While wieviel > 0
If Cells(reihe, spalte) = "X" Then
wieviel = wieviel - 1
End If
If Cells(reihe, spalte) = "" And Columns(spalte).Hidden = False Then
Cells(reihe, spalte) = "X"
Cells(reihe + offset, spalte) = "X"
wieviel = wieviel - 1
End If
If spalte = 20 Then
spalte = 2
zeile = zeile + 1
Else
spalte = spalte + 1
End If
Wend
End Sub

Unterschied zu vorher: einzige Abbruchbedingung für die Schleife ist nur noch das Erreichen der vorgegebenen "X". Die Spalte wird, wenn sie 20 erreicht hat, wieder auf 2 gesetzt.
Noch mal ein Tip für Anfänger: Du kannst den Code Zeilenweise im Editor ausführen, indem du F8 drückst und dabei beobachten, was in der Tabelle geschieht. Wenn du mit dem Cursor auf eine Variable im Code gehst, wird dir deren aktueller Wert angezeigt.
Und keine Scheu zu fragen, wenn das nervend wäre, würde ich es nicht machen.
Außerdem hat jeder mal klein angefangen.
Gruß
Volker
Anzeige
AW: Nichtgefüllte Zellen per VBA füllen
10.08.2005 13:38:14
Wolfgang
Hallo Volker,
ich habe Deinen Hinweis mit F8 aufgegriffen, ist ja wirklich gut, hierüber Schritt für Schritt nachzuvollziehen.
Ich habe dann den geänderten Code von Dir getestet:
Irgendetwas mache ich da wohl falsch. Ich habe A2 markiert und vorgegeben, 25 Zellen mit X versehen zu wollen (würde ich das per Hand ausfüllen käme ich somit von B2 bis G3). Mit Deinem Code füllt mir Excel aber immer nur (im Beispiel) von B2 bis T2 und in der Folge die 20 Zeilen darauf von B22 bis T 22 auf. Ich habe bewußt jetzt keine Zeile ausgeblendet oder innerhalb des besagten Bereiches Zellen mit anderem Text versehen (die dann ja ignoriert werden sollten). Was müßte da anders gemacht werden (bzw. was mache ich evtl. verkehrt) damit, wie im Beispiel beschrieben, auch noch die Zellen bis G3 bzw. bis G 23 aufgefüllt werden ?
In meiner Frage zu den ausgeblendeten Zeilen ging es mir darum, dass die ignoriert werden und nicht mit X gefüllt werden, sondern tatsächlich nur die sichtbaren Zeilen gefüllt werden. D.h., wenn ich in Zeile 2, also ab B2 beginne und Zeile 3 ist ausgeblendet, dass dann die restlichen X nicht bis G3, um im Beispiel zu bleiben, sondern dann bis G 4 gesetzt werden.
Danke schon jetzt wieder für Deine Mühen und für Dein Angebot, Dich mit meinen Fragen ansprechen zu dürfen.
Gruß - Wolfgang
Anzeige
AW: Nichtgefüllte Zellen per VBA füllen
10.08.2005 14:11:12
Volker
Hallo Wolfgang,
ersetze "zeile=zeile+1" (die Variable kommt gar nicht vor) durch "reihe=reihe+1", dann gehts. Hatte den Code nicht getestet und aus alter Gewohnheit "zeile" statt "reihe" getippt.
Gruß
Volker
AW: Nichtgefüllte Zellen per VBA füllen
10.08.2005 16:15:40
Wolfgang
Hallo Volker,
es klappt soweit! - Die nachfolgenden Zeilen werden nun auch allesamt so aufgefüllt. Bis dahin bin ich schon sehr froh, dass es klappt.
Ich werde mich nun zunächst noch mit weiteren Fragen, die noch auftauchen werden bzw. die ich so noch nicht formulieren kann, befassen und mich sicherlich wieder erneut an das Forum wenden müssen. Dank Deiner Hilfestellung ist schon wieder eine Hürde geschafft und ich durfte wieder einiges hinzulernen. In dem Sinne nochmals recht herzlichen Dank und weiterhin alles Gute.
Gruß - Wolfgang
Anzeige
Gern geschehen (o.T.)
10.08.2005 16:17:38
Volker
.
AW: sorry Volker - noch eine Frage
10.08.2005 16:40:24
Wolfgang
Hallo Volker,
entschuldige, dass ich mich doch noch wieder melde. Ich hatte noch ein wenig weiter getestet und nun noch die Version mit den ausgeblendeten Zeilen versucht. A2 markiert, Zeile 3 ausgeblendet und somit nicht sichtbar. Ab B2, bis T2 wurden die X gesetzt, die weiteren (ich hatte wieder 25 angegeben)in der ausgeblendeten Zeile 3. Wie kann man realisieren, dass genau die ausgeblendeten Zeilen übersprungen werden und im Beispiel dann anstatt in Zeile 3 die X in Zeile 4, als nächstsichtbare Zeile, fortgesetzt werden ? - Danke schon jetzt auch wieder für Deine Mühewaltung und Rückantwort sowie
herzliche Grüße - Wolfgang
Anzeige
AW: sorry Volker - noch eine Frage
11.08.2005 08:23:15
Volker
Moin Wolfgang,
das war wohl ein Mißverständniß. Ich bin davon ausgegangen, das du Spalten und nicht Zeilen ausblendest. Diese Version überspringt ausgeblendete Zeile UND Spalten.
Wenn du nur die Zeilen ausblendest, mußt du "And Columns(spalte).Hidden = False" löschen
Ich hab für die Spaltenanzahl noch eine Konstante namens "spalten" eingeführt und erstmal mit 20 belegt. Kannst du bei Bedarf ändern.

Sub ausfuellen()
Dim reihe, spalte, spalten, wieviel, offset As Integer
reihe = Selection.Row  'beginnt in der markierten Spalte
While Rows(reihe).Hidden = True 'falls die markierte Zeile verborgen ist
reihe = reihe + 1
Wend
wieviel = InputBox("Anzahl X")
spalte = 2
spalten = 20
offset = 20
While wieviel > 0
If Cells(reihe, spalte) = "X" Then
wieviel = wieviel - 1
End If
If Cells(reihe, spalte) = "" And Columns(spalte).Hidden = False Then
Cells(reihe, spalte) = "X"
Cells(reihe + offset, spalte) = "X"
wieviel = wieviel - 1
End If
If spalte = spalten Then
spalte = 2
reihe = reihe + 1
While Rows(reihe).Hidden = True
reihe = reihe + 1
Wend
Else
spalte = spalte + 1
End If
Wend
End Sub

Gruß
Volker
Anzeige
AW: funktioniert fast -Danke
11.08.2005 10:37:57
Wolfgang
Hallo Volker,
ich kenne noch nicht die Gepflogenheiten des Forums und wußte somit nicht, ob ich Dich heute noch wieder erreichen kann. Ich habe somit (sorry) noch wieder einen erneuten Beitrag zum gleichen Thema ins Forum gestellt. Somit umso mehr meinen herzlichen Dank für Deine erneute Rückmeldung. Ich habe den Code, so wie Du es erklärst, umgestellt und es funktioniert nun (zumindest für die erste "Serie"; In der Folge (ich nehme an, das wird über offset gesteuert), also 20 bzw. in dem anderen Beitrag habe ich auf 30 umgestellt, Zeilen weiter werden die verdeckten Zeilen noch wieder gefüllt. Hast Du da evtl. noch eine Idee, was da umgestellt werden müßte? - In dem Beitrag von heute hatte ich dann auch gefragt, ob es noch eine Möglichkeit gibt, noch mehr "Serien" einzubauen, d.h., dass z.B. nach 20, 40, 60, 80, 100 Zeilen jeweils die gleiche Anzahl erscheint, dabei aber auch die jeweils verdeckten Zeilen nicht bedient werden. Wenn Du da auch noch eine Idee hast, wäre ich Dir für eine Info hierzu auch sehr verbunden.
Gruß - Wolfgang
AW: funktioniert fast -Danke
11.08.2005 11:31:16
Volker
Wegen dem neuen Beitrag zum selben Thema findet sich bestimmt irgendein Naseweis, der dich drauf anspricht. Konntest du ja nicht wissen.
Zur Frage: Du möchtest keine "X" in verdeckten "offset"-Zeilen und mehr als eine "offset"-Zeile. By the way: Sollen die Zellen in den "offset"-Zeilen auf Inhalt geprüft werden?
Vorschlag: führe für Anzahl der offsets und offset eine Abfrage über InputBox durch, Den Text kannst du dir anpassen und "offset=20" mußt du dann natürlich löschen.
offset = InputBox("Zeilenversatz ?")
offset_cnt=InputBox("Anzahl der Duplikate ?")
Hier ist die Stelle wo du die beiden Variablen einbauen mußt.
If Cells(reihe, spalte) = "" And Columns(spalte).Hidden = False Then
Cells(reihe, spalte) = "X"
Cells(reihe + offset, spalte) = "X" 'hier wird "X" in offset-Zeile eingetragen
wieviel = wieviel - 1
End If
Um die Zeile mit dem Kommentar herum mußt eine Schleife bauen für alle Zeilen von
Zeilenindex "reihe + offset" bis "reihe + offset_cnt*offset"
Darin eine Abfrage, ob die entspr. Zeile sichtbar und die entsprechende Zelle leer ist:
If Cells(reihe, spalte) = "" And Columns(spalte).Hidden = False Then
Cells(reihe, spalte) = "X"
For i = reihe + offset To reihe + offset_cnt * offset step offset
If Rows(i).Hidden = False And Cells(i, spalte) = "" Then
Cells(i, spalte) = "X"
End If
Next
wieviel = wieviel - 1
End If
Wenn es dir bei Experimentieren zu mühsam ist, die "X" wieder zu löschen, kannst du das hier nehmen

Sub X_weg()
Cells.Replace what:="X", Replacement:=""
End Sub

Gruß
Volker
AW: funktioniert fast -Danke
11.08.2005 12:02:18
Wolfgang
Hallo Volker,
erneut herzlichen Dank für Deine Rückmeldung und erneuten Aus/-Umarbeitungen. Ich werde mich da zunächst 'mal "durchbeißen" und mich sicherlich noch wieder zurückmelden. Zumal Deine Vorschläge ja Alternativen (im Handling) bringen, an die ich so noch gar nicht gedacht habe. In dem Sinne nochmals recht herzlichen Dank.
Gruß - Wolfgang

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige