Microsoft Excel

Herbers Excel/VBA-Archiv

Excel VBA

Betrifft: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 10:06:57

Hallo,

poste hier das erste Mal. Hab folgendes Problem. Ich möchte die Lerrzellen in der Zeile zählen und jedesmal wenn die Bedingung erfüllt wir den Wert von S7 um 1 erhöhen. Falls die Abfrage auf eine Zelle mit eienm Wert trifft soll die Abfrage stoppen. Das klappt soweit auch ganz gut. Nun benötige ich das aber bis Zeile 200. Gibt es eine Möglichkeit das ich den Code nicht 200x tippen muß?

Danke im voraus.

Heiko

Sub leere_zählen()

Application.ScreenUpdating = False

If Range("q7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("p7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("o7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("n7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("m7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("l7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("k7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("j7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("i7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("h7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("g7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("f7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("e7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
If Range("d7").Value = 0 Then
[s7] = [s7] + 1
Else
    GoTo SP7
End If
SP7:
Application.ScreenUpdating = True

End Sub

  

Betrifft: AW: Excel VBA von: hary
Geschrieben am: 24.11.2014 10:39:44

Moin
Versteh ich dich richtig, bei jeder Null eins plus?

Sub Versuch()
Dim i As Long
With Worksheets("Tabelle1") 'Name anpassen
 For i = 7 To 200
  .Range("S" & i) = .Range("S" & i) + Application.CountIf(.Range("D" & i & ":Q" & i), 0)
 Next
End With
End Sub

gruss hary


  

Betrifft: AW: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 12:09:29

Danke für die schellen Antworten.

Ich bin VBA Anfänger und versuche mir immer was zusammen zu basteln. Ich hatte schon was von Schleifen gehört, nur wusste ich nicht wie ich es umsetzte.

Zur Frage von Hary eigeinlich 1+ bei jedem Leerfeld.


  

Betrifft: AW: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 12:27:59

Sorry habe eben bemerkt das ich jeden einzel antwotrten muß.Das mit den Schleifen war nicht für dich.


  

Betrifft: AW: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 12:43:42

Ich hab mich wahrscheinlich nicht richtig ausgedrückt. Ich möchte nicht alle leeren Zellen zählen sondern die die leeren Zellen von rechts nach links bis eine Zelle mit einem Eintrag kommt. In Spalte S (z.B.) brauche ich dann die Auswertung für jede Zeile.


  

Betrifft: AW: Excel VBA von: hary
Geschrieben am: 24.11.2014 13:03:34

Moin
Passt es so?

Sub LeereVonRechts()
Dim letzte As Long
Dim i As Long
With Worksheets("Tabelle1") 'Blattname evtl anpassen
  For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
    letzte = .Cells(i, 9).End(xlToLeft).Column + 1
    .Cells(i, 19) = 10 - letzte
  Next
End With
End Sub

gruss hary


  

Betrifft: AW: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 13:32:39

Danke Hary,

das funktioniert so prima. Was muß ich ändern wenn ich sowohl die Spaltenzahl als auch die Zeilenzahl ändern möchte.
Das war nur ein Beispiel (Auszug aus meiner Tabelle).

Maine Daten stehen eigentlich von Spalte D bis Q und in S ist die Auswertung.
Die Zeilen 2 bis 200 muß ich auswerten.


  

Betrifft: AW: Excel VBA von: hary
Geschrieben am: 24.11.2014 14:03:27

Moin
In SpalteC stehen die Pumpen.Hilft dir das weiter?

Sub LeereVonRechts()
Dim letzte As Long
Dim i As Long
With Worksheets("Tabelle1") 'Blattname evtl anpassen
  For i = 2 To .Cells(Rows.Count, 3).End(xlUp).Row 'letzte belegte Zellennummer in SpalteC
    letzte = Application.Max(3, .Cells(i, 17).End(xlToLeft).Column) ' 17 = SpalteQ
    .Cells(i, 19) = 17 - letzte
  Next
End With
End Sub

gruss hary


  

Betrifft: AW: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 14:14:00

Danke funktioniert super. Sehe ich das richtig das du das dynamisch angelegt hast? Also wenn Zeilen dazu kommen wird automatisch die Letzte gesucht?
Sorry bin da nicht so der Profi. Hast mir sehr weiter geholfen.


  

Betrifft: AW: Excel VBA von: hary
Geschrieben am: 24.11.2014 14:18:04

Moin Heiko
"Also wenn Zeilen dazu kommen wird automatisch die Letzte gesucht?"
Jepp, so ist es.
gruss hary


  

Betrifft: AW: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 10:43:29

Hier vieleicht noch ein Auszug der Tabelle. Ich muß die leeren Zellen von rechts nach links zählen bis ich auf einen Wert treffe. Die Anzahl gibt dann die letzte GÜ an.
https://www.herber.de/bbs/user/93974.xlsm



  

Betrifft: AW: Excel VBA von: Rudi Maintaire
Geschrieben am: 24.11.2014 10:44:30

Hallo,
schon mal was von Schleifen gehört?

Sub aa()
  Dim z As Long, s As Long
  For z = 7 To 200
    For s = 4 To 17
      If Cells(z, s) = "" Then
        Cells(z, 19) = Cells(z, 19) + 1
      Else
        Exit For
      End If
    Next s
  Next z
End Sub

Gruß
Rudi


  

Betrifft: AW: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 12:30:33

Hallo Rudi,

ich hab schon mal was gehört von Schleifen, aber umsetzen kann ich das nicht. Muß ich hier jeden einzeln antworten oder könnt ihr auch das lesen was die anderen zu diesem Thema schreiben?

Ich hab mich wahrscheinlich nicht richtig ausgedrückt. Ich möchte nicht alle leeren Zellen zählen sondern die die leeren Zellen von rechts nach links bis eine Zelle mit einem Eintrag kommt. In Spalte S (z.B.) brauche ich dann die Auswertung für jede Zeile.
Wie schon geschrieben bin ich kein VBA Profi. Bitte zu eueren Antworten noch ganz kurz erklären wie ich den Code anwende. Im Moment habe ich mir nur ein symbol im Schnellzugriff eingerichtet, wo ich das Makro abrufe.

Gruß Heiko


  

Betrifft: AW: Excel VBA von: Rudi Maintaire
Geschrieben am: 24.11.2014 12:54:11

Hallo,
oder könnt ihr auch das lesen was die anderen zu diesem Thema schreiben?
selbstverständlich. Du kannst es doch auch.

Sub aa()
  Dim z As Long, s As Long
  For z = 7 To 200
    For s = 17 To 4 Step -1
      If Cells(z, s) = "" Then
        Cells(z, 19) = Cells(z, 19) + 1
      Else
        Exit For
      End If
    Next s
  Next z
End Sub
Gruß
Rudi


  

Betrifft: AW: Excel VBA von: Matthias L
Geschrieben am: 24.11.2014 10:53:21

Hallo

Option Explicit
Sub leere_zählen()
Dim MyRow&, MyCol&
Application.ScreenUpdating = False
For MyRow = 7 To 15 'Zeile 7-15 anpassen
 For MyCol = 4 To 17
  If Cells(MyRow, MyCol) = "" Then Cells(MyRow, 19) = Cells(MyRow, 19) + 1
 Next
Next
End Sub
https://www.herber.de/bbs/user/93976.xlsm

Gruß Matthias


  

Betrifft: AW: Excel VBA von: Heiko
Geschrieben am: 24.11.2014 12:25:08

Ich hab mich wahrscheinlich nicht richtig ausgedrückt. Ich möchte nicht alle leeren Zellen zählen sondern die die leeren Zellen von rechts nach links bis eine Zelle mit einem Eintrag kommt. In Spalte S (z.B.) brauche ich dann die Auswertung für jede Zeile.
Wie schon geschrieben bin ich kein VBA Profi. Bitte zu eueren Antworten noch ganz kurz erklären wie ich den Code anwende. Im Moment habe ich mir nur ein symbol im Schnellzugriff eingerichtet, wo ich das Makro abrufe.

Gruß Heiko