Excel Zeilen dynamisch auslesen
#1
Hallo zusammen,

und zwar würde ich gerne Excel Zeilen dynamisch auslesen, jedoch bekomm ich das irgendwie nicht hin und meine google suchen waren auch eher erfolglos Sad

Ich möchte später mal aus einer Tabelle nach z.b. Emea filtern und mir dazu dann alle aufgelisteten Produkte anzeigen lassen.
Ich hatte mir das so vorgestellt, dass ich die Produkte dann immer in ein Array speichere und dann vergleiche ob es schon aufgelistet ist oder nicht.
Da die Tabelle jedoch immer wieder erweitert wird, kann ich keinen festen Bereich definieren und möchte aufhören sobald ich auf eine leere Zeile stoße.

Ich hab mir dazu auch mal ein kleines Beispiel gebastelt, jedoch bekomm ich es einfach nicht hin den suchbereich zu parametrisieren bzw. weiß nicht wieso er meine Variable nicht benützt :(
Da ich mit VBA noch nicht so erfahren bin, dachte ich mir frag ich hier mal nach Smile

Das hier wäre mein Code:


Code:
Sub summieren()

Dim Zähler As Integer
Dim Summe As Integer
Dim x As Integer

Zähler = 1
 
Do
    If Cells(1, Zähler).Value = 0 Then
        Cells(1, 24) = "Wir sind fertig"
        Exit Do
    Else
        Zähler = Zähler + 1
        x = Cells(1, Zähler).Value
        Summe = Summe + x
    End If
Loop

 'x = Cells(1, 1).Value
'Cells(1, 24).Value = x

End Sub

Aber irgendwie scheint er den Zähler nicht wirklich zu benutzen :(
Hättet ihr mir einen Tipp?

Vielen Dank schonmal Smile

mfg

Bärenmarke
Top
#2
Moin,

dir ist schon klar, dass du dich spaltenweise (Zähler) durcharbeitest und nicht zeilenweise?
Die VBA-Hilfe ist gar nicht einmal so schlecht ...
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#3
(08.11.2015, 18:09)GMG-CC schrieb: Moin,

dir ist schon klar, dass du dich spaltenweise (Zähler) durcharbeitest und nicht zeilenweise?
Die VBA-Hilfe ist gar nicht einmal so schlecht ...

Au sorry, da hab ich mich wohl schlecht ausgedrückt :(
Ich meinte natürlich die Spalte runter, also Z.b. Spalte a, Zelle für Zelle.

Also ich hab schon intensiv gegoogelt gefühlt tausend verschiedene Möglichkeiten gefunden, Werte aus einer Zelle auszulesen, aber geholfen hat mir nichts.
Top
#4
(08.11.2015, 18:31)Bärenmarke schrieb: Au sorry, da hab ich mich wohl schlecht ausgedrückt :(

Im Beitrag war alles richtig! Du hast dich in der VBA-Anweisung "falsch ausgedrückt" ... Blush

Die korrekte Syntax lautet: Cells(Zeile, Spalte)

Du schreibst aber:
Code:
x = Cells(1, Zähler).Value

also: Cells(Zeile1, NeuHochgezählteSpalte).

Wenn du also Spalte_A durchsuchen willst:
Code:
x = Cells(Zähler, 1).Value

Und wenn du im VBA-Editor auf Cells klickst ind dann [F1] landest du auch im Internet bei Microsofts Hilfe zu genau diesem Stichwort. Das spart mitunter viel Zeit und ich nutze diese Möglichkeit auch noch recht oft. Was dich aber nicht am fragen hindern soll Angel .
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#5
(08.11.2015, 18:55)GMG-CC schrieb: Und wenn du im VBA-Editor auf Cells klickst ind dann [F1] landest du auch im Internet bei Microsofts Hilfe zu genau diesem Stichwort. Das spart mitunter viel Zeit und ich nutze diese Möglichkeit auch noch recht oft. Was dich aber nicht am fragen hindern soll Angel .

Super danke dir! Smile

Jetzt funktioniert es, das nächste mal versuche ich mein Glück mal mit F1, hatte bis jetzt nur nicht so tolle Erfahrungen mit den Hilfen gemacht und immer lieber google bemüht Smile

Dann werde ich morgen mal versuchen meine Funktionen Stück für Stück zu erweitern. Smile
Top
#6
Ich konnte jetzt weiterarbeiten, danke nochmal für deine Hilfe Smile

Jedoch bin ich jetzt an einem weiteren Problem angelangt, was mich verzweifeln lässt.
Und zwar bin ich dabei ein Array zu befüllen und mir die Werte ausgeben zu lassen doch er bringt mir ständig:

Fehler beim Kompilieren: End If ohne If-Block

Ich bin meinen Code jetzt gefühlt tausendmal durchgegangen und ich weiß nicht wieso er meckert, jedes If wird von einem End-If geschlossen...
Kann der Fehler auch etwas anderes sein und er gibt mir halt diesen nichtssagenden Fehler aus?

Hier mal mein Quellcode:


Code:
Sub summieren()

Dim Zähler As Integer
Dim Summe As Integer
Dim x As Integer
Dim Products(3) As String
Dim Product As String
Dim Arrayzähler As Integer
Dim i As Long
Dim Gefunden As Boolean



Zähler = 1
Do
'Gefunden = False
Arrayzähler = -1
   If Cells(Zähler, 1).Value = 0 Then
       Cells(26, 1) = "Wir sind fertig"
       Exit Do
   End If
       If Cells(Zähler, 1).Value = "EMEA" Then
           x = Cells(Zähler, 2).Value
           Summe = Summe + x
           Product = Cells(Zähler, 3).Value
           For i = 0 To UBound(Products)
               If Products(i) = Product Then
                  Gefunden = True
                  Exit For
               Else
                  Gefunden = False
                  Exit For
               End If
                   If Gefunden = False Then
                       If Products(Arrayzähler + 1) = "" Then
                           Products(Arrayzähler + 1) = Product
                           Cells(24, 5 + Arrayzähler).Value = Product
                               If Products(Arrayzähler + 1) <> "" Then
                                   Arrayzähler = Arrayzähler + 1
                                       If Products(Arrayzähler + 1) = "" Then
                                           Products(Arrayzähler + 1) = Product
                                           Cells(24, 5 + Arrayzähler).Value = Product
                                               If Products(Arrayzähler + 1) <> "" Then
                                                   Arrayzähler = Arrayzähler + 1
                                                       If Products(Arrayzähler + 1) = "" Then
                                                           Products(Arrayzähler + 1) = Product
                                                           Cells(24, 5 + Arrayzähler).Value = Product
                                                               If Products(Arrayzähler + 1) <> "" Then
                                                                   Arrayzähler = Arrayzähler + 1
                                                                       If Products(Arrayzähler + 1) = "" Then
                                                                           Products(Arrayzähler + 1) = Product
                                                                           Cells(24, 5 + Arrayzähler).Value = Product
                                                                       End If
                                                               End If
                                                       End If
                                               End If
                                       End If
                               End If
                       End If
                   End If
       End If
   Zähler = Zähler + 1
Loop


Cells(24, 2).Value = Summe

End Sub


Wäre super, wenn ihr mir einen Hinweis geben könntet :)
Top
#7
(09.11.2015, 15:19)Bärenmarke schrieb: Fehler beim Kompilieren: End If ohne If-Block

Ich bin meinen Code jetzt gefühlt tausendmal durchgegangen und ich weiß nicht wieso er meckert, jedes If wird von einem End-If geschlossen...
Kann der Fehler auch etwas anderes sein und er gibt mir halt diesen nichtssagenden Fehler aus?
[...]
Wäre super, wenn ihr mir einen Hinweis geben könntet :)

Das ist doch nicht nichtssagend, Excel sagt es Dir doch genau: Du hast ein "End If" zu viel,
aber Du hast auch definitiv ein "Next" zu wenig.

Wenn das letzte "End If" gelöscht ist, kommt der umgedrehte Fehler: If ohne End If

Wenn das fehlende Next eingefügt ist, dann tut es.
Sub summieren()
 
  Dim Zähler As Integer
  Dim Summe As Integer
  Dim x As Integer
  Dim Products(3) As String
  Dim Product As String
  Dim Arrayzähler As Integer
  Dim i As Long
  Dim Gefunden As Boolean
 
 
 
  Zähler = 1
  Do
     'Gefunden = False
     Arrayzähler = -1
     If Cells(Zähler, 1).Value = 0 Then
        Cells(26, 1) = "Wir sind fertig"
        Exit Do
     End If
     If Cells(Zähler, 1).Value = "EMEA" Then
        x = Cells(Zähler, 2).Value
        Summe = Summe + x
        Product = Cells(Zähler, 3).Value
        For i = 0 To Ubound(Products)
           If Products(i) = Product Then
              Gefunden = True
              Exit For
           Else
              Gefunden = False
              Exit For
           End If
        Next i
        If Gefunden = False Then
           If Products(Arrayzähler + 1) = "" Then
              Products(Arrayzähler + 1) = Product
              Cells(24, 5 + Arrayzähler).Value = Product
              If Products(Arrayzähler + 1) <> "" Then
                 Arrayzähler = Arrayzähler + 1
                 If Products(Arrayzähler + 1) = "" Then
                    Products(Arrayzähler + 1) = Product
                    Cells(24, 5 + Arrayzähler).Value = Product
                    If Products(Arrayzähler + 1) <> "" Then
                       Arrayzähler = Arrayzähler + 1
                       If Products(Arrayzähler + 1) = "" Then
                          Products(Arrayzähler + 1) = Product
                          Cells(24, 5 + Arrayzähler).Value = Product
                          If Products(Arrayzähler + 1) <> "" Then
                             Arrayzähler = Arrayzähler + 1
                             If Products(Arrayzähler + 1) = "" Then
                                Products(Arrayzähler + 1) = Product
                                Cells(24, 5 + Arrayzähler).Value = Product
                             End If
                          End If
                       End If
                    End If
                 End If
              End If
           End If
        End If
     End If
     Zähler = Zähler + 1
  Loop
 
  Cells(24, 2).Value = Summe
 
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Dieser Bereich geht bestimmt einfacher:
         If Gefunden = False Then
            If Products(Arrayzähler + 1) = "" Then
               Products(Arrayzähler + 1) = Product
               Cells(24, 5 + Arrayzähler).Value = Product
               If Products(Arrayzähler + 1) <> "" Then
                  Arrayzähler = Arrayzähler + 1
                  If Products(Arrayzähler + 1) = "" Then
                     Products(Arrayzähler + 1) = Product
                     Cells(24, 5 + Arrayzähler).Value = Product
                     If Products(Arrayzähler + 1) <> "" Then
                        Arrayzähler = Arrayzähler + 1
                        If Products(Arrayzähler + 1) = "" Then
                           Products(Arrayzähler + 1) = Product
                           Cells(24, 5 + Arrayzähler).Value = Product
                           If Products(Arrayzähler + 1) <> "" Then
                              Arrayzähler = Arrayzähler + 1
                              If Products(Arrayzähler + 1) = "" Then
                                 Products(Arrayzähler + 1) = Product
                                 Cells(24, 5 + Arrayzähler).Value = Product
                              End If
                           End If
                        End If
                     End If
                  End If
               End If
            End If
         End If


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

Top
#8
[Gelöscht]
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#9
Erstmal vielen Dank euch beiden Smile

Das Problem ist, wenn ich ein end If raus lösche sagt er mir Do ohne Loop und das kann definitiv nicht sein Sad
Deswegen dachte ich, das Problem ist etwas anderes. Aber was meinst du mit dem Next? Stehe da gerade auf dem Schlauch :O

Notepad ++ nutze ich schon, habe es mir auch aus sichtbarkeitsgründen dort hineinkopiert da ich in dem Modul mit dem Nachzählen fast verrückt geworden bin :20: 

Funktioniert es bei euch etwa, wenn ihr ein End if herauslöscht?
Top
#10
(09.11.2015, 15:55)Bärenmarke schrieb: Deswegen dachte ich, das Problem ist etwas anderes. Aber was meinst du mit dem Next? Stehe da gerade auf dem Schlauch :O

zum einen:
Eine For-Schleife benötigt immer ein schließendes Next, genau wie ein With ein End With oder ein If ein End If oder ein Do ein Loop oder ein While ein Until oder ...

zum zweiten:
In dem von mir geposteten Code ist das "Next i" an der richtigen Stelle, der Code müßte funktionieren.


Die verschachtelten If-Teile verstehe ich gar nicht, was soll da passieren? Warum sind das so viele und warum verschachtelt? Warum nicht mit Else?

Hier mal mit Else und zusammengefasst, teste mal, ob das das gleiche macht:
   Do
     'Gefunden = False
     Arrayzähler = -1
     If Cells(Zähler, 1).Value = 0 Then
        Cells(26, 1) = "Wir sind fertig"
        Exit Do
     End If
     If Cells(Zähler, 1).Value = "EMEA" Then
        x = Cells(Zähler, 2).Value
        Summe = Summe + x
        Product = Cells(Zähler, 3).Value
        For i = 0 To Ubound(Products)
           If Products(i) = Product Then
              Gefunden = True
              Exit For
           Else
              Gefunden = False
              Exit For
           End If
        Next i
        If Gefunden = False Then
           If Products(Arrayzähler + 1) = "" Then
              Products(Arrayzähler + 1) = Product
              Cells(24, 5 + Arrayzähler).Value = Product
           Else
              Arrayzähler = Arrayzähler + 1
           End If
           
           If Products(Arrayzähler + 1) = "" Then
              Products(Arrayzähler + 1) = Product
              Cells(24, 5 + Arrayzähler).Value = Product
           Else
              Arrayzähler = Arrayzähler + 1
           End If
           
           If Products(Arrayzähler + 1) = "" Then
              Products(Arrayzähler + 1) = Product
              Cells(24, 5 + Arrayzähler).Value = Product
           Else
              Arrayzähler = Arrayzähler + 1
           End If
           
           If Products(Arrayzähler + 1) = "" Then
              Products(Arrayzähler + 1) = Product
              Cells(24, 5 + Arrayzähler).Value = Product
           End If
           
           Zähler = Zähler + 1
        End If
       
     End If
  Loop


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste