Anzeige
Archiv - Navigation
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
644to648
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Auswahl über ListBox

Auswahl über ListBox
29.07.2005 10:29:59
Sören
Hallo leute, auf empfehlung eines beitrages habe ich meine problemstellung zur „listbox-auswahl“ abgeändert.
Anforderung:
Die combobox soll durch eine listbox ersetzt werden. Der user soll sich durch anklicken eines oder mehrerer einträge (z1 bis z…) die entsprechenden daten aus tabelle2 in tabelle1 spalte „vergleich“ anzeigen lassen können.
1. möglichkeit: auswahl eines standortes (Z1): übertragung der standortbezogenen daten von Z1 (C3:C301).
2. möglichkeit: auswahl mehrerer Standorte(z.B. Z1,Z3): übertragung des mittelwertes aus den daten der ausgewählten standorte (C3:C301 und E3:C301)
Einfacher kann ich das problem irgendwie nicht formulieren, wenn jemand lust und interesse hat, mir dabei zu helfen, wäre echt klasse. Anbei die datei und verweis auf den ursprungslink.
Gruß,
sören
bezug auf beitrag vom 23.07.05, 13:27h "listbox auswahl"
https://www.herber.de/bbs/user/25114.xls

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Link zum alten Beitrag
01.08.2005 09:43:26
Sören
guten morgen liebe leute,
ich habe nach wie vor mein eingangs formuliertes problem und wünsche mir immernoch eine elegante und professionelle lösung.
hat nicht jemand lust, mir einen tip zu geben.
gruß,
sören
AW: Link zum alten Beitrag
01.08.2005 13:25:57
MichaV
Hallo Sören,
füge mal eine ListBox ein, benenne Dein 2. Blatt in "T" um und kopiere folgenden Code in Dein Tabellenblatt1:


      
Private Sub ListBox1_Change()
Dim Formel As String
Dim i As Integer
Dim t1 As String
Dim t2 As String
Dim einWert As Boolean
Formel = "=wenn(e:e=0;" & Chr(34) & Chr(34) & ";mittelwert("
For i = 0 To ListBox1.ListCount - 1
  
If ListBox1.Selected(i) Then
    t1 = "=ADDRESS(1," & i + 3 & ",,,""T"")"
    t2 = "=ADDRESS(65," & i + 3 & ",,,""T"")"
    Formel = Formel & Evaluate(t1) & ":" & Evaluate(t2) & ";"
    einWert = 
True
  
End If
Next i
Formel = Left(Formel, Len(Formel) - 1) & "))"
If Len(Formel) > 500 Then MsgBox "Formel zu lang": Exit Sub
If einWert Then
  Range("g3:g65").FormulaLocal = Formel
Else
  Range("g3:g65").FormulaLocal = ""
End If
End Sub
Private Sub Worksheet_Activate()
'ListBox1 füllen
ListBox1.List = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Sheets(2).Range("c1:ax1")))
End Sub 
Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Link zum alten Beitrag
01.08.2005 14:48:34
Sören
Hallo micha,
erstmal super, dass du mir geantwortet hast und mir helfen magst. echt cool von dir.
aber ich meinte das ein bißchen anders.
z.B.:
1.der benutzer wählt Z1 aus;
die entsprechenden werte für z1 sollen in spalte g tab.1 ausgegeben werden.
(beispielsweise müsste dann bei D1 in tab.1 (zelle: g3) 1 stehen)
2.der benutzer wählt Z1 und Z2 durch multiselect aus;
nun soll der mittelwert dieser beiden spalten in spalte g tab.1 ausgegeben werden. (beispielsweise müsste dann bei D1 in tab.1 (Zelle: g3) gleich 1,5 stehen.) usw...
mehr als 30 werte brauche ich auch nicht - das wäre schon i.O.
gruß,
sören
Anzeige
AW: Link zum alten Beitrag
01.08.2005 15:10:12
MichaV
Hallo Sören,
ja klar, das war ein Denkfehler von mir.
So wird die Sache noch einfacher. Die Begrenzung von 30 Werten lag übrigens an der Mittelwert- Funktion. Ich hab das auch noch umgebaut, nun hast Du 1024 Zeichen für die Formel zur Verfügung, das dürfte für 70 Werte reichen.


      
Private Sub ListBox1_Change()
Dim Formel As String
Dim i As Integer
Dim t1 As String
Dim t2 As String
Dim x As Integer
Formel = "=wenn(e:e=0;" & Chr(34) & Chr(34) & ";("
For i = 0 To ListBox1.ListCount - 1
  
If ListBox1.Selected(i) Then
    t1 = "=ADDRESS(3," & i + 3 & ",4,,""T"")"
    Formel = Formel & Evaluate(t1) & "+"
    x = x + 1
  
End If
Next i
Formel = Left(Formel, Len(Formel) - 1) & ")/" & x & ")"
If Len(Formel) > 1024 Then MsgBox "Formel zu lang": Exit Sub
If x > 0 Then
  Range("g3:g65").FormulaLocal = Formel
Else
  Range("g3:g65").FormulaLocal = ""
End If
End Sub 
Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Link zum alten Beitrag
01.08.2005 16:37:10
Sören
super genial, micha!
fetten dank an dich. damit kann ich jetzt weiterarbeiten.
gruß,
sören
na Fein mT
01.08.2005 17:09:08
MichaV
Hallo Sören,
na fein, daß Du endlich eine Lösung hast ;o) Warst ja schon bischen ungeduldig, bist aber trotzdem im Threat geblieben (großes Lob ;o))
Denke bitte daran, dem anderen Forum Bescheid zu sagen, damit da sich nicht noch einer die Arbeit machen muss. Setz am Besten einen Link hierher, falls sich jemand für die Lösung interessiert.
Danke für Deine Rückmeldung!
Gruß- Micha
AW: na Fein mT
01.08.2005 21:41:00
Sören
n'abend micha,
ja, waren anfängliche irritationen, da ich hier neu war. ich hab aber draus gelernt!
habs noch ein bißchen verfeinert und es funktioniert super!
aber so ganz komplett bin ich noch nicht durchgestiegen - hättest du lust mir mal zu deinem code ne kleine erklärung zu geben.
wäre genial.
das andere posting werde ich hierher linken.
gruß und schönen abend,
sören
Anzeige
AW: na Fein mT
01.08.2005 23:26:46
MichaV
Hallo Sören,


      
Private Sub ListBox1_Change()
Dim Formel As String
Dim i As Integer
Dim t1 As String
'Dim t2 As String
Dim x As Integer
'Das Makro baut eine Formel zusammen, die Du genauso gut auch in die
'Excel- Zellen in Spalte G per Hand reinschreiben könntest.
'Das Prinzip:=Wenn(E:E=0;"";Mittelwert aus den in Listbox Selektierten)
'Mittelwert wird aus (n1+n2+n3+...+nx)/x berechnet

'Der Anfang der Formel:
'=Wenn(E:E=0;"";(  ...
Formel = "=wenn(e:e=0;" & Chr(34) & Chr(34) & ";("
'Alle Listbox- Einträge prüfen, ob sie markiert sind
For i = 0 To ListBox1.ListCount - 1
  
'Wenn markiert
  If ListBox1.Selected(i) Then
    
    
'Die Adresse der Spalte in Tabelle T ermitteln
    'guck Dir dazu die Addresse- Funktion von Excel an
    'Beim 2. ListBox- Eintrag (Index=1) ist das
    '=Adresse(3,1+3,4,,"T")
    'Also relative Adresse im Blatt T, Zeile 3, Spalte 4="T!D3"
    t1 = "=ADDRESS(3," & i + 3 & ",4,,""T"")"
    
    
'Evaluate berechnet den Ausdruck in t wie eine Excel- Zelle das machen würde
    'wir haben also die Adresse des Listbox- Eintrages und hängen noch ein + ran.
    Formel = Formel & Evaluate(t1) & "+"
    
    
'Anzahl der Elemente berechnen
    x = x + 1
  
End If
Next i
'Das letzte + im Formel- String wieder löschen und die Formel abschließen
'durch Hinzufügen von  ...   )/x)
'Damit haben wir =Wenn(E:E=0;"";(n1+n2+n3+...+nx)/x)
Formel = Left(Formel, Len(Formel) - 1) & ")/" & x & ")"
If Len(Formel) > 1024 Then MsgBox "Formel zu lang": Exit Sub
If x > 0 Then
  
'Und nun die Formel in G3:G65 reinschreiben
  'Weil wir relative Bezüge haben, passt Excel die Zeilen an.
  '(das war mein Denkfehler im ersten Versuch)
  Range("g3:g65").FormulaLocal = Formel
Else
  Range("g3:g65").FormulaLocal = ""
End If
End Sub
'war doch nicht so schwer! 
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige