Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

daten aus tabelle in listbox

Betrifft: daten aus tabelle in listbox von: ralf
Geschrieben am: 13.06.2008 16:46:17

hallo forum

gebe über textboxen daten in spalte w, y ein . da die eingaben wie zb ölfiter , manometer , rücklauffilter
öfter vorkommen und in spalte y der preis danaben steht, soll in einer listbox nur einmal zb ölfiter stehen
und die gesamte summe die in einem monat für zb ölfilter ausgegeben werden daneben .
kann mir einer helfen

gruss
ralf

  

Betrifft: AW: daten aus tabelle in listbox von: ralf
Geschrieben am: 13.06.2008 17:31:33

hallo forum

habe meine frage falsch gestellt . habe eine abgespeckte beispieldatei beigepackt .
kann über vorgabe bestimmte artikel die oft vorkommen über listbox eintragen .
die angaben stehn in spalte w . jetzt will ich über page.monatsübersicht eine
auflistung machen in dem er die spalten w und y vergleicht und wenn er was
findet soll er aber in spalte z gucken ob der artikel öfters vorkommt und dann die gesamt summe
aurechnet.kann mir jemand helfen

https://www.herber.de/bbs/user/53048.xls

gruss
ralf


  

Betrifft: AW: daten aus tabelle in listbox von: Chris
Geschrieben am: 13.06.2008 18:26:24

Servus Ralf,

schau mal, ob das annähernd in die Richtung geht, die du meintest:

ich habe allerdings nichts mit dem Datum anfangen können und deswegen auch den ColumnCount auf 2 gesetzt.

das Addieren passiert beim daten eintragen:

https://www.herber.de/bbs/user/53051.xls

Gruß

Chris


  

Betrifft: AW: daten aus tabelle in listbox von: ralf
Geschrieben am: 13.06.2008 19:18:12

hallo chris, hallo forum

erstmal danke . in etwa so , sag ich mal, bei einkäufebar (listbox1) sollen die
die einzeleintragung(mit Datum wann gekauft) angezeigt werden und in monatsübersicht (listbox 4) soll die gesamtübersicht erfolgen .ich habe meinen code, den ich versucht habe, herausgelöscht !
habe den über listboxfüllen3 in der multipage1.page4 eingefügt . kann man deinen code
so ummodeln das er beim öffnen von monatsübersicht(listbox4) das ausführt was du jetzt gemacht hast ?

gruss
ralf


  

Betrifft: AW: daten aus tabelle in listbox von: Chris
Geschrieben am: 13.06.2008 19:30:42

Servus Ralf,

das geht im Prinzip schon, aber woher bekommen wir das Datum bzw. den Zeitraum, um eine Monatsauswertung zu machen? Oder soll die Auswertung dann über alle Monate laufen?

Du könntest z.B. auf der Multipage1 (Monatsauswertung) eine CB implementieren, bei der man auswählen kann, welcher Monat ausgewertet werden soll bzw. ich habe festgestellt, dass die UF sich nur auf den aktuellen Monat bezieht, dann wäre das ja eher weniger ein Problem, oder sind es doch mehrere Monate?

Gruß

Chris


  

Betrifft: AW: daten aus tabelle in listbox von: ralf
Geschrieben am: 13.06.2008 19:53:27

hallo chris , hallo forum

nein . es soll sich nur auf den aktuellen monat beziehen , weil ich muss ganz ehrlich sagen muss das ich durch deinen code nicht so richtig durchblicke. bei der jahresauswertung mache ich es nur über einkäufe ,
vielleicht versuche ich es dann damit, dass ich die daten für die jahresaufwertung auf dem aktuellen
tabellenblatt speichere und dann nachher nur addiere. erstmal noch danke !
.

gruss
ralf


  

Betrifft: AW: daten aus tabelle in listbox von: Chris
Geschrieben am: 13.06.2008 20:26:24

Servus Ralf,

ich erklär dir jetzt mal ganz genau meinen Code, Zeile für Zeile. Und du sagst mir, ob z.B. jeder Monat ein eigenes Tabellenblatt hat, oder wie gestaltet sich das mit dem bezug auf die Daten des aktuellen Monats. stehen die gesamten Jahresdaten in einem Sheet, oder nur die Monatsdaten?

Private Sub ListBoxFüllen()
Dim lngRow As Long, lnglast As Long
ListBox1.Clear                                             'löscht die Eintragungen in Listbox
ListBox1.ColumnCount = 2                                   'legt die anzahl der Spalten fest x  _
bis z
ListBox1.ColumnWidths = "150;30"                       'legt die grösse der spaltenlänge in  _
listbox fest
ListBox1.TextAlign = fmTextAlignLeft
With ActiveSheet ' mit aktuell aktiviertem Sheet
Dim SachArray() As Variant, PreisArray() As Variant, SachArrayNeu() As Variant
Dim lngLetzte As Long, z As Long, x As Long
Dim OG&, i&, j&, k&, h, y As Variant ' Variablendeklaration
lngLetzte = IIf(IsEmpty(.Cells(Rows.Count, 25)), .Cells(Rows.Count, 25).End(xlUp).Row, Rows. _
Count) 'letzte aus spalte Y auslesen
ReDim SachArray(1 To lngLetzte) ' zum Einlesen der Produkte einen Array dimensinoieren und zwar  _
in der Größe der vorhandenen Einträge in der Spalte Y
For z = LBound(SachArray()) To UBound(SachArray()) ' Array einlesen Sachen (spalte Y dsw.  ,25)
    SachArray(z) = .Cells(z, 25)
Next z
    OG = UBound(SachArray()) ' array sortieren ist einfach sortieren, könnte man auch weglassen, _
 ich hab's aber gern geordnet
    k = OG \ 2
    While k > 0
        For i = LBound(SachArray()) To OG - k
            j = i
            While (j >= 0) And (SachArray(j) > SachArray(j + k))
                h = SachArray(j)
            
                SachArray(j) = SachArray(j + k)
                
                SachArray(j + k) = h
               
                If j > k Then
                    j = j - k
                Else
                    j = LBound(SachArray())
                End If
            Wend
        Next i
        k = k \ 2
    Wend
For z = UBound(SachArray()) To LBound(SachArray()) + 1 Step -1 ' doppelte im eingelesenen Array  _
aus Spalte Y entfernen, weil du ja z.B. nur einmal Ölfilter da stehen haben willst
    If SachArray(z) = SachArray(z - 1) Then ' wenn der Vorgänger = dem aktuellen, dann setzte  _
den aktuellen auf 0
       SachArray(z) = ""
    End If
Next z
x = 0 ' ab hier wird ein neuer Array aufgebaut, um für die spätere Suchschleife nur die  _
einzelnen vorkommenden Produkte zu haben
For z = LBound(SachArray()) To UBound(SachArray()) ' neuen Array einlesen mit Einzelprodukten( _
ohne doppelte)
    If SachArray(z) <> "" Then
       ReDim Preserve SachArrayNeu(x) ' Array neu dimensionieren ohne den alten Wert zu  _
verlieren
       SachArrayNeu(x) = SachArray(z)
       x = x + 1 ' deswegen hier immer um eins hochzählen
    End If
Next z
Dim rSuche As Range, rFinde As Range, strErste As String
Dim dblSumme As Double
Set rFinde = .Range("Y:Y")
For z = LBound(SachArrayNeu()) To UBound(SachArrayNeu()) ' Schleife um Summen zu ermitteln fü  _
das jeweilige Produkt, hier findet die Find-methode Anwendung, um nicht jede Zeile durchlaufen zu müssen (kostet Zeit)
    Set rSuche = rFinde.Find(what:=SachArrayNeu(z), LookAt:=xlWhole, LookIn:=xlValues)
    If Not rSuche Is Nothing Then ' bei Treffer die Adresse des ersten Fundes merken
       strErste = rSuche.Address
       Do ' mach das solange, bis
         If IsNumeric(rSuche.Offset(0, 1)) Then ' da Summenbildung, wenn der Wert numerisch ist, _
 dann
            dblSumme = dblSumme + rSuche.Offset(0, 1) 'summiere auf und zwar die Zelle neben  _
dem Suchbegriff, z.B. Ölfilter
            
         End If
         Set rSuche = rFinde.FindNext(rSuche) ' den Suchbegriff neu setzten, da Schleife, sonst  _
findet er nur den ersten Eintrag
       Loop While Not rSuche Is Nothing And rSuche.Address <> strErste
    End If
    With ListBox1 ' einlesen der Listbox
        .ColumnCount = 2
        .AddItem SachArrayNeu(z) ' Produktnamen
        .List(z, 1) = Format(dblSumme, "#,##0.00\€") ' die jeweilige Summe für die produkte
    End With
    dblSumme = 0 ' summe zwecks Schleife wieder auf 0 setzten, sonst würde der Wert der anderen  _
auf die Summe des ersten Suchbegriffes aufaddiert
Next z
Set rSuche = Nothing ' Objekte zurücksetzten
Set rFinde = Nothing
End With
End Sub



den 2. Sortieralgorithmus braucht man nicht wirklich, deswegen, habe ich ihn aus dem Code herausgenommen.

Gruß

Chris


  

Betrifft: AW: daten aus tabelle in listbox von: ralf
Geschrieben am: 13.06.2008 20:31:46

hallo chris , hallo forum

habe gerade mal testhalber versucht deinen code einfach von listbox1 auf listbox4
umzuschreiben und hat wunderbar geklappt . tausend dank !!! eine frage noch bevor
ich hier lange rumdoktore kann ich über listbox4.listcount die eingaben in die tabelle
eingeben , so dass ich sie nachher einfacher abrufen kann

gruss
ralf


  

Betrifft: AW: daten aus tabelle in listbox von: Chris
Geschrieben am: 13.06.2008 20:41:43

Servus Ralf,

verstehe nicht ganz, was du meinst. Welche Tabelle?

Gruß

Chris


  

Betrifft: AW: daten aus tabelle in listbox von: ralf
Geschrieben am: 13.06.2008 21:12:27

hallo chris ,hallo forum

habe mich unglücklich ausgedrückt . sorry .
ich meine im activensheet ( tabellenblatt) zb spalte a und b, dann glaub ich das ich es hinkriege
die eingaben nachher so zu benutzen das ich eventuell eine jahresauswetung selbst hinbekomme

gruss
ralf


  

Betrifft: AW: daten aus tabelle in listbox von: Chris
Geschrieben am: 13.06.2008 21:42:18

Sorry,

aber ich verstehe immer noch nicht ganz. Willst du die Monatsauswertung nach Spalte A (Monat) und den Preis nach SpalteB schreiben?

Wieviel Tabellenblätter gibt es denn jetzt? 12? Für jeden Monat eines, oder wie ist das Ganze aufgebaut?

Mir ist das nicht wirklich klar.

Gruß

Chris


  

Betrifft: AW: daten aus tabelle in listbox von: ralf
Geschrieben am: 14.06.2008 18:33:59

hallo chris , hallo forum

genau die monatsauswerung nach spalte a und den preis nach spalte b . und es gibt für
jeden monat ein tabellenblatt . aber das ist eigentlich mehr eine spielerei als es wirklich nötig ist.
bis jetz mache ich es einfach komplett über die gesamtsumme der einkäufe , zb. januar
einkäufe 100€ , ausgaben 80€ . erstmal tausend dank für die mühe.

gruss
ralf


  

Betrifft: AW: daten aus tabelle in listbox von: Chris
Geschrieben am: 14.06.2008 20:19:58

Hallo Ralf,

das sind ja dann im Grunde die Listboxeinträge in Listbox4, die du nur nach Spalte A und B schreiben musst.

In etwa so:

With ActiveSheet
lngLetzte = IIf(IsEmpty(.Cells(Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count) 'letzte aus spalte A auslesen
.Range(.Cells(1, 1), .Cells(2, lngLetzte)).ClearContents
For z = 0 To ListBox4.ListCount - 1
If z = 0 Then
.Range("A1") = ListBox4.List(z)
.Range("B1") = ListBox4.List(z, 1)
Else
.Range("A65536").End(xlUp).Offset(1, 0) = ListBox4.List(z)
.Range("B65536").End(xlUp).Offset(1, 0) = ListBox4.List(z, 1)
End If
Next z
End With

diesen Teil- Code einfach bei ListBoxfüllen3 ganz unten vor dem End Sub einfügen.

Gruß

Chris


 

Beiträge aus den Excel-Beispielen zum Thema "daten aus tabelle in listbox"