Excel Zeilen dynamisch auslesen
#11
Hi,

hier nochmal umgestellt, nur wenn in Spalte A Zeile "Zähler" EMEA steht, wird das Array befüllt, in allen anderen Fällen kommt: "wir sind fertig" :
Option Explicit

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 = "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
      Else
         '       If Cells(Zähler, 1).Value = 0 Then 
         Cells(26, 1) = "Wir sind fertig"
         Exit Do
      End If
   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

Top
#12
Hi,

(09.11.2015, 16:20)Rabe schrieb: hier nochmal umgestellt, nur wenn in Spalte A Zeile "Zähler" EMEA steht, wird das Array befüllt, in allen anderen Fällen kommt: "wir sind fertig" :

und hier eine nochmal gekürzte Variante:
Option Explicit

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 = "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
            For Arrayzähler = 0 To 3
               If Products(Arrayzähler) = "" Then
                  Products(Arrayzähler) = Product
                  Cells(24, 5 + Arrayzähler).Value = Product
               End If
            Next Arrayzähler
            Zähler = Zähler + 1
         End If
      Else
         '       If Cells(Zähler, 1).Value = 0 Then 
         Cells(26, 1) = "Wir sind fertig"
         Exit Do
      End If
   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

Top
#13
Vielen Dank Ralf, an dem Next lag es Smile

Das hab ich irgendwie nicht gewusst, dass ich damit die for Schleife schließen muss :(

Jetzt läuft es, jedoch hab ich wohl noch einen Logikfehler verbaut und er spuckt mir immer A heraus.....

Dein Quellcode führt dazu, dass Excel abstürzt, von daher weiß ich nicht ob ich es schon vereinfachen kann. Aber ich schreib am besten mal, was ich eig machen möchte.
Edit: Hatte nen C&P Fehler, abstürzen tut es nicht mehr, aber funktionieren tut es auch nicht.


Ich hab eine Excelliste mit mehreren Tausend Einträgen und da möchte ich mir die Produkte dazu anzeigen lassen. Sprich ich möchte dann nach EMEA_Central suchen und mir die 5-6 verschiedenen Produktgruppen anzeigen lassen. Daher dachte ich mir ist es vielleicht das beste, wenn ich das ganze in ein Array speichere und davor immer kontrolliere ob der Wert schon im array ist und wenn nicht dann soll er ihn dazuschreiben.

Um es mal auszuprobieren habe ich mir eine kleine Exceltabelle gemacht, wo in Spalte A immer abwechselnd EMEA und APAC drin steht, in Spalte B hab ich einfach Zahlen von 1-20 genommen und in Spalte C die Produkte die ich A,B,C genannt habe (auch immer abwechselnd).

Zum Schluß hätte ich dann gerne die Angabe Produkt A,B, C. Wenn ich aktuell das Array auslese habe ich aber viermal A :19: 

Bin mit VBA leider nicht so vertraut und hatte mir daher erstmal überlegt wie ich es machen könnte und mir das entsprechende zusammen gegoogelt.
Top
#14
und noch kürzer:
   Do
      'Gefunden = False 
      'Arrayzähler = -1 
      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 = False
               For Arrayzähler = 0 To 3
                  If Products(Arrayzähler) = "" Then
                     Products(Arrayzähler) = Product
                     Cells(24, 5 + Arrayzähler).Value = Product
                  End If
               Next Arrayzähler
               Zähler = Zähler + 1
               Exit For
            Else
               Gefunden = True
               Exit For
            End If
         Next i
      Else
         '       If Cells(Zähler, 1).Value = 0 Then 
         Cells(26, 1) = "Wir sind fertig"
         Exit Do
      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


ich verstehe nur nicht, wozu da eine For i-Schleife benötigt wird, es wird in jedem Fall während i = 0 abgebrochen.
Egal, ob Products(i) <> Product oder Products(i) = Product, es wird immer mit "Exit For" die Schleife verlassen, das heißt, es kommt gar nicht zu i = 1.
Egal, was in "Gefunden" steht! Wenn Du diese Variable später nicht brauchst, kannst Du sie auch weglassen.
[-] Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:
  • Bärenmarke
Top
#15
Hi,

(09.11.2015, 16:36)Bärenmarke schrieb: Vielen Dank Ralf, an dem Next lag es Smile

Das hab ich irgendwie nicht gewusst, dass ich damit die for Schleife schließen muss :(

Jetzt läuft es, jedoch hab ich wohl noch einen Logikfehler verbaut und er spuckt mir immer A heraus.....

Welche Variante hast Du nun getestet? Bringen alle den A-Fehler?

spätestens jetzt wäre es geschickt, wenn Du Deine kleine Beispieldatei mal zur Verfügung stellst.

Also stelle bitte (D)eine (Beispiel-)Tabelle als Excel-Datei zur Verfügung oder stelle die relevanten Ausschnitte hier dar, siehe die als Wichtige Themen: markierten Forums-Beiträge.
Die farbigen Texte sind anklickbare Links:

Hier steht, wie es geht:
Beitrag 1 WICHTIG: Tabellenausschnitte und VBA-Codes im Forum einstellen
Beitrag 2 WICHTIG: Arbeitsmappen zur Verfügung stellen

Eine Bitte: Anstatt Screenshots ist eine Datei oder ein Ausschnitt besser!
"Du gehst ja auch nicht in die Werkstatt und gibst ein Foto Deines kaputten Autos ab!"
Top
#16
(09.11.2015, 16:38)Rabe schrieb: ich verstehe nur nicht, wozu da eine For i-Schleife benötigt wird, es wird in jedem Fall während i = 0 abgebrochen.
Egal, ob Products(i) <> Product oder Products(i) = Product, es wird immer mit "Exit For" die Schleife verlassen, das heißt, es kommt gar nicht zu i = 1.
Egal, was in "Gefunden" steht! Wenn Du diese Variable später nicht brauchst, kannst Du sie auch weglassen.


Der code funktioniert leider nicht.
Ich hab gegoogelt wie ich ein Array auslesen kann und bin dabei auf dieses Beispiel gestoßen.
Also ich möchte einfach schaun, ob der Wert schon in dem array steht und wenn nicht möchte ich ihn hineinschreiben Smile
Top
#17
Hi,

(09.11.2015, 16:48)Rabe schrieb: spätestens jetzt wäre es geschickt, wenn Du Deine kleine Beispieldatei mal zur Verfügung stellst.

hier habe ich Dir mal eine Datei gebastelt, die ganz ohne Makro auskommt mit einer Pivot-Tabelle:

.xlsb   Bärenmarke _1.xlsb (Größe: 18,66 KB / Downloads: 1)
[-] Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:
  • Bärenmarke
Top
#18
Sorry du bist etwas schneller wie ich lesen kann :19: 

Klar kann ich die Tabelle hochladen die ich mir gebastelt habe, kein Thema.

Und wenn ich da dann meinen code ausgraue und deinen einfüge, spuckt er mir kein Ergebnis aus.


Angehängte Dateien
.xls   columbo Test.xls (Größe: 35,5 KB / Downloads: 2)
Top
#19
Hi,

(09.11.2015, 17:05)Bärenmarke schrieb: Und wenn ich da dann meinen code ausgraue und deinen einfüge, spuckt er mir kein Ergebnis aus.

ja, das mit dem Fehler (Eintrag 0) durch den letzten Code habe ich schon gesehen.

Ich muß jetzt weg und kann erst morgen weitermachen, aber vielleicht kann sich jemand anders in der Zwischenzeit drum kümmern, wenn Dir die Pivot-Tabelle nicht weiterhilft.

Hier die aktuellste Pivot-Datei:

.xlsb   Bärenmarke _2.xlsb (Größe: 11,31 KB / Downloads: 0)
Top
#20
Vielen Dank dir schonmal, hast mir sehr geholfen! Smile

Die Pivot reicht mir leider nicht ganz aus, da ich das mir so vorgestellt habe:

Ich füge später noch einen Button ein, indem man seine Region eintragen kann und dann erscheinen nur die Daten aus der eigenen Region, dazu gibt es dann noch seperat Diagramme usw. also es kommt später noch einiges hinterher.

Aber ich versuche es mal weiter, vielleicht bekomme ich es heute ja noch selber gelöst Smile
Hab ja noch 2 Stunden Zeit heute :21:

Edit:
Ich denke wenn du mir mit dem Array helfen könntest, wäre mir schon sehr geholfen.
Ich habe mal versucht das zweite Anwendungsbeispiel hier zu implementieren, jedoch erfolglos :(
http://www.vbarchiv.net/tipps/tipp_1650-...anden.html
Das mit dem Redim führt zu Problemen wieso auch immer :(
Top


Gehe zu:


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