Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Jede Zeile abwechselnd eine 1 oder 2 schreiben

Jede Zeile abwechselnd eine 1 oder 2 schreiben
04.04.2014 09:05:16
Marc
Guten Morgen,
Ich erstelle gerade ein Sheet zur Schichteinteilung, dazu hat meine Userform 2 Comboboxen. Combobox1 für die Namen, die zweite für die Schichteinteilung.
die zweite wird gefüllt mit
- nur Früh
- nur Spät
- Gerade KW Spät
- Ungerade KW Spät
nur Früh und Spät funktioniert soweit. Mein Problem liegt in Gerade und Ungerade :/
Der Code läuft zwar durch aber er braucht verdammt lange und er erkennt die Prüfung nicht, also ob 1 oder 2 in der .Range("E12:E70") steht.
Geht ihr da ne bessere Lösung? Danke schon mal und schönes WE
Gruß
Private Sub CommandButton1_Click()
Dim rngBer As Range, rngC As Range
With Sheets("Schichteinteilung")
For i = 12 To 70
If ComboBox2.Value = "nur Frühschicht" Then
.Cells(i, Rows(1).Find(ComboBox1).Column) = 1
Else
End If
If ComboBox2.Value = "nur Spätschicht" Then
.Cells(i, Rows(1).Find(ComboBox1).Column) = 2
Else
End If
If ComboBox2.Value = "Gerade KW Spät" Then
Set rngBer = .Range("E12:E70")
For Each rngC In rngBer
If rngC.Value = 2 Then
.Cells(i, Rows(1).Find(ComboBox1).Column) = 2
ElseIf rngC.Value = 1 Then
.Cells(i, Rows(1).Find(ComboBox1).Column) = 1
End If
Next
End If
Next
End With
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Jede Zeile abwechselnd eine 1 oder 2 schreiben
04.04.2014 09:25:13
fcs
Hallo Marc,
Geschwindigkeit:
Wahrscheinlich werden beim Eintragen der Werte durch durch das Makro ständig Neuberechnungen durchgeführt.
Schalte den Berechnungsmodus zu Beginn de Makros auf manuell
Application.Calculation = xlCalculationManual
und am Ende wieder auf Automatisch.
Problem Zahlenvergleich:
Evtl. stehen die Zahlen als Text in den Zellen des Bereichs E12:E70, bzw. der Bereich hat Zahlenformat "Text".
Ersetze mal
rngC.Value
durch
Val(rngC.Value)
Gruß
Franz

Anzeige
AW: Jede Zeile abwechselnd eine 1 oder 2 schreiben
04.04.2014 09:37:05
Marc
Hey,
also dank schon mal für den Tip mit der Berechung ausschalten!! Ist um ein Vielfaches Besser.
BEi der Prüfung gab es leider kein Erfolg, es wird immer die 2 eingetragen :/

AW: Jede Zeile abwechselnd eine 1 oder 2 schreiben
04.04.2014 10:16:35
Marc
OKay also ich hab jetzt mal etwas rumgespielt und ich glaube das Problem ist das er nicht jede Zeile prüft. Er schreibt manchmal in die erste Zeile eine 1 und dann drauf im ganzen BEreich eine 2 :/
Komisch... ich verwende den Code wo anderes auch und da läuft er ohne Probleme

Anzeige
AW: Jede Zeile abwechselnd eine 1 oder 2 schreiben
04.04.2014 10:43:09
Marc
Ich habs :D
Der Fehler war hier:
Set rngBer = .Cells(i, 5)
Danke für deine Hilfe!!
Gruß und schönes WE

AW: Jede Zeile abwechselnd eine 1 oder 2 schreiben
04.04.2014 10:46:54
fcs
Hallo Marc,
irgendwie ist die Prüflogik für den Fall "Gerade KW Spät" nicht korrekt. Der Wert, der in der Zeile i eingetragen wird, richtet sich immer nach dem Wert in Zelle E70, denn das ist immer die letzte Zelle, die verglichen wird. Steht dort eine 1 wird überall eine 1 eingetragen, steht dort eine 2 dann überall eine 2.
Ich würde es mal folgendermaßen probieren. Ich hab dabei die Prüfungen in eines etwas überischtlichere Forme gebracht.
Gruß
Franz
Private Sub CommandButton1_Click()
Dim rngBer As Range, rngC As Range, i As Long
Dim wksSchicht As Worksheet
Set wksSchicht = Sheets("Schichteinteilung")
Application.Calculation = xlCalculationManual
With wksSchicht
For i = 12 To 70
'With .Cells(i, Rows(1).Find(ComboBox1).Column)
With .Cells(i, .Rows(1).Find(ComboBox1).Column)  'korrekter Bezug für Rows(1)  ?
Select Case ComboBox2.Value
Case "nur Frühschicht"
.Value = 1
Case "nur Spätschicht"
.Value = 2
Case "Gerade KW Spät"
Select Case wksSchicht.Cells(i, 5).Value 'Wert in Spalte E
Case 2
.Value = 2
Case 1
.Value = 1
End Select
End Select
End With
Next
End With
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
AW: Jede Zeile abwechselnd eine 1 oder 2 schreiben
04.04.2014 10:57:57
Rudi
Hallo,
       For Each rngC In rngBer
If rngC.Value = 2 Then
.Cells(i, Rows(1).Find(ComboBox1).Column) = 2
ElseIf rngC.Value = 1 Then
.Cells(i, Rows(1).Find(ComboBox1).Column) = 1
End If
Next

kann auch was anderes als 1 oder 2 drin stehen?
Wenn nicht, kannst du dir die Prüfung schenken.
       For Each rngC In rngBer
.Cells(i, Rows(1).Find(ComboBox1).Column) = rngC
Next

Außerdem kann man das dahin optimieren, dass du nicht 59 mal den Inhalt der CBx abfragst.
Wie ich deinen Code verstehe, sollte das auch so gehen:
Private Sub CommandButton1_Click()
Dim rngBer As Range, rngC As Range
Select Case ComboBox2
Case "nur Frühschicht"
With Sheets("Schichteinteilung")
.Cells(12, Rows(1).Find(ComboBox1).Column).Resize(59) = 1
End With
Case "nur Spätschicht"
With Sheets("Schichteinteilung")
.Cells(12, Rows(1).Find(ComboBox1).Column).Resize(59) = 2
End With
Case "Gerade KW Spät"
With Sheets("Schichteinteilung")
Set rngBer = .Range("E12:E70")
For Each rngC In rngBer
Select Case rngC
Case 1, 2
.Cells(12, Rows(1).Find(ComboBox1).Column).Resize(59) = rngC
End Select
Next
End With
End Select
End Sub

Was ist mit Ungerade KW spät?
Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Jede Zeile abwechselnd eine 1 oder 2 in Excel schreiben


Schritt-für-Schritt-Anleitung

  1. Öffne dein Excel-Dokument und gehe zu dem Arbeitsblatt "Schichteinteilung".

  2. Füge eine Userform mit zwei ComboBoxen hinzu: eine für die Namen und eine für die Schichteinteilung.

  3. In der zweiten ComboBox solltest du folgende Werte einfügen:

    • nur Früh
    • nur Spät
    • Gerade KW Spät
    • Ungerade KW Spät
  4. Verwende den folgenden VBA-Code, um die Werte abwechselnd in die Zellen E12 bis E70 einzufügen:

Private Sub CommandButton1_Click()
    Dim rngBer As Range, rngC As Range, i As Long
    Dim wksSchicht As Worksheet
    Set wksSchicht = Sheets("Schichteinteilung")
    Application.Calculation = xlCalculationManual
    With wksSchicht
        For i = 12 To 70
            With .Cells(i, .Rows(1).Find(ComboBox1).Column)
                Select Case ComboBox2.Value
                    Case "nur Frühschicht"
                        .Value = 1
                    Case "nur Spätschicht"
                        .Value = 2
                    Case "Gerade KW Spät"
                        .Value = .Cells(i, 5).Value 'prüfen auf E-Spalte
                End Select
            End With
        Next
    End With
    Application.Calculation = xlCalculationAutomatic
End Sub

Häufige Fehler und Lösungen

  • Langsame Ausführung: Wenn dein Makro langsam läuft, kann das daran liegen, dass Excel ständig Neuberechnungen durchführt. Setze den Berechnungsmodus am Anfang des Makros auf manuell:
Application.Calculation = xlCalculationManual

Vergiss nicht, ihn am Ende wieder auf automatisch zu setzen:

Application.Calculation = xlCalculationAutomatic
  • Zahlen als Text: Falls die Werte in E12:E70 als Text formatiert sind, kann es zu Problemen beim Vergleich kommen. Ersetze rngC.Value durch Val(rngC.Value).

  • Prüflogik: Achte darauf, dass die Logik für das Eintragen der Werte richtig ist. Wenn immer die letzte Zelle geprüft wird, kann das zu falschen Ergebnissen führen.


Alternative Methoden

Eine alternative Methode könnte die Verwendung von Excel-Formeln sein, um die Werte abwechselnd zu generieren. Zum Beispiel kannst du in Zelle E12 die Formel =IF(MOD(ROW(),2)=0,1,2) verwenden und diese nach unten ziehen, um eine abwechselnde 1 und 2 zu erzeugen. Dies ist besonders nützlich, wenn du keine Programmierung in VBA durchführen möchtest.


Praktische Beispiele

Angenommen, du möchtest die Schichteinteilung für eine Woche vorbereiten. Du kannst die ComboBoxen so einstellen, dass sie die Namen und die verfügbaren Schichten enthalten. Je nach Auswahl wird der oben genannte VBA-Code verwendet, um die Werte in den Zellen abwechselnd zu befüllen.

  • Beispiel: Wenn "nur Frühschicht" ausgewählt ist, werden in den Zellen E12 bis E70 durch den Code immer die 1 eingetragen.

Tipps für Profis

  • Nutze Select Case, um die Lesbarkeit deines Codes zu verbessern und die Anzahl der If-Abfragen zu reduzieren.
  • Überprüfe die Datenformate in deinen Zellen, um sicherzustellen, dass sie mit deinem VBA-Code kompatibel sind.
  • Betreibe eine Fehlerbehandlung, um unvorhergesehene Probleme zu vermeiden, indem du On Error Resume Next verwendest.

FAQ: Häufige Fragen

1. Kann ich auch andere Zahlen als 1 oder 2 verwenden?
Ja, du kannst die Werte im VBA-Code nach deinen Bedürfnissen anpassen.

2. Wie kann ich die Schichteinteilung in anderen Excel-Versionen anwenden?
Der VBA-Code funktioniert in den meisten modernen Excel-Versionen, achte jedoch darauf, dass dein Excel Makros unterstützt.

3. Was mache ich, wenn die ComboBox nicht funktioniert?
Stelle sicher, dass die ComboBoxen korrekt mit den Werten gefüllt sind und der Code richtig auf die ComboBox zuzugreifen weiß.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige