Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1028to1032
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
Inhaltsverzeichnis

Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln

Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 12:52:00
Martin
Hallo,
ich suche nach einer Möglichkeit in einer Ergebnisliste über VBA die älteste Teilnehmerin und den ältesten Teilnehmer zu ermittelt. Die Jahränge stehen in Spalte H und das Geschlecht ("w" oder "m") in Spalte K. Mir ist zwar klar, dass ich den ältesten Jahrgang mit
"Application.WorksheetFunction.Min(Range("H1:H100"))
ermitteln kann, aber wie kann ich das Geschlecht bei der Suche berücksichtigen?
Für Vorschläge wäre ich dankbar!
Viele Grüße
Martin

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 13:40:30
Tino
Hallo,
hier mal etwas ohne VBA
 BCDEF
1NameGeburtsdatumGeschlechtFrauMann
2Herr A30.11.1988mFrau FHerr C
3Frau B01.12.1974w  
4Herr C02.12.1944m  
5Frau D03.12.2008w  
6Herr E04.12.1985m  
7Frau F05.12.1955w  
8Herr G06.12.1978m  

Formeln der Tabelle
ZelleFormel
E2{=BEREICH.VERSCHIEBEN($B$1;VERGLEICH(MIN(WENN($D$2:$D$8="w";$C$2:$C$8)); $C$2:$C$8;0); 0)}
F2{=BEREICH.VERSCHIEBEN($B$1;VERGLEICH(MIN(WENN($D$2:$D$8="m";$C$2:$C$8)); $C$2:$C$8;0); 0)}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

Gruß Tino
Anzeige
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 13:53:00
Martin
Hallo Tino,
vielen Dank für Deine Hilfe, aber leider benötige ich eine VBA-Lösung, da ich viele verschiedene Tabellenblätter mit einem Makro "abarbeiten" möchte.
Viele Grüße
Martin
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 14:44:25
Tino
Hallo,
gehe den bereich mit einer schleife durch und filtere mi m oder w mit einer if abfrage, den kleinsten wert mekst du dir in einer variable.
Das in einer funktion an die du m oder w übergeben kannst.
Schreibe vom pocket, bin jetzt nicht am pc
Gruß Tino
Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 15:28:53
Uwe
Hi,
ich habe mich bis jetzt noch nicht wirklich an UDF 'rangetraut, habe aber jetzt mal versucht Tinos Vorschlag umzusetzten. So sieht mein Ergebnis aus:

Option Explicit
Function Aeltester(strMW As String, rngJahrgang As Range, rngGeschlecht As Range)
Dim Zelle As Range
Dim intAbst As Integer
Dim intErgebnis As Integer
intErgebnis = 32000
intAbst = rngGeschlecht.Column - rngJahrgang.Column
For Each Zelle In rngJahrgang
If Zelle.Offset(0, intAbst) = strMW Then
If Zelle.Value 


Das muss wahrscheinlich noch verfeinert werden, und kommentiert, ist aber, hoffe ich, erst mal ein Ansatz der funktioniert.
Gruß
Uwe
(:o)

Anzeige
Danke, das ist die Lösung!
30.11.2008 16:49:00
Martin
Hallo Uwe,
vielen Dank, genau danach habe ich gesucht!!! Es funktioniert super!
Beste Grüße
Martin
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 15:24:36
Tino
Hallo,
so bin nochmal zurück.
Hier das Beispiel dazu
Modul Modul1
Option Explicit 
 
Sub Test() 
Dim Bereich As Range 
Set Bereich = Range("A2:C20") 
 
Debug.Print Alt_Person(Bereich, "m") 
Debug.Print Alt_Person(Bereich, "w") 
 
End Sub 
 
 
 
Function Alt_Person(Bereich As Range, geschl As String) As String 
Dim meArea 
Dim A As Long 
Dim Merkwert() 
 
Redim Merkwert(0, 1) 
meArea = Bereich 
 
For A = 1 To Ubound(meArea, 1) 
 If meArea(A, 3) = geschl Then 
    If IsEmpty(Merkwert(0, 0)) Or (meArea(A, 2) < Merkwert(0, 0) And meArea(A, 2) > 0) Then 
     Merkwert(0, 0) = meArea(A, 2) 
     Merkwert(0, 1) = meArea(A, 1) 
    End If 
 End If 
Next A 
Alt_Person = Merkwert(0, 1) 
End Function 


Im Beispiel befindet sich in Spalte A der Name, in Spalte B dass Geburtsdatum und in Spalte C das Geschlecht.
Gruß Tino

Anzeige
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 13:48:00
Bernd
Hallo, Martin!
Habe Dir auch mal was ohne VBA gebastelt - kenne mich in VBA nicht so gut aus - aber vielleicht kannst Du das ja irgendwie übersetzen. Eigentlich eine ganz simple Formel.
https://www.herber.de/bbs/user/57260.xls
Gruß Bernd
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 14:16:29
Martin
Hallo Bernd,
auch Dir vielen Dank für Deine Hilfe. Auch wenn Deine Formel ausgezeichnet funktioniert, bringt sie mich mit meinem VBA-Problem nicht viel weiter. Viele Formeln lassen sich in VBA anwenden, aber bei Matrixformeln (glaube ich) klappt das nicht mehr - Ich bekomme es leider nicht hin.
Viele Grüße
Martin
Anzeige
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 14:24:00
rofu
hi,
vielleicht so?
greuß
rofu

Sub Makro1()
If Range("o1") = "m" Then
Application.WorksheetFunction.Min (Range("H1:H100"))
Else
Application.WorksheetFunction.Min (Range("H1:H100"))
End If
End Sub


AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 14:58:00
Martin
Hallo Rofu,
leider geht das nicht, da sich das Geschlecht bei Dir auf eine Zelle bezieht und die Minimun-Funktion weiterhin den geringsten Wert aller Geburtsjahr ohne Rücksicht auf das Geschlecht in Spalte K heraussucht. Trotzdem danke für den Versuch!
Viele Grüße
Martin
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 15:50:00
rofu
hi,
ok-probier mal das mit array-formel
gruß
rofu

Sub Makro2()
Range("IV1").FormulaArray = _
"=MIN(IF(R[2]C[-245]:R[20]C[-245]=R1C15,R[2]C[-248]:R[20]C[-248]))"
Range("O3") = Range("IV1")
End Sub


Anzeige
AW: Wettkampf: Ältesten Teilnehmer wbl./mnl. ermitteln
30.11.2008 16:52:28
Martin
Hallo Rofu,
vielen Dank für Deine Bemühung. Trotzdem werde ich den VBA-Code von Uwe verwenden, denn er hat die perfekte VBA-Lösung gefunden.
Viele Grüße
Martin
@Martin von rofu
30.11.2008 18:01:00
rofu
hallo martin,
funktion von uwe ist ok
wie rufst du die funktion auf ?
würde dies funktion auch bei einem modell von mir gerne verwenden
gruß
rofu
AW: @Martin von rofu
30.11.2008 18:13:49
rofu
Hi rofu,
die Funktion steht in einem allgemeinen Modul. Dann kannst Du sie so in einer Zelle Deines Tabellenblattes nutzen:
=Aeltester(O1;H1:H25;K1:K25)
Dabei muss in O1 m oder w stehen, H1:H25 enthält die Jahrgänge und K1:K25 enthält das Geschlecht, also auch entweder m oder w.
Gruß
Uwe
(:o)
Anzeige
AW: @Uwe
30.11.2008 18:19:00
rofu
hi uwe,
das war mir schon klar..
aber was ist, wenn die zelle gelöscht wird-muss ich jedesmal die funktion per hand reinschreiben?
gruß
rofu
AW: @Uwe
30.11.2008 20:58:35
Martin
Hallo rufo,
vielleicht brauchst Du die Funktion auch für den jüngsten Teilnehmer wbl./mnl., dafür kannst Du (fast) die gleiche Funktion nehmen:
Option Explicit

Function Juengster(strMW As String, rngJahrgang As Range, rngGeschlecht As Range)
Dim Zelle As Range
Dim intAbst As Integer
Dim intErgebnis As Integer
intErgebnis = 0
intAbst = rngGeschlecht.Column - rngJahrgang.Column
For Each Zelle In rngJahrgang
If Zelle.Offset(0, intAbst) = strMW Then
If Zelle.Value > intErgebnis Then intErgebnis = Zelle.Value
End If
Next 'Zelle
Aeltester = intErgebnis
End Function


Zu Deiner Frage: Wenn Du das als Formel verwendest verhält sich die Funkion wie alle anderen Excel-Formeln.
Viele Grüße
Martin

Anzeige
AW: @Uwe
30.11.2008 21:33:00
rofu
hallo martin,
danke für deine nachricht, kann ich verwenden.
ich habe einem button das makro alter zugewiesen,
somit kann keine formel in O3 gelöscht werden, da die funktion über das makro aufgerufen wird.
vielleicht ausprobieren?
gruß
rofu

Sub alter()
Range("O3") = Aeltester
End Sub



Function Aeltester() 'strMW As String, rngJahrgang As Range, rngGeschlecht As Range)
Dim Zelle As Range
Dim intAbst As Integer
Dim intErgebnis As Integer
intErgebnis = 32000
Set strMW = Range("O1")
Set rngJahrgang = Range("H2:H25")
Set rngGeschlecht = Range("K2:K25")
intAbst = rngGeschlecht.Column - rngJahrgang.Column
For Each Zelle In rngJahrgang
If Zelle.Offset(0, intAbst) = strMW Then
If Zelle.Value 


Anzeige
AW: @Uwe
30.11.2008 22:36:00
Martin
Hallo rofu,
ich habe für meine Zwecke alles fertig "verbaut". Wenn Du die Funktion so einsetzt, dann kannst Du es auch komplett über Dein Makro laufen lassen:

Sub alter()
Dim Zelle As Range
Dim intAbst As Integer
Dim intErgebnis As Integer
intErgebnis = 32000
Set strMW = Range("O1")
Set rngJahrgang = Range("H2:H25")
Set rngGeschlecht = Range("K2:K25")
intAbst = rngGeschlecht.Column - rngJahrgang.Column
For Each Zelle In rngJahrgang
If Zelle.Offset(0, intAbst) = strMW Then
If Zelle.Value 


Viele Grüße
Martin

AW: DANKE Martin-wird gemacht-oT
01.12.2008 08:00:51
rofu

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige